Moka controlers
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Macros
parameter.cc
Go to the documentation of this file.
1 /*
2  * lib-controler : Un contrôleur générique de scène 3D.
3  * Copyright (C) 2004, Moka Team, Université de Poitiers, Laboratoire SIC
4  * http://www.sic.sp2mi.univ-poitiers.fr/
5  * Copyright (C) 2009, Guillaume Damiand, CNRS, LIRIS,
6  * guillaume.damiand@liris.cnrs.fr, http://liris.cnrs.fr/
7  *
8  * This file is part of lib-controler
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU Lesser General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 //******************************************************************************
25 #include "parameter.hh"
26 #include "precompile.hh"
27 #include "controler-types.hh"
28 #include <cassert>
29 using namespace std;
30 //******************************************************************************
31 CParameter::CParameter(unsigned int ANbRef) :
32  FNbRef(ANbRef)
33 {
34 }
35 //******************************************************************************
36 CParameter::CParameter(const CParameter & AParameter) :
37  FNbRef(0)
38 {
39 }
40 //******************************************************************************
42 {
43 }
44 //******************************************************************************
45 void CParameter::incNbRef(unsigned int AValue)
46 { FNbRef += AValue; }
47 //******************************************************************************
48 void CParameter::decNbRef(unsigned int AValue)
49 {
50  assert(FNbRef >= AValue);
51 
52  FNbRef -= AValue;
53  if ( FNbRef==0 ) delete this;
54 }
55 //******************************************************************************
56 unsigned int CParameter::getNbRef() const
57 { return FNbRef; }
58 //******************************************************************************
60 {
61  assert(APrecompile != NULL);
62 
63  FListPrecompile.push_back(APrecompile);
64  incNbRef();
65 }
66 //******************************************************************************
68 {
69  assert(APrecompile != NULL);
70  bool found = false;
71 
72  list<CPrecompile *>::iterator it= FListPrecompile.begin();
73  while(!found && it!=FListPrecompile.end())
74  {
75  if (*it == APrecompile)
76  {
77  FListPrecompile.erase(it);
78  found = true;
79  }
80  else
81  ++it;
82  }
83 
84  if (found) decNbRef();
85 }
86 //******************************************************************************
88 {
89  list<CPrecompile *>::iterator it = FListPrecompile.begin();
90  while( it!=FListPrecompile.end() )
91  {
92  (*it)->setToUpdate();
93  ++it;
94  }
95 }
96 //******************************************************************************