fixed: auto_ptr -> unique_ptr
[opensg.git] / Source / System / State / Shader / Variables / OSGShaderValueVariable.cpp
blobbdd2881e703f3396c23477b19d0659ba9119579e
1 /*---------------------------------------------------------------------------*\
2 * OpenSG *
3 * *
4 * *
5 * Copyright (C) 2000-2002 by the OpenSG Forum *
6 * *
7 * www.opensg.org *
8 * *
9 * contact: dirk@opensg.org, gerrit.voss@vossg.org, jbehr@zgdv.de *
10 * *
11 \*---------------------------------------------------------------------------*/
12 /*---------------------------------------------------------------------------*\
13 * License *
14 * *
15 * This library is free software; you can redistribute it and/or modify it *
16 * under the terms of the GNU Library General Public License as published *
17 * by the Free Software Foundation, version 2. *
18 * *
19 * This library is distributed in the hope that it will be useful, but *
20 * WITHOUT ANY WARRANTY; without even the implied warranty of *
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
22 * Library General Public License for more details. *
23 * *
24 * You should have received a copy of the GNU Library General Public *
25 * License along with this library; if not, write to the Free Software *
26 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
27 * *
28 \*---------------------------------------------------------------------------*/
29 /*---------------------------------------------------------------------------*\
30 * Changes *
31 * *
32 * *
33 * *
34 * *
35 * *
36 * *
37 \*---------------------------------------------------------------------------*/
39 //---------------------------------------------------------------------------
40 // Includes
41 //---------------------------------------------------------------------------
43 #include <cstdlib>
44 #include <cstdio>
46 #include "OSGConfig.h"
48 #include "OSGShaderValueVariable.h"
49 #include "OSGDrawEnv.h"
51 OSG_USING_NAMESPACE
53 // Documentation for this class is emited in the
54 // OSGShaderValueVariableBase.cpp file.
55 // To modify it, please change the .fcd file (OSGShaderValueVariable.fcd) and
56 // regenerate the base file.
58 /***************************************************************************\
59 * Class variables *
60 \***************************************************************************/
62 /***************************************************************************\
63 * Class methods *
64 \***************************************************************************/
66 void ShaderValueVariable::initMethod(InitPhase ePhase)
68 Inherited::initMethod(ePhase);
72 /***************************************************************************\
73 * Instance methods *
74 \***************************************************************************/
76 /*-------------------------------------------------------------------------*\
77 - private -
78 \*-------------------------------------------------------------------------*/
80 /*----------------------- constructors & destructors ----------------------*/
82 ShaderValueVariable::ShaderValueVariable(void) :
83 Inherited()
87 ShaderValueVariable::ShaderValueVariable(const ShaderValueVariable &source) :
88 Inherited(source)
92 ShaderValueVariable::~ShaderValueVariable(void)
96 /*----------------------------- class specific ----------------------------*/
98 void ShaderValueVariable::changed(ConstFieldMaskArg whichField,
99 UInt32 origin,
100 BitVector details)
102 MFParentFieldContainerPtr::const_iterator parentsIt =
103 this->_mfExeParents.begin();
105 MFParentFieldContainerPtr::const_iterator parentsEnd =
106 this->_mfExeParents.end();
108 MFUInt16::const_iterator idxIt = _mfExeVariableIdx.begin();
110 OSG_ASSERT(_mfExeParents.size() == _mfExeVariableIdx.size());
112 while(parentsIt != parentsEnd)
114 (*parentsIt)->changed(
115 TypeTraits<BitVector>::One << parentsIt.getParentFieldPos(),
116 ChangedOrigin::Child,
117 *idxIt);
119 ++parentsIt;
120 ++idxIt;
125 parentsIt = this->_mfParents.begin();
126 parentsEnd = this->_mfParents.end();
128 idxIt = _mfVariableIdx.begin();
130 OSG_ASSERT(_mfParents.size() == _mfVariableIdx.size());
132 while(parentsIt != parentsEnd)
134 (*parentsIt)->changed(
135 TypeTraits<BitVector>::One << parentsIt.getParentFieldPos(),
136 ChangedOrigin::Child,
137 *idxIt);
139 ++parentsIt;
140 ++idxIt;
144 Inherited::changed(whichField, origin, details);
147 void ShaderValueVariable::dump( UInt32 ,
148 const BitVector ) const
150 SLOG << "Dump ShaderValueVariable NI" << std::endl;
153 bool ShaderValueVariable::linkParent(FieldContainer * const pParent,
154 UInt16 const childFieldId,
155 UInt16 const parentFieldId)
157 OSG_ASSERT(false);
159 return false;
162 bool ShaderValueVariable::unlinkParent(FieldContainer * const pParent,
163 UInt16 const parentFieldId)
165 OSG_ASSERT(false);
167 return false;
170 void ShaderValueVariable::addParent(FieldContainer * const pParent,
171 UInt16 uiParentFieldId,
172 UInt16 uiVarIdx )
174 editMField(ParentsFieldMask, _mfParents );
175 editMField(VariableIdxFieldMask, _mfVariableIdx);
177 _mfParents .push_back(pParent, uiParentFieldId);
178 _mfVariableIdx.push_back(uiVarIdx );
182 void ShaderValueVariable::subParent(FieldContainer * const pParent)
184 Int32 iParentIdx = _mfParents.findIndex(pParent);
186 if(iParentIdx != -1)
188 editMField(ParentsFieldMask, _mfParents );
189 editMField(VariableIdxFieldMask, _mfVariableIdx);
191 _mfParents .erase(iParentIdx);
192 _mfVariableIdx.erase(iParentIdx);
196 void ShaderValueVariable::addExeParent(FieldContainer * const pParent,
197 UInt16 uiParentFieldId,
198 UInt16 uiVarIdx )
200 editMField(ExeParentsFieldMask, _mfExeParents );
201 editMField(ExeVariableIdxFieldMask, _mfExeVariableIdx);
203 _mfExeParents .push_back(pParent, uiParentFieldId);
204 _mfExeVariableIdx.push_back(uiVarIdx );
208 void ShaderValueVariable::subExeParent(FieldContainer * const pParent)
210 Int32 iParentIdx = _mfExeParents.findIndex(pParent);
212 if(iParentIdx != -1)
214 editMField(ExeParentsFieldMask, _mfExeParents );
215 editMField(ExeVariableIdxFieldMask, _mfExeVariableIdx);
217 _mfExeParents .erase(iParentIdx);
218 _mfExeVariableIdx.erase(iParentIdx);