Moka kernel
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dart.hh
Go to the documentation of this file.
1 /*
2  * lib-gmapkernel : Un noyau de 3-G-cartes et des opérations.
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-gmapkernel
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 #ifndef DART_HH
26 #define DART_HH
27 //******************************************************************************
28 #include "kernel-types.hh"
29 #include "inline-macro.hh"
30 
31 #include <bitset>
32 //******************************************************************************
33 class CAttribute;
34 class CEmbedding;
35 
36 namespace GMap3d
37 {
50  class CDart
51  {
52  public:
53  // @name Constructeurs et destructeur
54  // @{
55 
65  CDart();
66 
76  CDart(const CDart& ADart);
77 
90  CDart(const std::bitset<NB_MARKS>& AMarks);
91 
99  ~CDart();
100 
101  // @}
111  // @{
112 
122  void* getDirectInfo(int ADirectIndex) const;
123 
130  void setDirectInfo(int ADirectIndex, void* AValue);
131 
132  // @}
133  // @name Gestion des plongements
134  // @{
135 
148  CEmbedding* getFirstEmbedding() const;
149 
160  void setFirstEmbedding(CEmbedding* AEmbedding);
161 
171  CEmbedding* getEmbedding(TOrbit AOrbit) const;
172 
183  void addEmbedding(CEmbedding* AEmbedding);
184 
196  CEmbedding* removeEmbedding(CEmbedding* AEmbedding);
197 
209 
220  void deleteEmbedding(CEmbedding* AEmbedding);
221 
231  void deleteEmbedding(TOrbit AOrbit);
232 
243  void mergeEmbedding(CEmbedding* AEmbedding);
244 
256  CAttribute* getAttribute (TOrbit AOrbit, TAttributeId AAttribType) const;
257 
270  void addAttribute(TOrbit AOrbit, CAttribute* AAttribute);
271 
284  CAttribute* removeAttribute(TOrbit AOrbit, TAttributeId AAttribType);
285 
295  void deleteAttribute(TOrbit AOrbit, TAttributeId AAttribType);
296 
308  void setOrbitUsed(TOrbit AOrbit);
309 
316  bool isOrbitUsed(TOrbit AOrbit) const;
317 
326  void unsetOrbitUsed(TOrbit AOrbit);
327 
328  // @}
329  // @name Chaînage des brins dans la carte généralisée
330  // @{
331 
343  CDart* getNext() const;
344 
352  CDart* getPrev() const;
353 
364  void setNext(CDart* ADart);
365 
373  void setPrev(CDart* ADart);
374 
375  // @}
376  // @name Accès aux involutions
377  // @{
378 
389  CDart* getAlpha0() const;
390 
398  CDart* getAlpha1() const;
399 
407  CDart* getAlpha2() const;
408 
416  CDart* getAlpha3() const;
417 
427  CDart* getAlpha(int ADimension) const;
428 
439  void setAlpha0(CDart* ADart);
440 
448  void setAlpha1(CDart* ADart);
449 
457  void setAlpha2(CDart* ADart);
458 
466  void setAlpha3(CDart* ADart);
467 
477  void setAlpha (CDart* ADart, int ADimension);
478 
488  bool isFree0() const;
489 
497  bool isFree1() const;
498 
506  bool isFree2() const;
507 
515  bool isFree3() const;
516 
527  bool isFree(int ADimension) const;
528 
538  void setFree0();
539 
545  void setFree1();
546 
552  void setFree2();
553 
559  void setFree3();
560 
572  void setFree(int ADimension);
573 
574  // @}
575  // @name Gestion des marques
576  // @{
577 
589  bool getMark(int AMarkNumber) const;
590 
601  void setMark(int AMarkNumber, bool AValue);
602 
610  std::bitset<NB_MARKS> getMarks() const;
611 
620  void setMarks(const std::bitset<NB_MARKS> & AMarks);
621 
622  // @}
623 
624  private:
625  // @name Champs privés
626  // @{
627 
629  CDart* FAlpha[4];
630 
632  CEmbedding* FFirstEmbedding;
633 
635  std::bitset<NB_MARKS> FMarks;
636 
642  std::bitset<16> FUsedOrbits;
643 
645  void* FDirectInfo[NB_DIRECT_INFO];
646 
651  CDart* FPrev;
652  CDart* FNext;
653 
654  // @}
655  };
656 
657 } // namespace GMap3d
658 //******************************************************************************
659 #include INCLUDE_INLINE("dart.icc")
660 //******************************************************************************
661 #endif // DART_HH
662 //******************************************************************************