The Fib multimedia system
Fib is a system for storing multimedia data (like images or films).
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
cFibElement.h
Go to the documentation of this file.
1 /**
2  * @class cFibElement
3  * file name: cFibElement.h
4  * @author Betti Oesterholz
5  * @date 17.04.2009
6  * @mail webmaster@BioKom.info
7  *
8  * System: C++
9  *
10  * This class represents a basic Fib-element.
11  * Copyright (C) @c LGPL3 2009 Betti Oesterholz
12  *
13  * This program is free software: you can redistribute it and/or modify
14  * it under the terms of the GNU Lesser General Public License (LGPL) as
15  * published by the Free Software Foundation, either version 3 of the
16  * License, or any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU Lesser General Public License for more details.
22  *
23  * You should have received a copy of the GNU Lesser General Public License
24  * along with this program. If not, see <http://www.gnu.org/licenses/>.
25  *
26  *
27  * This file contains the basisclass of all Fib-elements. It's not
28  * possible to create instances from this class.
29  * The Fib-elements are the elements of the Fib-multimedialanguage.
30  * The class cFibElement defines methods to change the structur of an
31  * Fib-object/-tree.
32  *
33  * If the structur of the Fib-object is changed just set the subobjects
34  * and call updateAllValues() from a position wher the highest Fib-element
35  * can be reached. The updateAllValues() method will make the conections.
36  * If you remove conections you have to be more carefull.
37  *
38  */
39 /*
40 History:
41 17.04.2009 Oesterholz created
42 06.01.2010 Oesterholz getAllFibElements() uses now getAllFibElementsFromPosition()
43 18.04.2010 Oesterholz evalueObject() methods changed: not a function but
44  an object is given to evalue the data
45 14.03.2011 Oesterholz getNextFibElement() const added
46 07.08.2011 Oesterholz isDefinedVariable() and getDefinedVariables() with
47  pCallingFibElement
48 19.10.2011 Oesterholz FEATURE_EQUAL_FIB_OBJECT implemented
49 11.12.2011 Oesterholz cFibSet added
50 02.01.2012 Oesterholz cFibMatrix added
51 */
52 
53 
54 #ifndef ___C_FIB_ELEMENT_H__
55 #define ___C_FIB_ELEMENT_H__
56 
57 #include "version.h"
58 #include "fibDatatyps.h"
59 #include "cReadBits.h"
60 
61 #include "cVectorPosition.h"
62 #include "cVectorProperty.h"
63 #include "cFibVariable.h"
64 #include "cDomains.h"
65 
66 #include "iEvaluePosition.h"
67 #include "iEvalueFibElement.h"
68 
69 #include "tinyxml.h"
70 
71 #include <list>
72 #include <map>
73 #include <ostream>
74 #include <istream>
75 
76 
77 using std::list;
78 using std::ostream;
79 using std::istream;
80 
81 using namespace fib;
82 
83 namespace fib{
84 
92 };
93 
94 class cRoot;//cyclic dependencie
95 class cFibLeaf;//cyclic dependencie
96 class VectorProperty;//cyclic dependencie
97 class cList;//cyclic dependencie
98 
99 
101 protected:
102 
103 friend class cFibBranch;
104 friend class cFibLimb;
105 friend class cFibLeaf;
106 friend class cRoot;
107 friend class cList;
108 friend class cIf;
109 friend class cProperty;
110 friend class cArea;
111 friend class cFunction;
112 friend class cComment;
113 friend class cExtObject;
114 friend class cFibSet;
115 friend class cFibMatrix;
116 friend class cFibVariable;
117 
118  /**
119  * the Fib-element in which this Fib-element is the subobject or
120  * the Nullpointer NULL if ther is non such
121  */
123 
124 
125 #ifndef FEATURE_FAST_UPDATE
126 
127 
128  /**
129  * the previous Fib-element in the order of Fib-elements or the
130  * Nullpointer NULL if ther is non such
131  */
133 
134  /**
135  * the next Fib-element in the order of Fib-elements or the
136  * Nullpointer NULL if ther is non such
137  */
139 
140  /**
141  * the next root-element;
142  * This is the next root-element this Element is contained in.
143  */
145 
146  /**
147  * the number of this Fib-element in the order of all Fib-elements
148  */
150 
151 #endif //FEATURE_FAST_UPDATE
152 
153 
154 #ifdef FEATURE_SIMPLE_CONSTRUCTOR
155 
156  /**
157  * parameterconstructor
158  *
159  * @param pInSuperiorElement the Fib-Element in which this Fib-element
160  * is the subobject
161  */
162  cFibElement( cFibElement * pInSuperiorElement = NULL );
163 
164 #else //FEATURE_SIMPLE_CONSTRUCTOR
165 
166  /**
167  * parameterconstructor
168  *
169  * @param pInSuperiorElement the Fib-Element in which this Fib-element
170  * is the subobject
171  * @param pInPreviousFibElement the Fib-Element which stands in th order
172  * of Fib-elements befor this Fib-element
173  * @param pInNextFibElement the Fib-Element which stands in th order
174  * of Fib-elements behind this Fib-element
175  */
176  cFibElement( cFibElement * pInSuperiorElement = NULL,
177  cFibElement * pInPreviousFibElement = NULL,
178  cFibElement * pInNextFibElement = NULL );
179 
180 #endif //FEATURE_SIMPLE_CONSTRUCTOR
181 
182 
183  /**
184  * copyconstructor
185  * This copyconstructor constructs a copy of of the given Fib-Element.
186  * It dosn't copy other Fib-elements than the given, even if ther are
187  * in the Fib-element.
188  *
189  * @param fibElement the Fib-element to copy
190  */
191  cFibElement( const cFibElement &fibElement );
192 
193 public:
194  /**
195  * destructor
196  */
197  virtual ~cFibElement();
198 
199 
200  /**
201  * @see getTypeName
202  * @return a character for the typ of the Fib-element
203  * Types are:
204  * - u: element of unknown typ
205  * - p: point
206  * - l: list-element
207  * - y: property
208  * - c: comment
209  * - a: area
210  * - f: function
211  * - i: if-condition
212  * - o: extern object element
213  * - s: extern subobject element
214  * - v: set-element
215  * - m: matrix element
216  * - r: root-element
217  */
218  virtual char getType() const = 0;
219 
220  /**
221  * This function converts a element type character into a string with
222  * the element name.
223  *
224  * @see getType
225  * @param cType a character for the type of a Fib-element, like the
226  * getTyp() returns it
227  * @return a string with the name of the Fib-element for the given character
228  */
229  static string getTypeName( char cType );
230 
231  /**
232  * This method checks, if this Fib-element is an valid Fib-element.
233  *
234  * @return true if this Fib-element is an valid Fib-element, else false
235  */
236  virtual bool isValidFibElement() const = 0;
237 
238  /**
239  * This method returns the superior Fib-element of this Fib-element.
240  *
241  * @return the superior Fib-element of this Fib-element or the NULL
242  * pointer, if non such exists
243  */
244  virtual cFibElement * getSuperiorFibElement();
245 
246 
247 #ifdef FEATURE_FAST_UPDATE
248 
249  /**
250  * This method returns the next Fib-element in the order of Fib-elements.
251  *
252  * @return a pointer to the next Fib-element in the order of Fib-elements
253  * or the NULL pointer if non such exists
254  */
255  virtual cFibElement * getNextFibElement() = 0;
256 
257  /**
258  * This method returns the next Fib-element in the order of Fib-elements.
259  *
260  * @return a pointer to the next Fib-element in the order of Fib-elements
261  * or the NULL pointer if non such exists
262  */
263  const cFibElement * getNextFibElement() const;
264 
265  /**
266  * This method returns the next Fib-element in the order of
267  * Fib-elements with the given type cTyp.
268  *
269  * @param cType the type of the Fib-element to return
270  * @return a pointer to the next Fib-element in the order of
271  * Fib-elements with the given type or the NULL pointer if non such
272  * exists
273  */
274  virtual cFibElement * getNextFibElement( char cType ) = 0;
275 
276  /**
277  * This method returns the lNumber'th Fib-element in the order of
278  * Fib-elements with the given type cTyp.
279  *
280  * @param lNumber the number of the Fib-Element to return
281  * @param bAbsolute if the lNumber is an absolute value for the wool
282  * Fib-object
283  * @return a pointer to the lNumber'th Fib-element in the order of
284  * Fib-elements or the NULL pointer if non such exists
285  */
286  virtual cFibElement * getConstFibElement( longFib lNumber,
287  bool bAbsolute=false ) const = 0;
288 
289  /**
290  * This method returns the lNumber'th Fib-element in the order of
291  * Fib-elements of the given type cTyp with the given type cTyp.
292  *
293  * @param lNumber the number of the Fib-element to return
294  * @param cType the type of the Fib-element to return
295  * @param bAbsolute if the lNumber is an absolute value for the wool
296  * Fib-object
297  * @return a pointer to the lNumber'th Fib-element in the order of
298  * Fib-elements with the given type or the NULL pointer if non such
299  * exists
300  */
301  virtual cFibElement * getConstFibElement( char cType, longFib lNumber,
302  bool bAbsolute=false ) const = 0;
303 
304 #else //FEATURE_FAST_UPDATE
305 
306  /**
307  * This method returns the next Fib-element in the order of Fib-elements.
308  *
309  * @return a pointer to the next Fib-element in the order of Fib-elements
310  * or the NULL pointer if non such exists
311  */
312  virtual cFibElement * getNextFibElement();
313 
314  /**
315  * This method returns the next Fib-element in the order of
316  * Fib-elements with the given type cTyp.
317  *
318  * @param cType the type of the Fib-element to return
319  * @return a pointer to the next Fib-element in the order of
320  * Fib-elements with the given type or the NULL pointer if non such
321  * exists
322  */
323  virtual cFibElement * getNextFibElement( char cType );
324 
325  /**
326  * This method returns the lNumber'th Fib-element in the order of
327  * Fib-elements.
328  *
329  * @param lNumber the number of the Fib-Element to return
330  * @param bAbsolute if the lNumber is an absolute value for the wool
331  * Fib-object
332  * @return a pointer to the lNumber'th Fib-element in the order of
333  * Fib-elements or the NULL pointer if non such exists
334  */
335  virtual cFibElement * getConstFibElement( longFib lNumber,
336  bool bAbsolute=false ) const;
337 
338  /**
339  * This method returns the lNumber'th Fib-element in the order of
340  * Fib-elements of the given type cTyp with the given type cTyp.
341  *
342  * @param cType the type of the Fib-element to return
343  * @param lNumber the number of the Fib-element to return
344  * @param bAbsolute if the lNumber is an absolute value for the wool
345  * Fib-object
346  * @return a pointer to the lNumber'th Fib-element in the order of
347  * Fib-elements with the given type or the NULL pointer if non such
348  * exists
349  */
350  virtual cFibElement * getConstFibElement( char cType, longFib lNumber,
351  bool bAbsolute=false ) const;
352 
353 #endif //FEATURE_FAST_UPDATE
354 
355  /**
356  * This method returns the lNumber'th Fib-element in the order of
357  * Fib-elements.
358  *
359  * @param lNumber the number of the Fib-Element to return
360  * @param bAbsolute if the lNumber is an absolute value for the wool
361  * Fib-object
362  * @return a pointer to the lNumber'th Fib-element in the order of
363  * Fib-elements or the NULL pointer if non such exists
364  */
365  cFibElement *getFibElement( longFib lNumber,
366  bool bAbsolute=false );
367 
368  /**
369  * This method returns the lNumber'th Fib-element in the order of
370  * Fib-elements of the given type cTyp with the given type cTyp.
371  *
372  * @param cType the type of the Fib-element to return
373  * @param lNumber the number of the Fib-element to return
374  * @param bAbsolute if the lNumber is an absolute value for the wool
375  * Fib-object
376  * @return a pointer to the lNumber'th Fib-element in the order of
377  * Fib-elements with the given type or the NULL pointer if non such
378  * exists
379  */
380  cFibElement *getFibElement( char cType, longFib lNumber,
381  bool bAbsolute=false );
382 
383  /**
384  * This method returns a number of (lNumberOfMaxReturnedElements)
385  * Fib-elements beginning from the reference Fib-element in the
386  * given direction of the given type cType.
387  *
388  * @param cTypeBasis the type of the reference Fib-element
389  * @param lNumber the number of the reference Fib-element to return
390  * @param cType the type of the Fib-elements to return;
391  * 'w' stands for wrong/ not correct Fib-elements
392  * @param direction the direction, beginning from the reference
393  * Fib-element, in which the to return Fib-elements should stand
394  * @param lNumberOfMaxReturnedElements the maximal number of
395  * Fib-elements to return
396  * @param bAbsolute if the lNumber is an absolute value for the wool
397  * Fib-object
398  * @return a list with the pointers to the to returning Fib-elements
399  */
400  list<cFibElement*> getAllFibElements( char cTypeBasis='u',
401  longFib lNumber=1, char cType='u', edDirection direction=ED_ALL,
402  unsignedLongFib lNumberOfMaxReturnedElements=0, bool bAbsolute=false );
403 
404  /**
405  * This method evaluades the Fib-object.
406  *
407  * @pattern strategy
408  * @param evaluePosition a reference to the object with the
409  * evaluePosition() method to evalue /store the positions and ther
410  * properties; everytime a point (to evalue) is reached in the
411  * evaluation, this method is called with the position and the
412  * properties of the point; @see iEvaluePosition
413  * @param objectPoint the object point in the order of true partobjects
414  * to evalue
415  * @return if the evalueation was successfull true, else false
416  */
417  bool evalueObjectSimple( iEvaluePosition & evaluePosition,
418  const unsignedIntFib objectPoint = 0 ) const;
419 
420 
421  /**
422  * This method evaluades the Fib-object.
423  *
424  * @pattern strategy
425  * @param evaluePosition a reference to the object with the
426  * evaluePosition() method to evalue /store the positions and ther
427  * properties; everytime a point (to evalue) is reached in the
428  * evaluation, this method is called with the position and the
429  * properties of the point; @see iEvaluePosition
430  * @param objectPoint the object point in the order of true partobjects
431  * to evalue
432  * @param liVecProperties a list with the property vectors which should
433  * be global for the evalued object
434  * @return if the evalueation was successfull true, else false
435  */
436  virtual bool evalueObject( iEvaluePosition & evaluePosition,
437  const unsignedIntFib objectPoint,
438  list<cVectorProperty> & liVecProperties ) const = 0;
439 
440  /**
441  * This method evaluades the Fib-object.
442  * Evertime a Fib-elements, with a type of the given type chars in
443  * liCFibElementTyps, is reached while evaluation, it is given
444  * back with the properties which it has.
445  * Ever pointelement is given back. The type chars for pointelements
446  * don't need to be in the list liCFibElementTyps.
447  *
448  * @pattern strategy
449  * @param evalueFibElement a reference to the object with the
450  * evalueElement() method to evalue /store the Fib-elements and ther
451  * properties; everytime a Fib-element (with one of the type given
452  * in liCFibElementTyps) is reached in the evaluation, the method
453  * evalueElement() of this objects is called with the Fib-element
454  * and the properties of the Fib-element; @see iEvalueFibElement
455  * @param objectPoint the object point in the order of true partobjects
456  * to evalue
457  * @param liCFibElementTyps a list with the type chars (@see getType)
458  * of the Fib-elements to return
459  * @return if the evalueation was successfull true, else false
460  */
461  bool evalueObjectSimple( iEvalueFibElement & evalueFibElement,
462  const unsignedIntFib objectPoint = 0,
463  const list<char> liCFibElementTyps = list<char>() );
464 
465  /**
466  * This method evaluades the Fib-object.
467  * Evertime a Fib-elements, with a type of the given type chars in
468  * liCFibElementTyps, is reached while evaluation, it is given
469  * back with the properties which it has.
470  * Ever pointelement is given back. The type chars for pointelements
471  * don't need to be in the list liCFibElementTyps.
472  *
473  * @pattern strategy
474  * @param evalueFibElement a reference to the object with the
475  * evalueElement() method to evalue /store the Fib-elements and ther
476  * properties; everytime a Fib-element (with one of the type given
477  * in liCFibElementTyps) is reached in the evaluation, the method
478  * evalueElement() of this objects is called with the Fib-element
479  * and the properties of the Fib-element; @see iEvalueFibElement
480  * @param objectPoint the object point in the order of true partobjects
481  * to evalue
482  * @param liVecProperties a list with the property vectors which should
483  * be global for the evalued object
484  * @param liCFibElementTyps a list with the type chars (@see getType)
485  * of the Fib-elements to return
486  * @return if the evalueation was successfull true, else false
487  */
488  virtual bool evalueObject( iEvalueFibElement & evalueFibElement,
489  const unsignedIntFib objectPoint,
490  list<cVectorProperty> & liVecProperties,
491  const list<char> & liCFibElementTyps ) = 0;
492 
493 
494  /**
495  * This method evaluades a value for the time needed to evalue the
496  * object.
497  * This value should not exceed lMaxTime, if the value for the time
498  * is greater than lMaxTime the evaluation will be stopt and lMaxTime
499  * returned. If lMaxTime is 0 (for infinity) the evaluation won't be
500  * stoped, this is the standard case.
501  *
502  * @see evalueObject()
503  * @param lMaxTime the maximum time for the evaluation, the returned
504  * exceed this value; the value 0 stands for infinity, so the
505  * evaluation won't be stoped
506  * @return a value for the time needed to evalue the object
507  */
508  virtual unsignedLongFib getTimeNeed( unsignedLongFib lMaxTime=0 ) const = 0;
509 
510  /**
511  * This method evaluades the size of the Fib-object in bits in the
512  * compressed file form.
513  * The optionalpart field of root-elements will be ignored.
514  *
515  * @see store()
516  * @return the size of the Fib-object in bits in the compressed form
517  */
518  virtual unsignedLongFib getCompressedSize() const = 0;
519 
520  /**
521  * This method checks if the given variable is used in the given
522  * direction from this Fib-element.
523  *
524  * @see cFibVariable
525  * @see isDefinedVariable()
526  * @param variable the variable to check if it is used
527  * @param direction the direction from this Fib-element, in which the
528  * variable should be used; standard value is ED_POSITION so yust
529  * this Fib-element will be checked
530  * @return true if the variable is used, else false
531  */
532  virtual bool isUsedVariable( const cFibVariable *variable ,
533  edDirection direction=ED_POSITION ) const = 0;
534 
535  /**
536  * This method returns all variables used in the given direction from
537  * this Fib-element.
538  *
539  * @see cFibVariable
540  * @see isDefinedVariable()
541  * @param direction the direction from this Fib-element, in which the
542  * variable should be used; standard value is ED_POSITION so yust
543  * this Fib-element will be checked
544  * @return the set with all variables used in the given direction from
545  * this Fib-element
546  */
547  virtual set<cFibVariable*> getUsedVariables( edDirection direction=ED_POSITION ) = 0;
548 
549  /**
550  * This method checks if the given variable is defined in the given
551  * direction from this Fib-element.
552  *
553  * @see cFibVariable
554  * @see isUsedVariable()
555  * @param variable the variable to check if it is defined
556  * @param direction the direction from this Fib-element, in which the
557  * variable should be defined; standard value is ED_POSITION so yust
558  * this Fib-element will be checked
559  * @return true if the variable is defined, else false
560  */
561  virtual bool isDefinedVariable( const cFibVariable *variable ,
562  edDirection direction=ED_POSITION ) const;
563 
564  /**
565  * This method returns all variables defined in the given direction from
566  * this Fib-element.
567  *
568  * @see cFibVariable
569  * @see getUsedVariables()
570  * @see isDefinedVariable()
571  * @param direction the direction from this Fib-element, in which the
572  * variable should be defined; standard value is ED_HIGHER so yust
573  * higher Fib-elements will be checked
574  * @return the set with all variables defined in the given direction from
575  * this Fib-element
576  */
577  virtual list<cFibVariable*> getDefinedVariables( edDirection direction=ED_HIGHER );
578 
579  /**
580  * This method checks if the variables in the given variableset are
581  * defined in the given direction from this Fib-element.
582  *
583  * @see cFibVariable
584  * @see isUsedVariable()
585  * @param setVariable the set with the variable to check, if it is defined
586  * @param direction the direction from this Fib-element, in which the
587  * variables should be defined; standard value is ED_HIGHER so yust
588  * higher Fib-elements will be checked
589  * @return true if the variables is are all defined, else false
590  */
591  bool variablesAreDefined( const set<cFibVariable*> & setVariable ,
592  edDirection direction=ED_HIGHER ) const;
593 
594 
595  /**
596  * This method replace the variable variableOld with the variable
597  * variableNew in the object.
598  * Don't touch variable definitions, just the uses of the varaible
599  * variableOld will be changed.
600  *
601  * @see cFibVariable
602  * @see isUsedVariable()
603  * @see isDefinedVariable()
604  * @param variableOld the variable to replace
605  * @param variableNew the variable with which the variable variableOld
606  * is to replace
607  * @return true if the variable variableOld is replaced with variableNew,
608  * else false
609  */
610  virtual bool replaceVariable( cFibVariable *variableOld,
611  cFibVariable *variableNew ) = 0;
612 
613 #ifdef FEATURE_FAST_UPDATE
614 
615  /**
616  * This method returns the number of this Fib-element in the order of
617  * Fib-Elements or order of Fib-Elements of the same type if bOfType
618  * is true.
619  *
620  * @see getNumberOfElements()
621  * @param bOfType if true the returned number is the number the order
622  * of Fib-elements of the same type as this Fib-Element, else in
623  * the order of all Fib-elements
624  * @return the number of this Fib-element in the order of fib
625  * -Elements or order of Fib-Elements of the same type if bOfType
626  * is true
627  */
628  virtual unsignedIntFib getNumberOfElement( bool bOfType=false ) const = 0;
629 
630  /**
631  * This method returns the number of this Fib-element in the order of
632  * move points.
633  *
634  * @see getNumberOfMovePoints()
635  * @return the number of this Fib-element in the order of move points
636  */
637  virtual unsignedIntFib getNumberOfMovePoint() const = 0;
638 
639 #else //FEATURE_FAST_UPDATE
640 
641  /**
642  * This method returns the number of this Fib-element in the order of
643  * Fib-Elements or order of Fib-Elements of the same type if bOfType
644  * is true.
645  *
646  * @see getNumberOfElements()
647  * @param bOfType if true the returned number is the number the order
648  * of Fib-elements of the same type as this Fib-Element, else in
649  * the order of all Fib-elements
650  * @return the number of this Fib-element in the order of fib
651  * -Elements or order of Fib-Elements of the same type if bOfType
652  * is true
653  */
654  virtual unsignedIntFib getNumberOfElement( bool bOfType=false ) const;
655 
656  /**
657  * This method returns the number of this Fib-element in the order of
658  * move points.
659  *
660  * @see getNumberOfMovePoints()
661  * @return the number of this Fib-element in the order of move points
662  */
663  virtual unsignedIntFib getNumberOfMovePoint() const;
664 
665 #endif //FEATURE_FAST_UPDATE
666 
667  /**
668  * This method returns the number of the next connected object point
669  * in the order of connected object points that conntains this fib
670  * -element.
671  *
672  * @see getNumberOfObjectPoints()
673  * @return the number of the next connected object point for this fib
674  * -element
675  */
676  virtual unsignedIntFib getNumberOfObjectPoint() const;
677 
678  /**
679  * This method returns the number of Fib-elements of a type in this fib
680  * -object.
681  *
682  * @see getType()
683  * @see getNumberOfElement()
684  * @param cType the character of the type ( @see getType() ), for which
685  * the elements should be counted; u (the standartvalue) stands for
686  * Fib-Elements of any type
687  * @return the number of Fib-elements of a type in the Fib-object
688  */
689  virtual unsignedIntFib getNumberOfElements( char cType='u' ) const = 0;
690 
691  /**
692  * This method returns the number of move points in this Fib-object.
693  *
694  * @see getNumberOfMovePoint()
695  * @return the number of move points in this Fib-object
696  */
697  virtual unsignedIntFib getNumberOfMovePoints() const = 0;
698 
699  /**
700  * This method returns the number of object points in this Fib-object.
701  *
702  * @see getNumberOfObjectPoint()
703  * @return the number of object points in this Fib-object
704  */
705  virtual unsignedIntFib getNumberOfObjectPoints() const = 0;
706 
707  /**
708  * This method converts the number of the elementPoint Fib-element
709  * of the type cType in this Fib-object to the number it has in the
710  * order of all Fib-elements.
711  *
712  * @see getNumberOfElement()
713  * @see getNumberOfElements()
714  * @see getType()
715  * @param cType the type the original Fib-element has
716  * @param elementPoint the number of the original Fib-element in the
717  * order of Fib-elements of the type cType
718  * @param bAbsolute if the lNumber is an absolute value for the wool
719  * Fib-object
720  * @return the number of the elementPoint Fib-element of the type
721  * cType in this Fib-object has in the order of all Fib-elements
722  */
723  virtual unsignedIntFib typeElementPointToElementPoint( const char cType,
724  const unsignedIntFib elementPoint, bool bAbsolute=false ) const;
725 
726  /**
727  * This method returns the numbers of all object points that contain the
728  * elementPoint Fib-element of the type cType.
729  *
730  * @see getNumberOfElement()
731  * @see getNumberOfElements()
732  * @see getNumberOfObjectPoint()
733  * @see getNumberOfObjectPoints()
734  * @see getType()
735  * @param cType the type the Fib-element has
736  * @param elementPoint the number of the Fib-element in the order of
737  * Fib-elements of the type cType
738  * @param bAbsolute if the lNumber is an absolute value for the wool
739  * Fib-object
740  * @return a list of the numbers of all object points that contain the
741  * elementPoint Fib-element of the type cType
742  */
743  virtual list<unsignedIntFib> elementPointToObjectPoints( const char cType,
744  const unsignedIntFib elementPoint, bool bAbsolute=false ) const;
745 
746  /**
747  * This method returns the numbers of all object points that contain the
748  * elementPoint Fib-element of the type cType.
749  *
750  * @see getNumberOfElement()
751  * @see getNumberOfElements()
752  * @see getNumberOfObjectPoint()
753  * @see getNumberOfObjectPoints()
754  * @see getType()
755  * @param pFibElement the Fib-element for which the object points
756  * are to evalue
757  * @param bAbsolute if the lNumber is an absolute value for the wool
758  * Fib-object
759  * @return a list of the numbers of all object points that contain the
760  * elementPoint Fib-element of the type cType
761  */
762  virtual list<unsignedIntFib> getObjectPointsForElement(
763  const cFibElement * pFibElement, bool bAbsolute=false ) const;
764 
765  /**
766  * This method returns the number of the Fib-element over wich the
767  * objectPoint object point is defined.
768  *
769  * @see getNumberOfElement()
770  * @see getNumberOfElements()
771  * @see getNumberOfObjectPoint()
772  * @see getNumberOfObjectPoints()
773  * @param uiObjectPoint the number of the object point for which the
774  * definig Fib-element number should be returned
775  * @param bAbsolute if the lNumber is an absolute value for the wool
776  * Fib-object
777  * @return the number of the Fib-element over wich the objectPoint
778  * object point is defined
779  */
780  virtual unsignedIntFib objectPointToElementPoint( const unsignedIntFib
781  uiObjectPoint, bool bAbsolute=false ) const = 0;
782 
783  /**
784  * This method inserts the given Fib-element fibElement on the
785  * specified position. The replaced Fib-element will be the subobject
786  * of the inserted Fib-element fibElement.
787  *
788  * @see getNumberOfElement()
789  * @see getNumberOfElements()
790  * @see getType()
791  * @param cType the type of the Fib-element instead of which the given
792  * Fib-element fibElement should be inserted
793  * @param elementPoint the number of the Fib-element, in the order of
794  * Fib-elements of the given type cType, in which position the given
795  * Fib-element fibElement should be inserted; if 0 the given
796  * fibElement will be inserted under this Fib-element
797  * @param fibElement the Fib-element to insert
798  * @param bAbsolute if the lNumber is an absolute value for the wool
799  * Fib-object
800  * @param bCheckVariables if true (standard value) it will be checked if
801  * the variables the Fib-element defines are needed, else the
802  * Fib-element will be removed even if its variables are needed elsewher
803  * @return true if the Fib-element fibElement was inserted, else false
804  */
805  virtual bool insertElement( cFibElement *fibElement, const char cType='u',
806  const unsignedIntFib elementPoint=0, bool bAbsolute=false,
807  bool bCheckVariables=true ) = 0;
808 
809  /**
810  * This method inserts the given Fib-object fibObject on the
811  * specified position. On the specified position a listelement will
812  * be inserted, with the old Fib-object and the given Fib-object
813  * fibObject as its subobjects.
814  *
815  * @see getNumberOfElement()
816  * @see getNumberOfElements()
817  * @see overwriteObjectWithObject()
818  * @see getType()
819  * @param cType the type of the Fib-element, on which position the
820  * given Fib-object fibObject should be inserted
821  * @param elementPoint the number of the Fib-element, in the order of
822  * Fib-elements of the given type cType, on which position the given
823  * Fib-object fibObject should be inserted
824  * @param fibObject the Fib-object to insert
825  * @param first if true, the inserted object will be the first
826  * subobject of the new listelement
827  * @param bAbsolute if the lNumber is an absolute value for the wool
828  * Fib-object
829  * @return true if the Fib-object fibObject was inserted, else false
830  */
831  virtual bool insertObjectInElement( cFibElement *fibObject, const char cType='u',
832  const unsignedIntFib elementPoint=0, bool first=true,
833  bool bAbsolute=false ) = 0;
834 
835  /**
836  * This method overwrites the Fib-object on specified position with
837  * the given Fib-object fibObject. The Fib-object on specified
838  * position will be replaced with the given Fib-object fibObject.
839  *
840  * @see getNumberOfElement()
841  * @see getNumberOfElements()
842  * @see insertObjectInElement()
843  * @see getType()
844  * @param cType the type of the Fib-element, on which position the
845  * given Fib-object fibObject should be inserted
846  * @param elementPoint the number of the Fib-element, in the order of
847  * Fib-elements of the given type cType, on which position the given
848  * Fib-object fibObject should be inserted
849  * @param fibObject the Fib-object to insert
850  * @param bDeleteOld if true, delete the old Fib-object from the memory
851  * @param bAbsolute if the elementPoint is an absolute value for the wool
852  * Fib-object
853  * @return true if the old Fib-object was overwritten and the given
854  * Fib-object fibObject was inserted, else false
855  */
856  virtual bool overwriteObjectWithObject( cFibElement *fibObject, const char cType='u',
857  const unsignedIntFib elementPoint=0, bool bDeleteOld=true,
858  bool bAbsolute=false ) = 0;
859 
860  /**
861  * This method removes the connected object with the given number in
862  * the order of connected object points.
863  * For this the defining subobject in an listelement will be removed.
864  * If the listelement contains after the operation yust one subobject,
865  * the listelement will be replaced with the subobject.
866  *
867  * @param objectPoint the number of the connected object to remove
868  * @param bDeleteOld if true, delete the connected object from the
869  * memory, else yust remove it's pointers
870  * @param bAbsolute if the objectPoint is an absolute value for the wool
871  * Fib-object
872  * @return true if the connected Fib-object was removed, else false
873  */
874  virtual bool removeObject( const unsignedIntFib objectPoint,
875  bool bDeleteOld=true, bool bAbsolute=false ) = 0;
876 
877  /**
878  * This method checks, if all Fib-elements of this Fib-object
879  * have the subobjects they need to be correct.
880  *
881  * @return true if all Fib-elements of this Fib-object have the
882  * subobjects they need to be correct, else false
883  */
884  virtual bool hasUnderAllObjects() const = 0;
885 
886  /**
887  * This method checks, if the Fib-element on the specified position
888  * is deletable.
889  * An deletable Fib-element doesn't make the Fib-object invalid if
890  * it is deleted (e.g. points- and listelements are never deletable).
891  *
892  * @see removeElement()
893  * @see cutElement()
894  * @see getType()
895  * @param cType the type of the Fib-element to check
896  * @param elementPoint the number of the Fib-element, in the order of
897  * Fib-elements of the given type cType, to check
898  * @param bAbsolute if the elementPoint is an absolute value for the wool
899  * Fib-object
900  * @param bCheckVariables if true (standard value) it will be checked if
901  * the variables the Fib-element defines are needed, else the
902  * Fib-element will be removed even if its variables are needed elsewher
903  * @return true if the Fib-element is deletable, else false
904  */
905  virtual bool isRemovableElement( const char cType='u', const unsignedIntFib
906  elementPoint=0, bool bAbsolute=false, bool bCheckVariables=true ) const;
907 
908  /**
909  * This method removes the Fib-element on the specified position.
910  *
911  * @see isDeletableElement()
912  * @see getType()
913  * @param cType the type of the Fib-element to remove
914  * @param elementPoint the number of the Fib-element, in the order of
915  * Fib-elements of the given type cType, to remove
916  * @param bAbsolute if the elementPoint is an absolute value for the wool
917  * Fib-object
918  * @param bCheckVariables if true (standard value) it will be checked if
919  * the variables the Fib-element defines are needed, else the
920  * Fib-element will be removed even if its variables are needed elsewher
921  * @return true if the Fib-element was removed, else false
922  */
923  virtual bool removeElement( const char cType='u', const unsignedIntFib
924  elementPoint=0, bool bAbsolute=false, bool bCheckVariables=true );
925 
926  /**
927  * This method cuts the Fib-element on the specified position.
928  * This works like removeElement(), except that the removed element is
929  * returned.
930  *
931  * @see isDeletableElement()
932  * @see removeElement()
933  * @see getType()
934  * @param cType the type of the Fib-element to cut
935  * @param elementPoint the number of the Fib-element, in the order of
936  * Fib-elements of the given type cType, to cut
937  * @param bAbsolute if the elementPoint is an absolute value for the wool
938  * Fib-object
939  * @param bCheckVariables if true (standard value) it will be checked if
940  * the variables the Fib-element defines are needed, else the
941  * Fib-element will be removed even if its variables are needed elsewher
942  * @return the pointer to the cuted Fib-element or NULL, if the fib
943  * -element couldn't cut
944  */
945  virtual cFibElement *cutElement( const char cType='u', const unsignedIntFib
946  elementPoint=0, bool bAbsolute=false, bool bCheckVariables=true ) = 0;
947 
948 #ifdef FEATURE_FAST_UPDATE
949 
950  /**
951  * This method deletes this given Fib-object with all the fib
952  * elements it contains and is contained in. The memory for the fib
953  * -object is freed.
954  */
955  virtual void deleteObject() = 0;
956 
957  /**
958  * This method deletes the whool given Fib-object with all the fib
959  * elements it contains and is contained in. The memory for the fib
960  * -object is freed.
961  *
962  * @param fibObject the Fib-object to delete
963  */
964  static void deleteObject( cFibElement * fibObject );
965 
966 #else //FEATURE_FAST_UPDATE
967  /**
968  * This method deletes the whool given Fib-object with all the fib
969  * elements it contains and is contained in. The memory for the fib
970  * -object is freed.
971  *
972  * @param fibObject the Fib-object to delete
973  */
974  static void deleteObject( cFibElement * fibObject );
975 #endif //FEATURE_FAST_UPDATE
976 
977  /**
978  * @return true if this Fib-element is movebel else false
979  */
980  virtual bool isMovable() const;
981 
982  /**
983  * This method moves a Fib-limb -element (cFibLimb) on the specified
984  * position over iHowfar Fib-elements.
985  * Moving is stoped if an invalid Fib-object would result (e.g. no fib
986  * -element can be moved over an Fib-elements that defines a variable
987  * the moved Fib-element uses).
988  * Moving an Fib-element into an listelement will result in an
989  * listelement with the moved element in everyone of it's subobjects.
990  *
991  * @see isDeletableElement()
992  * @see removeElement()
993  * @see getType()
994  * @param cType the type of the Fib-element to move
995  * @param elementPoint the number of the Fib-element, in the order of
996  * Fib-elements of the given type cType, to move
997  * @param iHowfar the number of Fib-elements over which the to move
998  * Fib-element should be moved; if this value is positiv the fib
999  * -element will be moved over Fib-elements it contains else over
1000  * Fib-elements it is contained in
1001  * @param bAbsolute if the elementPoint is an absolute value for the wool
1002  * Fib-object
1003  * @return the number of Fib-Elements over which the to move fib
1004  * -element was moved; if this value is positiv the Fib-element
1005  * was moved over Fib-elements it contains else over Fib-elements
1006  * it is contained in
1007  */
1008  virtual intFib moveLimbElement( const char cType='u', const unsignedIntFib
1009  elementPoint=0, const intFib iHowfar=1, bool bAbsolute=false ) = 0;
1010 
1011  /**
1012  * This method duplicates the whole Fib-object, beginning with it's
1013  * highest root-element (the one which contains all the other elements).
1014  *
1015  * @return the cloned/ duplicates Fib-object
1016  */
1017  virtual cFibElement *clone( ) const;
1018 
1019  /**
1020  * This method copies the connected object with the given number in the
1021  * order of connected objects.
1022  * For this every Fib-element, beginning from this Fib-element, that
1023  * is part of the connected object will be copied.
1024  * Variables which are not defined in the connected object but used
1025  * don't change ther reference.
1026  *
1027  * @param iObjectPoint the number of the connected object to copy;
1028  * the standartvalue is 0 for coping the complet actual object
1029  * @return the copy of the connected object or NULL if non such exists
1030  */
1031  virtual cFibElement *copy( const unsignedIntFib iObjectPoint=0 ) const;
1032 
1033  /**
1034  * This method copies the Fib-element on the specified position.
1035  * Variables which are not defined in the Fib-element but used
1036  * don't change ther reference.
1037  *
1038  * @see getType()
1039  * @param cType the type of the Fib-element to copy
1040  * @param elementPoint the number of the Fib-element, in the order of
1041  * Fib-elements of the given type cType, to copy
1042  * @param bAbsolute if the lNumber is an absolute value for the wool
1043  * Fib-object
1044  * @return the copy of the Fib-element
1045  */
1046  virtual cFibElement *copyElement( const char cType='u', const unsignedIntFib
1047  elementPoint=0, bool bAbsolute=false ) const = 0;
1048 
1049 
1050 #ifdef FEATURE_EQUAL_FIB_OBJECT
1051  /**
1052  * This method checks if the given Fib-object is equal to this fib
1053  * -object.
1054  * Variables can be others, but must be defined and used in equivalent
1055  * Fib-elements.
1056  *
1057  * @see equalInternal()
1058  * @param fibObject the Fib-object to which this Fib-object should be
1059  * equal
1060  * @param bCheckExternalObjects if true the external objects of
1061  * cExtObject will be compared
1062  * @return true if this Fib-object is equal to the given Fib-object,
1063  * else false
1064  */
1065  virtual bool equal( const cFibElement & fibObject,
1066  const bool bCheckExternalObjects=true ) const;
1067 
1068  /**
1069  * This method checks if the given Fib-element is equal to this fib
1070  * -element.
1071  * The subobjects arn't compared, not even ther count is compared.
1072  * Used variables can be others.
1073  *
1074  * @param fibElement the Fib-element to which this Fib-element should be
1075  * equal
1076  * @param bCheckExternalObjects if true the external objects of
1077  * cExtObject will be compared
1078  * @return true if this Fib-element is equal to the given Fib-object,
1079  * else false
1080  */
1081  virtual bool equalElement( const cFibElement & fibElement,
1082  const bool bCheckExternalObjects=true ) const;
1083 
1084  /**
1085  * This method checks if the given Fib-element sets the variable to
1086  * the same values as this Fib-element.
1087  *
1088  * @param variableOwn a pointer to a defined variable in this Fib-element,
1089  * it is compared to the equivalent variable fibElement in the given
1090  * Fib-element fibElement
1091  * @param fibElement the Fib-element to which this Fib-element should be
1092  * compared
1093  * @param variable a pointer to a defined variable in the other
1094  * Fib-element fibElement
1095  * @param bCheckExternalObjects if true the external objects of
1096  * cExtObject will be compared
1097  * @return true if this Fib-element sets the variable to the same
1098  * values as this Fib-element
1099  */
1100  virtual bool equalValuesSet( const cFibVariable * variableOwn,
1101  const cFibElement & fibElement,
1102  const cFibVariable * variable,
1103  const bool bCheckExternalObjects=true ) const;
1104 
1105 #else //FEATURE_EQUAL_FIB_OBJECT
1106 
1107  /**
1108  * This method checks if the given Fib-object is equal to this fib
1109  * -object.
1110  * Variables can be others, but must be defined and used in equivalent
1111  * Fib-elements.
1112  *
1113  * @param fibObject the Fib-object to which this Fib-object should be
1114  * equal
1115  * @return true if this Fib-object is equal to the given Fib-object,
1116  * else false
1117  */
1118  virtual bool equal( const cFibElement & fibObject ) const = 0;
1119 
1120  /**
1121  * This method checks if the given Fib-element is equal to this fib
1122  * -element.
1123  * The subobjects arn't compared, not even ther count is compared.
1124  * Used variables can be others.
1125  *
1126  * @param fibElement the Fib-element to which this Fib-element should be
1127  * equal
1128  * @return true if this Fib-element is equal to the given Fib-object,
1129  * else false
1130  */
1131  virtual bool equalElement( const cFibElement & fibElement ) const = 0;
1132 
1133  /**
1134  * This method checks if the given Fib-element sets the variable to
1135  * the same values as this Fib-element.
1136  *
1137  * @param variableOwn a pointer to a defined variable in this Fib-element,
1138  * it is compared to the equivalent variable fibElement in the given
1139  * Fib-element fibElement
1140  * @param fibElement the Fib-element to which this Fib-element should be
1141  * compared
1142  * @param variable a pointer to a defined variable in the other
1143  * Fib-element fibElement
1144  * @return true if this Fib-element sets the variable to the same
1145  * values as this Fib-element
1146  */
1147  virtual bool equalValuesSet( const cFibVariable * variableOwn,
1148  const cFibElement & fibElement,
1149  const cFibVariable * variable ) const;
1150 
1151 #endif //FEATURE_EQUAL_FIB_OBJECT
1152 
1153  /**
1154  * This method stores this Fib-object in the XML -format into the
1155  * given stream.
1156  *
1157  * @param stream the stream where this Fib-object should be stored to
1158  * @return true if this Fib-object is stored, else false
1159  */
1160  virtual bool storeXml( ostream &stream ) const = 0;
1161 
1162  /**
1163  * This method restores this Fib-object from the stream where it is
1164  * stored in the XML -format.
1165  *
1166  * @pattern Factory Method
1167  * @param stream the stream where the Fib-object is stored in
1168  * @param outStatus An pointer to an integervalue where the errorvalue
1169  * can be stored to. If the pointer is NULL no errorvalue will be
1170  * given back.
1171  * possible errorvalues are:
1172  * - 0 loading successful
1173  * - -1 loading error, invalid stream
1174  * - -2 loading error, invalid data in stream
1175  * - 1 loading warning, invalid data in stream, error could be corrected
1176  * - 2 loading warning, invalid data in stream, maybe the loaded
1177  * object is wrong
1178  * @return the readed Fib-object or the Nullpointer NULL, if reading
1179  * was not possible
1180  */
1181  static cFibElement *restoreXml( istream &stream, intFib *outStatus=NULL );
1182 
1183  /**
1184  * This method restores this Fib-object from the TinyXml handle where
1185  * it is stored.
1186  *
1187  * @pattern Factory Method
1188  * @param pXmlNode a pointer to the TinyXml node the Fib-object is stored in
1189  * @param outStatus An pointer to an integervalue where the errorvalue
1190  * can be stored to. If the pointer is NULL no errorvalue will be
1191  * given back.
1192  * possible errorvalues are:
1193  * - 0 loading successful
1194  * - -1 loading error, invalid node
1195  * - -2 loading error, invalid data in node
1196  * - 1 loading warning, invalid data in node, error could be corrected
1197  * - 2 loading warning, invalid data in node, maybe the loaded
1198  * object is wrong
1199  * @return the readed Fib-object or the Nullpointer NULL, if reading
1200  * was not possible
1201  */
1202  static cFibElement *restoreXml( const TiXmlNode * pXmlNode, intFib *outStatus=NULL );
1203 
1204  /**
1205  * This method restores this Fib-object from the TinyXml node where
1206  * it is stored.
1207  *
1208  * @pattern Factory Method
1209  * @param pXmlNode a pointer to the TinyXml node the Fib-object is stored in
1210  * @param outStatus An reference to an integervalue where the errorvalue
1211  * can be stored to.
1212  * possible errorvalues are:
1213  * - 0 loading successful
1214  * - -1 loading error, invalid node
1215  * - -2 loading error, invalid data in node
1216  * - 1 loading warning, invalid data in node, error could be corrected
1217  * - 2 loading warning, invalid data in node, maybe the loaded
1218  * object is wrong
1219  * @param liDefinedVariables a list with the defined variables for the
1220  * to restore Fib-element, every variable should have it's number
1221  * (the number under which it is stored) as it's value
1222  * @return the readed Fib -object or the Nullpointer NULL, if reading
1223  * was not possible
1224  */
1225  static cFibElement * restoreXml( const TiXmlNode * pXmlNode,
1226  intFib &outStatus, list<cFibVariable*> & liDefinedVariables );
1227 
1228 
1229  /**
1230  * This method stores this Fib-object in the compressed Fib-format
1231  * into the given stream.
1232  *
1233  * @param stream the stream where this Fib-object should be stored to
1234  * @return true if this Fib-object is stored, else false
1235  */
1236  virtual bool store( ostream &stream ) const;
1237 
1238  /**
1239  * This method restores this Fib-object from the stream where it is
1240  * stored in the compressed Fib-format.
1241  *
1242  * @pattern Factory Method
1243  * @param stream the stream where this Fib-object is stored to in
1244  * @param outStatus An pointer to an integervalue where the errorvalue
1245  * can be stored to. If the pointer is NULL no errorvalue will be
1246  * given back.
1247  * possible errorvalues are:
1248  * - 0 loading successful
1249  * - -1 loading error, invalid stream
1250  * - -2 loading error, invalid data in stream
1251  * - 1 loading warning, invalid data in stream, error could be corrected
1252  * - 2 loading warning, invalid data in stream, maybe the loaded
1253  * object is wrong
1254  * @return the readed Fib-object or the Nullpointer NULL, if reading
1255  * was not possible
1256  */
1257  static cFibElement *restore( istream &stream, intFib *outStatus=NULL );
1258 
1259  /**
1260  * @return a pointer to the next superior root element or NULL, if non
1261  * such exists
1262  */
1263  virtual cRoot * getSuperiorRootElement();
1264 
1265  /**
1266  * @return a pointer to the next superior root element or NULL, if non
1267  * such exists
1268  */
1269  virtual const cRoot * getSuperiorRootElement() const;
1270 
1271  /**
1272  * This method returns the identifiers of all root-objects of this
1273  * object.
1274  *
1275  * @return the identifiers of all root-objects of this object
1276  */
1277  virtual list<longFib> getAllRootObjectIdentifiers() const;
1278 
1279  /**
1280  * This method returns the identifiers of all database -objects, in the
1281  * actual database.
1282  *
1283  * @return the identifiers of all database -objects
1284  */
1285  virtual list<longFib> getAllDatabaseObjectIdentifiers() const;
1286 
1287  /**
1288  * This method returns the root-object for the given identifier.
1289  * If non such exists the Nullpoint NULL is returned.
1290  *
1291  * @param lIdentifier the identifier of the root-object to return
1292  * @return the root-object for the given identifier or NULL if non
1293  * such exists
1294  */
1295  virtual cRoot *getRootObject( longFib lIdentifier );
1296 
1297  /**
1298  * This method returns the identifiers of all from this Fib-element
1299  * accessible root-objects of this object.
1300  *
1301  * @return the identifiers of all accessible root-objects
1302  */
1303  virtual list<longFib> getAllAccessibleRootObjectIdentifiers() const;
1304 
1305  /**
1306  * This method returns the from this Fib-element accessible root
1307  * -object for the given identifier. If non such exists the Nullpointer
1308  * NULL is returned.
1309  *
1310  * @param lIdentifier the identifier of the root-object to return
1311  * @return the accessible root-object for the given identifier or NULL
1312  * if non such exists
1313  */
1314  virtual cRoot *getAccessibleRootObject( longFib lIdentifier );
1315 
1316  /**
1317  * This method returns the domains that are valid for this Fib-element.
1318  *
1319  * @return the domains that are valid for this Fib-element
1320  */
1321  virtual cDomains getValidDomains() const;
1322 
1323  /**
1324  * This method returns the value domains that are valid for this
1325  * Fib-element.
1326  *
1327  * @return the value domains that are valid for this Fib-element
1328  */
1329  virtual cDomains getValidValueDomains() const;
1330 
1331  /**
1332  * This method returns the number of dimensions in this
1333  * Fib-Multimediaobject.
1334  *
1335  * @return the number of dimensions in
1336  */
1337  virtual unsignedIntFib getNumberOfDimensions() const;
1338 
1339  /**
1340  * This method returns in which direction the iDimensionNumber dimension
1341  * is mapped.
1342  *
1343  * @param iDimensionNumber the number of the dimension for which the
1344  * mapping is to be returned
1345  * @return the direction in which the iDimensionNumber dimension is
1346  * mapped
1347  */
1348  virtual unsignedIntFib getDimensionMapping( unsignedIntFib iDimensionNumber ) const;
1349 
1350  /**
1351  * @return this method returns true if this Fib-element is an
1352  * branchelement, alse false
1353  */
1354  virtual bool isBranch() const;
1355 
1356  /**
1357  * @return this method returns true if this Fib-element is an
1358  * limbelement, alse false
1359  */
1360  virtual bool isLimb() const;
1361 
1362  /**
1363  * @return this method returns true if this Fib-element is an
1364  * leafelement, alse false
1365  */
1366  virtual bool isLeaf() const;
1367 
1368 
1369 protected:
1370 
1371 #ifdef FEATURE_FAST_UPDATE
1372 
1373  /**
1374  * This method is a helpmethod for getNumberOfElement() .
1375  * Basicly it counts the number of Fib-elements of the given type befor
1376  * the given Fib-element pLastFibElement .
1377  *
1378  * @see getNumberOfElement()
1379  * @see getNumberOfElements()
1380  * @param pLastFibElement a pointer to the Fib-element which called this
1381  * method last
1382  * @param cType the type of the Fib-elements, for which to evalue the count,
1383  * if 'u' Fib-elements of all typs are counted
1384  * @return the number of Fib-elements of the given type cType befor the
1385  * given Fib-element pLastFibElement
1386  */
1387  virtual unsignedIntFib getNumberOfElementUp( const cFibElement * pLastFibElement,
1388  const char cType ) const = 0;
1389 
1390  /**
1391  * This method is a helpmethod for getNumberOfMovePoint() .
1392  * Basicly it counts the number of move points befor the given
1393  * Fib-element pLastFibElement .
1394  *
1395  * @see getNumberOfMovePoint()
1396  * @see getNumberOfMovePoints()
1397  * @param pLastFibElement a pointer to the Fib-element which called this
1398  * method last
1399  * @return the number of movepoints befor the given Fib-element pLastFibElement
1400  */
1401  virtual unsignedIntFib getNumberOfMovePointUp(
1402  const cFibElement * pLastFibElement ) const = 0;
1403 
1404  /**
1405  * This method returns the next Fib-element in the order of
1406  * Fib-elements which is above the given fib element.
1407  * This method is used, if the method @see getNextFibElement() reaches
1408  * an leaf in the object tree.
1409  *
1410  * @see getNextFibElement()
1411  * @param pLastFibElement the Fib-element relativ to which the next
1412  * Fib-element should lay
1413  * @return a pointer to the next Fib-element in the order of Fib-elements
1414  * or the NULL pointer if non such exists
1415  */
1416  virtual cFibElement *getNextFibElementUp( const cFibElement * pLastFibElement ) = 0;
1417 
1418  /**
1419  * This method returns the next Fib-element in the order of
1420  * Fib-elements which is above the given fib element.
1421  * This method is used, if the method @see getNextFibElement() reaches
1422  * an leaf in the object tree.
1423  *
1424  * @see getNextFibElement()
1425  * @param pLastFibElement the Fib-element relativ to which the next
1426  * Fib-element should lay
1427  * @param cType the type of the Fib-element to return
1428  * @return a pointer to the next Fib-element in the order of Fib-elements
1429  * or the NULL pointer if non such exists
1430  */
1431  virtual cFibElement * getNextFibElementUp( const cFibElement * pLastFibElement,
1432  char cType ) = 0;
1433 
1434  /**
1435  * This method returns the lNumber'th Fib-element in the order of
1436  * Fib-elements which is above the given Fib-element.
1437  * This method is used, if the method @see getConstFibElement() reaches
1438  * an leaf in the object tree.
1439  *
1440  * @see getConstFibElementUp()
1441  * @param pLastFibElement the Fib-element relativ to which the next
1442  * Fib-element should lay
1443  * @param lNumber the number of the Fib-Element to return
1444  * @return a pointer to the next Fib-element in the order of Fib-elements
1445  * or the NULL pointer if non such exists
1446  */
1447  virtual cFibElement * getConstFibElementUp( const cFibElement * pLastFibElement,
1448  longFib lNumber ) const = 0;
1449 
1450  /**
1451  * This method returns the lNumber'th Fib-element in the order of
1452  * Fib-elements of the given type cTyp with the given type cTyp which is
1453  * above the given Fib-element.
1454  * This method is used, if the method @see getConstFibElement() reaches
1455  * an leaf in the object tree.
1456  *
1457  * @see getConstFibElementUp()
1458  * @param pLastFibElement the Fib-element relativ to which the next
1459  * Fib-element should lay
1460  * @param cType the type of the Fib-element to return
1461  * @param lNumber the number of the Fib-Element to return
1462  * @return a pointer to the next Fib-element in the order of Fib-elements
1463  * or the NULL pointer if non such exists
1464  */
1465  virtual cFibElement * getConstFibElementUp( const cFibElement * pLastFibElement,
1466  char cType, longFib lNumber ) const = 0;
1467 
1468 #endif //FEATURE_FAST_UPDATE
1469 
1470  /**
1471  * This method stores this Fib-object in the compressed Fib-format
1472  * into the given stream.
1473  * It is needed becouse the stream can yust store byts but the size of
1474  * Fib-elements can be any number of bits. Because of that ther have to
1475  * be a possibility to exchange the missing bits betwean the Fib-elements.
1476  *
1477  * @see store
1478  * @param stream the stream where this Fib-object should be stored to
1479  * @param cRestBits the not yet writen bits which should be stored
1480  * @param uiRestBitPosition the number of bits in the cRestBits which
1481  * should be writen respectively containing valid information
1482  * @return true if this Fib-object is stored, else false
1483  */
1484  virtual bool storeBit( ostream & stream, char & cRestBits,
1485  unsigned char & uiRestBitPosition ) const = 0;
1486 
1487  /**
1488  * This method restores this Fib-object from the TinyXml node where
1489  * it is stored.
1490  *
1491  * @param pXmlNode a pointer to the TinyXml node the Fib-object is stored in
1492  * @param outStatus An reference to an integervalue where the errorvalue
1493  * can be stored to.
1494  * possible errorvalues are:
1495  * - 0 loading successful
1496  * - -1 loading error, invalid node
1497  * - -2 loading error, invalid data in node
1498  * - 1 loading warning, invalid data in node, error could be corrected
1499  * - 2 loading warning, invalid data in node, maybe the loaded
1500  * object is wrong
1501  * @param liDefinedVariables a list with the defined variables for the
1502  * to restore Fib-element, every variable should have it's number
1503  * (the number under which it is stored) as it's value
1504  * @return the readed Fib -object or the Nullpointer NULL, if reading
1505  * was not possible
1506  */
1507  static cFibElement * restoreXmlInternal( const TiXmlNode * pXmlNode,
1508  intFib &outStatus, list<cFibVariable*> & liDefinedVariables );
1509 
1510  /**
1511  * This method restores a rootobject from the stream where it is
1512  * stored in the compressed Fib-format.
1513  * This method is for internal use only.
1514  *
1515  * @param iBitStream the stream where this rootobject is stored to in,
1516  * because this stream is an cReadBits, any number of bits can be
1517  * readed from it
1518  * @param outStatus An reference to an integervalue where the errorvalue
1519  * can be stored to. If the pointer is NULL no errorvalue will be
1520  * given back.
1521  * possible errorvalues are:
1522  * - 0 loading successful
1523  * - -1 loading error, invalid stream
1524  * - -2 loading error, invalid data in stream
1525  * - 1 loading warning, invalid data in stream, error could be corrected
1526  * - 2 loading warning, invalid data in stream, maybe the loaded
1527  * object is wrong
1528  * @param pNextRoot the next higher root-element for the to restore
1529  * Fib-elements, or the last restored root-element;
1530  * if NULL the next Fib-element restored will be an root-element
1531  * @return the readed rootobject or the Nullpointer NULL, if reading
1532  * was not possible
1533  */
1534  static cRoot * restoreRootInternal( cReadBits & iBitStream, intFib & outStatus,
1535  cRoot * pNextRoot );
1536 
1537  /**
1538  * This method restores a (non root) Fib-object from the stream where it is
1539  * stored in the compressed Fib -format.
1540  * This method is for internal use only.
1541  *
1542  * @param iBitStream the stream where this Fib-object is stored to in,
1543  * because this stream is an cReadBits, any number of bits can be
1544  * readed from it
1545  * @param outStatus An reference to an integervalue where the errorvalue
1546  * can be stored to. If the pointer is NULL no errorvalue will be
1547  * given back.
1548  * possible errorvalues are:
1549  * - 0 loading successful
1550  * - -1 loading error, invalid stream
1551  * - -2 loading error, invalid data in stream
1552  * - 1 loading warning, invalid data in stream, error could be corrected
1553  * - 2 loading warning, invalid data in stream, maybe the loaded
1554  * object is wrong
1555  * @param liDefinedVariables a list with the defined variables for the
1556  * to restore Fib-element, every variable should have it's number
1557  * (the number under which it is stored) as it's value
1558  * @param validDomains the domains valid for restoring the Fib-elements
1559  * @param pNextRoot the next higher root-element for the to restore
1560  * Fib-elements, or the last restored root-element
1561  * @return the readed Fib -object or the Nullpointer NULL, if reading
1562  * was not possible
1563  */
1564  static cFibElement * restoreInternal( cReadBits & iBitStream, intFib & outStatus,
1565  list<cFibVariable*> & liDefinedVariables, const cDomains & validDomains,
1566  cRoot * pNextRoot );
1567 
1568 #ifndef FEATURE_NO_REGISTER_NEW_FIB_
1569  /**
1570  * With this method a new Fib-element in the Fib-Object is registert
1571  * by the other Fib-elements in the Fib-Object.
1572  *
1573  * @param newFibElement the new Fib-element to register
1574  * @param uINumberOfFibElement the number of the new Fib-element in the
1575  * order of all Fib-Elements in the Fib-object
1576  * @param bDirectionUp the direction in which the registration of the
1577  * new Fib-element is performed in the Fib-object tree;
1578  * from the position on which the new Fib-Element is added the
1579  * method is called for both directions
1580  * @return true if the registration was successfull, else false
1581  */
1582  virtual bool registerNewFibElement( cFibElement *newFibElement,
1583  unsignedIntFib uINumberOfFibElement, bool bDirectionUp ) = 0;
1584 
1585 
1586  /**
1587  * With this method a new part Fib-object in the Fib-Object is
1588  * registert by the other Fib-elements in the Fib-Object.
1589  *
1590  * @param newfibObject the new part Fib-object to register
1591  * @param uILowerNumberOfFibElements the number of the Fib-element in the
1592  * new part Fib-object with the lowest number in the order of all
1593  * Fib-Elements in the entire Fib-object
1594  * @param uIUpperNumberOfFibElements the number of the Fib-element in the
1595  * new part Fib-object with the highest number in the order of all
1596  * Fib-Elements in the entire Fib-object
1597  * @param bDirectionUp the direction in which the registration of the
1598  * new part Fib-object is performed in the Fib-object tree;
1599  * @return true if the registration was successfull, else false
1600  */
1601  virtual bool registerNewFibObject( cFibElement *newfibObject,
1602  unsignedIntFib uILowerNumberOfFibElements,
1603  unsignedIntFib uIUpperNumberOfFibElements, bool bDirectionUp ) = 0;
1604 #endif //FEATURE_NO_REGISTER_NEW_FIB_
1605 
1606  /**
1607  * This method updates the values/ properties off all Fib-elements in
1608  * the whool Fib-object this Fib-element is part of.
1609  *
1610  * The highest Fib-element needs to be reachebel from this
1611  * Fib-element and every subobject should have all it's subobjects.
1612  */
1613  virtual bool updateAllValues();
1614 
1615 
1616 #ifdef FEATURE_FAST_UPDATE
1617 
1618  /**
1619  * This method cuts the connections of this Fib-element to the
1620  * given Fib-element.
1621  *
1622  * @param pFibElement the Fib-element to which to cut the connection
1623  */
1624  virtual void cutConnectionsTo( const cFibElement * pFibElement );
1625 
1626  /**
1627  * This method returns the number of the next connected object point
1628  * in the order of connected object points that conntains the given
1629  * Fib-element pLastFibElement.
1630  *
1631  * @param pLastFibElement a point to the Fib-elements for which the
1632  * connected object point is to return
1633  * @see getNumberOfObjectPoint()
1634  * @see getNumberOfObjectPoints()
1635  * @return the number of the next connected object point for the given
1636  * Fib-element
1637  */
1638  virtual unsignedIntFib getNumberOfObjectPointUp(
1639  const cFibElement * pLastFibElement ) const;
1640 
1641  /**
1642  * This method returns the numbers of all object points that contain the
1643  * elementPoint Fib -element.
1644  *
1645  * @see getNumberOfElement()
1646  * @see getNumberOfElements()
1647  * @see getNumberOfObjectPoint()
1648  * @see getNumberOfObjectPoints()
1649  * @see getType()
1650  * @param pLastFibElement a point to the Fib-elements for which the
1651  * connected object points are to return
1652  * @param pFirstFibElement the Fib-element for which this method was
1653  * called ( the reference Fib-element)
1654  * @return a list of the numbers of all object points that contain the
1655  * elementPoint Fib -element of the type cType
1656  */
1657  virtual list<unsignedIntFib> elementPointToObjectPointsUp(
1658  const cFibElement * pLastFibElement,
1659  const cFibElement * pFirstFibElement ) const;
1660 
1661 #else //FEATURE_FAST_UPDATE
1662 
1663  /**
1664  * This method cuts the connections of this Fib-element to other
1665  * Fib-elements.
1666  *
1667  * @param direction the direction into which the connections are to be
1668  * cutted
1669  * ED_HIGHER, ED_HIGHER_EQUAL, ED_ALL: will cut the conection to
1670  * superior and previous Fib-elements
1671  * ED_BELOW, ED_BELOW_EQUAL, ED_ALL: will cut the conection to
1672  * next- Fib-element and the subobjects
1673  */
1674  virtual void cutConnections( edDirection direction=ED_ALL );
1675 
1676  /**
1677  * This method updates the values/ properties off all Fib-elements in
1678  * this Fib-object beginning with this Fib-element.
1679  * Every subobject should have all it's subobjects.
1680  *
1681  * @param previosFibElement the prvios Fib-element to this Fib-element
1682  * in the order of Fib-elements; if it is NULL ther is no previos
1683  * Fib-element to this
1684  * @param pNextArm the next arm Fib-object in the next higher
1685  * Fib-brancheelement
1686  * @return a pointer to the last evalued Fib-element;
1687  * if NULL an error has occured
1688  */
1689  virtual cFibElement* updateValues( cFibElement * previosFibElement=NULL,
1690  cFibElement * pNextArm=NULL );
1691 
1692  /**
1693  * This method returns the number of the next connected object point
1694  * in the order of connected object points that conntains this fib
1695  * -element.
1696  *
1697  * @param uINumberOfStartFibElement the number, in the order of all
1698  * Fib-elements, of the Fib-element for which the connected object
1699  * point is to return
1700  * @see getNumberOfObjectPoint
1701  * @see getNumberOfObjectPoints()
1702  * @return the number of the next connected object point for this fib
1703  * -element
1704  */
1705  virtual unsignedIntFib getNumberOfObjectPoint(
1706  unsignedIntFib uINumberOfStartFibElement ) const;
1707 
1708  /**
1709  * This method returns the numbers of all object points that contain the
1710  * elementPoint Fib-element of the type cType.
1711  *
1712  * @see elementPointToObjectPoints()
1713  * @see getNumberOfElement()
1714  * @see getNumberOfElements()
1715  * @see getNumberOfObjectPoint()
1716  * @see getNumberOfObjectPoints()
1717  * @see getType()
1718  * @param referencefibObject the Fib-element for which the object points
1719  * are to returned
1720  * @param uiLastObjectPoint the number of the last object point to the
1721  * referencefibObject
1722  * @return a list of the numbers of all object points that contain the
1723  * elementPoint Fib-element of the type cType
1724  */
1725  virtual list<unsignedIntFib> elementPointToObjectPoints(
1726  const cFibElement *referencefibObject,
1727  const unsignedIntFib uiLastObjectPoint ) const;
1728 
1729 #endif //FEATURE_FAST_UPDATE
1730 
1731 
1732  /**
1733  * This method sets the each variable, which is defined over an leaf,
1734  * to an uniqe integer number greater than the given number
1735  * uiLastVariableNumber. While storing this number can be stored to
1736  * identify the variable.
1737  *
1738  * @param uiLastVariableNumber the number which was last use, this
1739  * means also is the greatest used, in this limb.
1740  * @return the number which was last use, this
1741  * means also is the greatest used, in this limb
1742  * from the method
1743  */
1744  virtual unsignedIntFib enumerateVariablesForStoring(
1745  unsignedIntFib uiLastVariableNumber = 0 ) = 0;
1746 
1747 
1748  /**
1749  * This method moves a Fib-limb -element (cFibLimb) on the specified
1750  * position over uiHowfar Fib-elements up.
1751  * Moving is stoped if an invalid Fib-object would result (e.g. no fib
1752  * -element can be moved over an Fib-elements that defines a variable
1753  * the moved Fib-element uses).
1754  * Moving an Fib-element into an listelement will result in an
1755  * listelement with the moved element in everyone of it's subobjects.
1756  *
1757  * @see moveLimbElement()
1758  * @see isDeletableElement()
1759  * @see removeElement()
1760  * @see getType()
1761  * @param cType the type of the Fib-element to move
1762  * @param elementPoint the number of the Fib-element, in the order of
1763  * Fib-elements of the given type cType, to move
1764  * @param uiHowfar the number of Fib-elements over which the to move
1765  * Fib-element should be moved up
1766  * @param bAbsolute if the elementPoint is an absolute value for the wool
1767  * Fib-object
1768  * @return the number of Fib-Elements over which the to move fib
1769  * -element was moved
1770  */
1771  intFib moveLimbElementUp( const char cType = 'u', const unsignedIntFib
1772  elementPoint = 0, const unsignedIntFib uiHowfar=1, bool bAbsolute=false );
1773 
1774  /**
1775  * This method copies the connected object with the given number in the
1776  * order of connected objects.
1777  * For this every Fib-element, beginning from this Fib-element, that
1778  * is part of the connected object will be copied.
1779  * Variables which are not defined in the connected object but used
1780  * don't change ther reference.
1781  * It is an helpmethod for the copy method. It dosn't update the
1782  * structural information of the created Fib-object.
1783  *
1784  * @param iObjectPoint the number of the connected object to copy;
1785  * the standartvalue is 0 for coping the complet actual object
1786  * @return the copy of the connected object or NULL if non such exists
1787  */
1788  virtual cFibElement *copyInternal( const unsignedIntFib iObjectPoint=0 ) const = 0;
1789 
1790  /**
1791  * This method returns a number of (lNumberOfMaxReturnedElements)
1792  * Fib-elements beginning from the actual Fib-element in the
1793  * given direction of the given type cType.
1794  * The actual Fib-element will never be included in the returned list.
1795  *
1796  * @param cType the type of the Fib-elements to return;
1797  * 'w' stands for wrong/ not correct Fib-elements
1798  * @param direction the direction, beginning from the reference
1799  * Fib-element, in which the to return Fib-elements should stand
1800  * @param lNumberOfMaxReturnedElements the maximal number of
1801  * Fib-elements to return
1802  * @return a list with the pointers to the to returning Fib-elements
1803  */
1804  virtual list<cFibElement*> getAllFibElementsFromPosition( char cType,
1805  edDirection direction, unsignedLongFib lNumberOfMaxReturnedElements ) = 0;
1806 
1807  /**
1808  * @return the highest Fib-element in the wool Fib-object this
1809  * Fib-element is part of
1810  */
1811  cFibElement * getMasterRoot();
1812 
1813  /**
1814  * @return the highest Fib-element in the wool Fib-object this
1815  * Fib-element is part of
1816  */
1817  cFibElement * getMasterRoot() const;
1818 
1819  /**
1820  * This method checks if the given variable is defined in the given
1821  * direction from this Fib-element.
1822  * This is for intern use to get the correct data from
1823  * isDefinedVariable() without pCallingFibElement.
1824  *
1825  * @see cFibVariable
1826  * @see isUsedVariable()
1827  * @param variable the variable to check if it is defined
1828  * @param direction the direction from this Fib-element, in which the
1829  * variable should be defined; standard value is ED_POSITION so yust
1830  * this Fib-element will be checked
1831  * @param pCallingFibElement the Fib-Element which called this method
1832  * @return true if the variable is used, else false
1833  */
1834  virtual bool isDefinedVariableInternal( const cFibVariable * variable,
1835  edDirection direction = ED_POSITION,
1836  const cFibElement * pCallingFibElement = NULL ) const = 0;
1837 
1838  /**
1839  * This method returns all variables defined in the given direction from
1840  * this Fib-element.
1841  * This is for intern use to get the correct data from
1842  * getDefinedVariables() without pCallingFibElement..
1843  *
1844  * @see cFibVariable
1845  * @see getUsedVariables()
1846  * @see isDefinedVariable()
1847  * @param direction the direction from this Fib-element, in which the
1848  * variable should be used; standard value is ED_POSITION so yust
1849  * this Fib-element will be checked
1850  * @param pCallingFibElement the Fib-Element which called this method
1851  * @return the set with all variables used in the given direction from
1852  * this Fib-element
1853  */
1854  virtual list< cFibVariable* > getDefinedVariablesInternal(
1855  edDirection direction = ED_HIGHER,
1856  const cFibElement * pCallingFibElement = NULL ) = 0;
1857 
1858 #ifdef FEATURE_EQUAL_FIB_OBJECT
1859 
1860  /**
1861  * This method checks if the given Fib-object is equal to this fib
1862  * -object.
1863  * Variables can be others, but must be defined and used in equivalent
1864  * Fib-elements.
1865  *
1866  * @see equal()
1867  * @see equalElementInternal
1868  * @param fibObject the Fib-object to which this Fib-object should be
1869  * equal
1870  * @param mapEqualRootObjects the root objects of this object that wher
1871  * already checked as equal
1872  * map entries:
1873  * key: the root-element of this Fib object that was checked
1874  * value: the to the key correspondending root-element of the
1875  * fibObject that was checked and which is equal to the key
1876  * root-element
1877  * (it is empty if bCheckExternalObjects == false)
1878  * @param mapEqualDefinedVariables the Fib elements that defines
1879  * variables and are equal;
1880  * map entries:
1881  * key: the Fib element of this Fib object that was checked
1882  * value: the to the key correspondending Fib element of the
1883  * fibObject that was checked and which sets its defined
1884  * variables to the same values as the key Fib element
1885  * @param bCheckExternalObjects if true the external objects of
1886  * cExtObject will be compared
1887  * @return true if this Fib-object is equal to the given Fib-object,
1888  * else false
1889  */
1890  virtual bool equalInternal( const cFibElement & fibObject,
1891  map< const cRoot *, const cRoot * > & mapEqualRootObjects,
1892  map< const cFibElement *, const cFibElement * > & mapEqualDefinedVariables,
1893  const bool bCheckExternalObjects ) const = 0;
1894 
1895  /**
1896  * This method checks if the given Fib-element is equal to this fib
1897  * -element.
1898  * The subobjects arn't compared, not even ther count is compared.
1899  * Used variables can be others.
1900  *
1901  * @param fibElement the Fib-element to which this Fib-element should be
1902  * equal
1903  * @param mapEqualRootObjects the root objects of this object that wher
1904  * already checked as equal
1905  * map entries:
1906  * key: the root-element of this Fib object that was checked
1907  * value: the to the key correspondending root-element of the
1908  * fibObject that was checked and which is equal to the key
1909  * root-element
1910  * (it is empty if bCheckExternalObjects == false)
1911  * @param mapEqualDefinedVariables the Fib elements that defines
1912  * variables and are equal;
1913  * map entries:
1914  * key: the Fib element of this Fib object that was checked
1915  * value: the to the key correspondending Fib element of the
1916  * fibObject that was checked and which sets its defined
1917  * variables to the same values as the key Fib element
1918  * @param bCheckExternalObjects if true the external objects of
1919  * cExtObject will be compared
1920  * @return true if this Fib-element is equal to the given Fib-object,
1921  * else false
1922  */
1923  virtual bool equalElementInternal( const cFibElement & fibElement,
1924  map< const cRoot *, const cRoot * > & mapEqualRootObjects,
1925  map< const cFibElement *, const cFibElement * > & mapEqualDefinedVariables,
1926  const bool bCheckExternalObjects ) const = 0;
1927 
1928 
1929  /**
1930  * This method checks if the given Fib-element sets the variable to
1931  * the same values as this Fib-element.
1932  *
1933  * @param variableOwn a pointer to a defined variable in this Fib-element,
1934  * it is compared to the equivalent variable fibElement in the given
1935  * Fib-element fibElement
1936  * @param fibElement the Fib-element to which this Fib-element should be
1937  * compared
1938  * @param variable a pointer to a defined variable in the other
1939  * Fib-element fibElement
1940  * @param mapEqualRootObjects the root objects of this object that wher
1941  * already checked as equal
1942  * map entries:
1943  * key: the root-element of this Fib object that was checked
1944  * value: the to the key correspondending root-element of the
1945  * fibObject that was checked and which is equal to the key
1946  * root-element
1947  * (it is empty if bCheckExternalObjects == false)
1948  * @param mapEqualDefinedVariables the Fib elements that defines
1949  * variables and are equal;
1950  * map entries:
1951  * key: the Fib element of this Fib object that was checked
1952  * value: the to the key correspondending Fib element of the
1953  * fibObject that was checked and which sets its defined
1954  * variables to the same values as the key Fib element
1955  * @param bCheckExternalObjects if true the external objects of
1956  * cExtObject will be compared
1957  * @return true if this Fib-element sets the variable to the same
1958  * values as this Fib-element
1959  */
1960  virtual bool equalValuesSetInternal( const cFibVariable * variableOwn,
1961  const cFibElement & fibElement,
1962  const cFibVariable * variable,
1963  map< const cRoot *, const cRoot * > & mapEqualRootObjects,
1964  map< const cFibElement *, const cFibElement * > & mapEqualDefinedVariables,
1965  const bool bCheckExternalObjects ) const;
1966 
1967 #endif //FEATURE_EQUAL_FIB_OBJECT
1968 
1969 
1970 };//end class cFibElement
1971 
1972 
1973 }//end namespace fib
1974 
1975 #endif
1976 
1977