00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef G_MAP_BASIC_HH
00026 #define G_MAP_BASIC_HH
00027
00028 #include "kernel-types.hh"
00029 #include "inline-macro.hh"
00030
00031 #include <bitset>
00032
00033 namespace GMap3d
00034 {
00035 class CDart;
00036
00049 class CGMapBasic
00050 {
00051 public:
00052
00053
00054
00056 CGMapBasic();
00057
00059 virtual ~CGMapBasic();
00060
00061
00062
00063
00064
00070 void randomizeDarts();
00071
00076 void removeAllDarts();
00077
00083 virtual void empty();
00084
00085
00086
00087
00088
00094 int getNewDirectInfo();
00095
00102 void freeDirectInfo(int ADirectIndex);
00103
00111 void* getDirectInfo(CDart* ADart, int ADirectIndex) const;
00112
00121 void setDirectInfo(CDart* ADart, int ADirectIndex, void* APointer);
00122
00123
00124
00125
00126
00132 CDart* getFirstDart() const;
00133
00139 void setFirstDart(CDart* ADart);
00140
00141
00142
00143
00144
00150 int getNewMark();
00151
00160 bool getMaskMark(int AMarkNumber) const;
00161
00168 void freeMark(int AMarkNumber);
00169
00178 void negateMaskMark(int AMarkNumber);
00179
00188 bool isWholeMapUnmarked(int AMarkNumber);
00189
00197 int getNbUsedMarks() const;
00198
00208 bool isMarked(const CDart* ADart, int AMarkNumber) const;
00209
00219 void setMarkTo(CDart* ADart, int AMarkNumber, bool AState);
00220
00228 void setMark(CDart* ADart, int AMarkNumber);
00229
00237 void unsetMark(CDart* ADart, int AMarkNumber);
00238
00246 void setMarks(CDart* ADart, const std::bitset<NB_MARKS> & AMarks) const;
00247
00255 std::bitset<NB_MARKS> getMarks(CDart* ADart) const;
00256
00257
00258
00259
00260
00269 bool isOrbitUsed(TOrbit AOrbit) const;
00270
00279 void setOrbitUsed(TOrbit AOrbit);
00280
00290 void unsetOrbitUsed(TOrbit AOrbit);
00291
00301 bool isOrbitUsed(CDart* ADart, TOrbit AOrbit) const;
00302
00303
00304
00305
00306
00316 virtual CDart* newDart();
00317
00327 virtual void delDart(CDart* ADart);
00328
00335 CDart* addMapDart();
00336
00343 void delMapDart(CDart* ADart);
00344
00345
00346
00361
00362 bool isFree0(const CDart* ADart) const;
00363 bool isFree1(const CDart* ADart) const;
00364 bool isFree2(const CDart* ADart) const;
00365 bool isFree3(const CDart* ADart) const;
00366
00367
00375 bool isFree(const CDart* ADart, int ADimension) const;
00376
00381
00382 CDart* alpha0(const CDart* ADart) const;
00383 CDart* alpha1(const CDart* ADart) const;
00384 CDart* alpha2(const CDart* ADart) const;
00385 CDart* alpha3(const CDart* ADart) const;
00386
00387
00393 CDart* alpha(const CDart* ADart, int ADimension) const;
00394
00401
00402 void linkAlpha0(CDart* ADart1, CDart* ADart2);
00403 void linkAlpha1(CDart* ADart1, CDart* ADart2);
00404 void linkAlpha2(CDart* ADart1, CDart* ADart2);
00405 void linkAlpha3(CDart* ADart1, CDart* ADart2);
00406
00407
00415 void linkAlpha(CDart* ADart1, CDart* ADart2, int ADimension);
00416
00422
00423 void unlinkAlpha0(CDart* ADart);
00424 void unlinkAlpha1(CDart* ADart);
00425 void unlinkAlpha2(CDart* ADart);
00426 void unlinkAlpha3(CDart* ADart);
00427
00428
00436 void unlinkAlpha(CDart* ADart, int ADimension);
00437
00438 protected:
00439
00440
00441
00443 CDart* FFirstDart;
00444
00446 std::bitset<NB_MARKS> FUsedMarks;
00447
00449 std::bitset<NB_MARKS> FMaskMarks;
00450
00452 int FMarks[NB_MARKS];
00453
00455 std::bitset<16> FUsedOrbits;
00456
00458 std::bitset<NB_DIRECT_INFO> FUsedDirectInfo;
00459
00461 int FDirectInfos[NB_DIRECT_INFO];
00462
00463
00464
00465 private:
00466
00467
00468
00470 int FNbUsedMarks;
00471
00473 int FNbUsedDirectInfos;
00474
00475 #ifndef NDEBUG
00477 int FMaxNbUsedMarks;
00478
00480 int FMaxNbUsedDirectInfos;
00481 #endif // NDEBUG
00482
00483
00484 };
00485
00486 }
00487
00488 #include INCLUDE_INLINE("g-map-basic.icc")
00489
00490 #endif // G_MAP_BASIC_HH
00491