source: nrEngine/src/VariadicArgument.cpp @ 18

Revision 18, 3.0 KB checked in by art, 13 years ago (diff)
Line 
1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
6 *   This program is free software; you can redistribute it and/or modify  *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13//----------------------------------------------------------------------------------
14// Includes
15//----------------------------------------------------------------------------------
16#include "VariadicArgument.h"
17#include "Exception.h"
18
19namespace nrEngine {
20
21        //----------------------------------------------------------------------------------
22        VarArg::VarArg() : count(0)
23        {
24
25        }
26
27        //----------------------------------------------------------------------------------
28        VarArg::VarArg(const boost::any& p) : count(1)
29        {
30                mArgs.push_back(p);
31        }
32
33        //----------------------------------------------------------------------------------
34        VarArg::VarArg(const VarArg& v)
35        {
36                // copy all elemnts form v into this
37                this->count = v.count;
38                this->mArgs = v.mArgs;
39        }
40
41        //----------------------------------------------------------------------------------
42        VarArg& VarArg::operator, (const boost::any& p)
43        {
44                // add new element to the list
45                mArgs.push_back(p);
46                count ++;
47                return *this;
48        }
49
50        //----------------------------------------------------------------------------------
51        boost::any VarArg::pop_front()
52        {
53                NR_ASSERT(count > 0);           
54                boost::any p = mArgs.front();
55                mArgs.pop_front();
56                count --;
57                return p;
58        }
59
60        //----------------------------------------------------------------------------------
61        boost::any VarArg::pop_back()
62        {
63                NR_ASSERT(count > 0);
64                boost::any p = mArgs.back();
65                mArgs.pop_back();
66                count --;
67                return p;
68        }
69
70        //----------------------------------------------------------------------------------
71        void VarArg::push_back(const boost::any& p)
72        {
73                *this,p;
74        }
75
76        //----------------------------------------------------------------------------------
77        void VarArg::empty()
78        {
79                mArgs.empty();
80                count = 0;
81        }
82
83        //----------------------------------------------------------------------------------
84        boost::any& VarArg::_get(int index)
85        {
86                // check if the index is OK
87                NR_ASSERT(index >= 0 && index < count);
88
89                // get the value on this position
90                args::iterator it = mArgs.begin();
91                for (int k=0; k < index; k++) it++;
92                //it = it + index;
93               
94                return *it;
95        }
96       
97        //----------------------------------------------------------------------------------
98        boost::any& VarArg::operator[](int index)
99        {
100                return _get(index);
101        }
102
103};
104
Note: See TracBrowser for help on using the repository browser.