Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
CGoGN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Sauvage
CGoGN
Commits
630fb1fd
Commit
630fb1fd
authored
Feb 10, 2014
by
Pierre Kraemer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
suite de la reorganisation des cartes
parent
5b0741d1
Changes
18
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
1070 additions
and
1364 deletions
+1070
-1364
include/Topology/generic/genericmap.h
include/Topology/generic/genericmap.h
+20
-236
include/Topology/generic/genericmap.hpp
include/Topology/generic/genericmap.hpp
+7
-446
include/Topology/generic/mapMono.h
include/Topology/generic/mapMono.h
+56
-59
include/Topology/generic/mapMono.hpp
include/Topology/generic/mapMono.hpp
+148
-0
include/Topology/generic/mapMulti.h
include/Topology/generic/mapMulti.h
+233
-1
include/Topology/generic/mapMulti.hpp
include/Topology/generic/mapMulti.hpp
+358
-0
include/Topology/generic/traversorCell.h
include/Topology/generic/traversorCell.h
+0
-30
include/Topology/generic/traversorCell.hpp
include/Topology/generic/traversorCell.hpp
+0
-139
include/Topology/generic/traversorCellVirt.h
include/Topology/generic/traversorCellVirt.h
+0
-32
include/Topology/generic/traversorCellVirt.hpp
include/Topology/generic/traversorCellVirt.hpp
+0
-136
include/Topology/map/map1.h
include/Topology/map/map1.h
+0
-10
include/Topology/map/map1.hpp
include/Topology/map/map1.hpp
+4
-26
include/Topology/map/map2.h
include/Topology/map/map2.h
+0
-2
include/Topology/map/map2.hpp
include/Topology/map/map2.hpp
+34
-42
src/Topology/generic/genericmap.cpp
src/Topology/generic/genericmap.cpp
+11
-203
src/Topology/generic/mapMono.cpp
src/Topology/generic/mapMono.cpp
+0
-0
src/Topology/generic/mapMulti.cpp
src/Topology/generic/mapMulti.cpp
+195
-0
src/Topology/map/map1.cpp
src/Topology/map/map1.cpp
+4
-2
No files found.
include/Topology/generic/genericmap.h
View file @
630fb1fd
...
...
@@ -85,9 +85,7 @@ protected:
* (initialized by enableQuickTraversal function)
*/
AttributeMultiVector
<
Dart
>*
m_quickTraversal
[
NB_ORBITS
]
;
AttributeMultiVector
<
NoTypeNameAttribute
<
std
::
vector
<
Dart
>
>
>*
m_quickLocalIncidentTraversal
[
NB_ORBITS
][
NB_ORBITS
]
;
AttributeMultiVector
<
NoTypeNameAttribute
<
std
::
vector
<
Dart
>
>
>*
m_quickLocalAdjacentTraversal
[
NB_ORBITS
][
NB_ORBITS
]
;
/**
...
...
@@ -98,7 +96,6 @@ protected:
/**
* Direct access to the attributes that store Marks
*/
AttributeMultiVector
<
Mark
>*
m_markTables
[
NB_ORBITS
][
NB_THREAD
]
;
unsigned
int
m_nbThreads
;
...
...
@@ -112,44 +109,6 @@ protected:
std
::
vector
<
DartMarkerGen
*>
dartMarkers
[
NB_THREAD
]
;
std
::
vector
<
CellMarkerGen
*>
cellMarkers
[
NB_THREAD
]
;
/**
* is map a multiresolution map
*/
#ifndef CGoGN_FORCE_MR
static
const
bool
m_isMultiRes
=
false
;
#else
static
const
bool
m_isMultiRes
=
true
;
#endif
/**
* container for multiresolution darts
*/
AttributeContainer
m_mrattribs
;
/**
* pointers to attributes of m_mrattribs that store indices in m_attribs[DART] (one for each level)
*/
std
::
vector
<
AttributeMultiVector
<
unsigned
int
>*
>
m_mrDarts
;
/**
* pointer to attribute of m_mrattribs that stores darts insertion levels
*/
AttributeMultiVector
<
unsigned
int
>*
m_mrLevels
;
/**
* vector that stores the number of darts inserted on each resolution level
*/
std
::
vector
<
unsigned
int
>
m_mrNbDarts
;
/**
* current level in multiresolution map
*/
unsigned
int
m_mrCurrentLevel
;
/**
* stack for current level temporary storage
*/
std
::
vector
<
unsigned
int
>
m_mrLevelStack
;
public:
static
const
unsigned
int
UNKNOWN_ATTRIB
=
AttributeContainer
::
UNKNOWN
;
...
...
@@ -176,109 +135,6 @@ public:
template
<
unsigned
int
ORBIT
>
MarkSet
&
getMarkerSet
(
unsigned
int
thread
=
0
)
{
return
m_marksets
[
ORBIT
][
thread
];
}
/****************************************
* RESOLUTION LEVELS MANAGEMENT *
****************************************/
void
printMR
()
;
/**
* initialize the multiresolution attribute container
*/
void
initMR
()
;
/**
* get the current resolution level (use only in MRMaps)
*/
unsigned
int
getCurrentLevel
()
;
/**
* set the current resolution level (use only in MRMaps)
*/
void
setCurrentLevel
(
unsigned
int
l
)
;
/**
* increment the current resolution level (use only in MRMaps)
*/
void
incCurrentLevel
()
;
/**
* decrement the current resolution level (use only in MRMaps)
*/
void
decCurrentLevel
()
;
/**
* store current resolution level on a stack (use only in MRMaps)
*/
void
pushLevel
()
;
/**
* set as current the resolution level of the top of the stack (use only in MRMaps)
*/
void
popLevel
()
;
/**
* get the maximum resolution level (use only in MRMaps)
*/
unsigned
int
getMaxLevel
()
;
//private:
// /*
// * add a resolution level
// */
// AttributeMultiVector<unsigned int>* addLevel();
/**
* add a resolution level in the back of the level table (use only in MRMaps)
*/
void
addLevelBack
()
;
/**
* add a resolution level in the front of the level table (use only in MRMaps)
*/
void
addLevelFront
();
/**
* remove last resolution level (use only in MRMaps)
*/
void
removeLevelBack
()
;
/**
* remove first resolution level (use only in MRMaps)
*/
void
removeLevelFront
();
/**
* copy MRDarts from level-1 to level
*/
void
copyLevel
(
unsigned
int
level
);
/**
* duplicate darts from level-1 to level
*/
void
duplicateDarts
(
unsigned
int
newlevel
);
/**
* duplicate a dart starting from current level
*/
void
duplicateDart
(
Dart
d
)
;
void
duplicateDartAtOneLevel
(
Dart
d
,
unsigned
int
level
)
;
void
propagateDartRelation
(
Dart
d
,
AttributeMultiVector
<
Dart
>*
rel
)
;
void
propagateDartRelation
(
Dart
d
,
Dart
e
,
AttributeMultiVector
<
Dart
>*
rel
);
void
propagateDartRelation
(
Dart
d
,
Dart
e
,
Dart
f
,
AttributeMultiVector
<
Dart
>*
rel
,
AttributeMultiVector
<
Dart
>*
rel2
);
template
<
unsigned
int
ORBIT
>
void
propagateDartEmbedding
(
Dart
d
)
;
template
<
unsigned
int
ORBIT
>
void
propagateOrbitEmbedding
(
Dart
d
)
;
/****************************************
* DARTS MANAGEMENT *
****************************************/
...
...
@@ -291,7 +147,7 @@ protected:
/**
* Erase a dart of the map
*/
void
deleteDart
(
Dart
d
)
;
v
irtual
v
oid
deleteDart
(
Dart
d
)
;
/**
* create a copy of a dart (based on its index in m_attribs[DART]) and returns its index
...
...
@@ -305,44 +161,16 @@ protected:
public:
/**
* get the index of dart in topological table
*/
unsigned
int
dartIndex
(
Dart
d
)
const
;
/**
* get the Dart of index in topological table
*/
Dart
indexDart
(
unsigned
int
index
)
const
;
/**
* @brief are we in MR ?
*/
static
bool
isMultiRes
()
{
return
m_isMultiRes
;
}
/**
* get the insertion level of a dart (use only in MRMaps)
*/
unsigned
int
getDartLevel
(
Dart
d
)
const
;
/**
*
*/
void
incDartLevel
(
Dart
d
)
const
;
/**
* get the number of darts inserted in the given leveldart (use only in MRMaps)
* @brief dartIndex
* @param d
* @return index of dart (depends on map implementation)
*/
unsigned
int
getNbInsertedDarts
(
unsigned
int
level
)
;
/**
* get the number of darts that define the map of the given leveldart (use only in MRMaps)
*/
unsigned
int
getNbDarts
(
unsigned
int
level
)
;
virtual
unsigned
int
dartIndex
(
Dart
d
)
const
;
/**
* @return the number of darts in the map
*/
unsigned
int
getNbDarts
()
;
virtual
unsigned
int
getNbDarts
()
;
/**
* return true if the dart d refers to a valid index
...
...
@@ -463,7 +291,6 @@ public:
template
<
unsigned
int
ORBIT
>
void
initAllOrbitsEmbedding
(
bool
realloc
=
false
)
;
/****************************************
* QUICK TRAVERSAL MANAGEMENT *
****************************************/
...
...
@@ -542,18 +369,6 @@ public:
template
<
unsigned
int
ORBIT
>
AttributeMultiVector
<
unsigned
int
>*
getEmbeddingAttributeVector
()
;
/**
* get the MR attribute container
*/
AttributeContainer
&
getMRAttributeContainer
()
;
/**
* get the MR attribute container
*/
AttributeMultiVector
<
unsigned
int
>*
getMRDartAttributeVector
(
unsigned
int
level
)
;
AttributeMultiVector
<
unsigned
int
>*
getMRLevelAttributeVector
();
/**
* swap two attribute containers
*/
...
...
@@ -696,38 +511,21 @@ public:
* DARTS TRAVERSALS *
****************************************/
/**
* Begin of map
* @return the first dart of the map
*/
Dart
begin
()
const
;
/**
* End of map
* @return the end iterator (next of last) of the map
*/
Dart
end
()
const
;
/**
* allow to go from a dart to the next
* in the order of storage
* @param d reference to the dart to be modified
*/
void
next
(
Dart
&
d
)
const
;
// /**
// * Apply a functor on each dart of the map
// * @param f a ref to the functor obj
// */
// bool foreach_dart(FunctorType& f) ;
/**
* Apply a functor on each dart of the map
* @param f a ref to the functor obj
*/
bool
foreach_dart
(
FunctorType
&
f
)
;
virtual
Dart
begin
()
const
;
virtual
Dart
end
()
const
;
virtual
void
next
(
Dart
&
d
)
const
;
//! Apply a functor on every dart of an orbit
/*! @param dim dimension of orbit
* @param d a dart of the orbit
* @param f a functor obj
*/
// template <unsigned int ORBIT>
// bool foreach_dart_of_orbit(Dart d, FunctorType& f, unsigned int thread = 0) ;
template
<
unsigned
int
ORBIT
>
bool
foreach_dart_of_orbit
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
const
;
...
...
@@ -745,38 +543,20 @@ public:
virtual
bool
foreach_dart_of_edge2
(
Dart
/*d*/
,
FunctorType
&
/*f*/
,
unsigned
int
/*thread = 0*/
)
const
{
std
::
cerr
<<
"Not implemented"
<<
std
::
endl
;
return
false
;
}
virtual
bool
foreach_dart_of_face2
(
Dart
/*d*/
,
FunctorType
&
/*f*/
,
unsigned
int
/*thread = 0*/
)
const
{
std
::
cerr
<<
"Not implemented"
<<
std
::
endl
;
return
false
;
}
// virtual bool foreach_dart_of_vertex(Dart d, FunctorConstType& f, unsigned int thread = 0) const = 0 ;
// virtual bool foreach_dart_of_edge(Dart d, FunctorConstType& f, unsigned int thread = 0) const = 0 ;
// virtual bool foreach_dart_of_face(Dart /*d*/, FunctorConstType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; }
// virtual bool foreach_dart_of_volume(Dart /*d*/, FunctorConstType& /*f*/, unsigned /*int thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; }
// virtual bool foreach_dart_of_cc(Dart /*d*/, FunctorConstType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; }
// virtual bool foreach_dart_of_vertex1(Dart /*d*/, FunctorConstType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; }
// virtual bool foreach_dart_of_edge1(Dart /*d*/, FunctorConstType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; }
// virtual bool foreach_dart_of_vertex2(Dart /*d*/, FunctorConstType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; }
// virtual bool foreach_dart_of_edge2(Dart /*d*/, FunctorConstType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; }
// virtual bool foreach_dart_of_face2(Dart /*d*/, FunctorConstType& /*f*/, unsigned int /*thread = 0*/) const { std::cerr << "Not implemented" << std::endl; return false; }
/**
* execute functor for each orbit
* @param dim the dimension of the orbit
* @param f the functor
*/
template
<
unsigned
int
ORBIT
>
template
<
typename
MAP
,
unsigned
int
ORBIT
>
bool
foreach_orbit
(
FunctorType
&
f
,
unsigned
int
thread
=
0
)
const
;
// template <unsigned int ORBIT>
// bool foreach_orbit(FunctorConstType& f, unsigned int thread = 0) const;
//! Count the number of orbits of dimension dim in the map
/*! @param dim the dimension of the orbit
* @return the number of orbits
*/
template
<
unsigned
int
ORBIT
>
template
<
typename
MAP
,
unsigned
int
ORBIT
>
unsigned
int
getNbOrbits
()
const
;
//! For an orbit of a given dimension, return the number of incident cells of an other given dimension
...
...
@@ -785,6 +565,10 @@ public:
template
<
typename
MAP
,
unsigned
int
ORBIT
,
unsigned
int
INCIDENT
>
unsigned
int
degree
(
Dart
d
)
const
;
/****************************************
* BOUNDARY MANAGEMENT *
****************************************/
protected:
/// boundary markers
Mark
m_boundaryMarkers
[
2
]
;
// 0 for dim 2 / 1 for dim 3
...
...
include/Topology/generic/genericmap.hpp
View file @
630fb1fd
...
...
@@ -29,56 +29,6 @@
namespace
CGoGN
{
/****************************************
* MULTIRES *
****************************************/
inline
unsigned
int
GenericMap
::
getCurrentLevel
()
{
return
m_mrCurrentLevel
;
}
inline
void
GenericMap
::
setCurrentLevel
(
unsigned
int
l
)
{
if
(
l
<
m_mrDarts
.
size
())
m_mrCurrentLevel
=
l
;
else
CGoGNout
<<
"setCurrentLevel : try to access nonexistent resolution level"
<<
CGoGNendl
;
}
inline
void
GenericMap
::
incCurrentLevel
()
{
if
(
m_mrCurrentLevel
<
m_mrDarts
.
size
()
-
1
)
++
m_mrCurrentLevel
;
else
CGoGNout
<<
"incCurrentLevel : already at maximum resolution level"
<<
CGoGNendl
;
}
inline
void
GenericMap
::
decCurrentLevel
()
{
if
(
m_mrCurrentLevel
>
0
)
--
m_mrCurrentLevel
;
else
CGoGNout
<<
"decCurrentLevel : already at minimum resolution level"
<<
CGoGNendl
;
}
inline
void
GenericMap
::
pushLevel
()
{
m_mrLevelStack
.
push_back
(
m_mrCurrentLevel
)
;
}
inline
void
GenericMap
::
popLevel
()
{
m_mrCurrentLevel
=
m_mrLevelStack
.
back
()
;
m_mrLevelStack
.
pop_back
()
;
}
inline
unsigned
int
GenericMap
::
getMaxLevel
()
{
return
m_mrDarts
.
size
()
-
1
;
}
/****************************************
* DARTS MANAGEMENT *
****************************************/
...
...
@@ -92,74 +42,9 @@ inline Dart GenericMap::newDart()
(
*
m_embeddings
[
i
])[
di
]
=
EMBNULL
;
// to EMBNULL
}
if
(
m_isMultiRes
)
{
unsigned
int
mrdi
=
m_mrattribs
.
insertLine
()
;
// insert a new MRdart line
(
*
m_mrLevels
)[
mrdi
]
=
m_mrCurrentLevel
;
// set the introduction level of the dart
m_mrNbDarts
[
m_mrCurrentLevel
]
++
;
for
(
unsigned
int
i
=
0
;
i
<
m_mrCurrentLevel
;
++
i
)
// for all previous levels
(
*
m_mrDarts
[
i
])[
mrdi
]
=
MRNULL
;
// this MRdart does not exist
for
(
unsigned
int
i
=
m_mrCurrentLevel
;
i
<
m_mrDarts
.
size
();
++
i
)
// for all levels from current to max
(
*
m_mrDarts
[
i
])[
mrdi
]
=
di
;
// make this MRdart point to the new dart line
return
Dart
::
create
(
mrdi
)
;
}
return
Dart
::
create
(
di
)
;
}
inline
void
GenericMap
::
deleteDart
(
Dart
d
)
{
if
(
m_isMultiRes
)
{
unsigned
int
index
=
(
*
m_mrDarts
[
m_mrCurrentLevel
])[
d
.
index
]
;
if
(
getDartLevel
(
d
)
>
m_mrCurrentLevel
)
{
unsigned
int
di
=
(
*
m_mrDarts
[
m_mrCurrentLevel
+
1
])[
d
.
index
];
// si le brin de niveau i pointe sur le meme brin que le niveau i-1
if
(
di
!=
index
)
{
if
(
isDartValid
(
d
))
//index))
deleteDartLine
(
index
)
;
}
(
*
m_mrDarts
[
m_mrCurrentLevel
])[
d
.
index
]
=
MRNULL
;
return
;
}
// a MRdart can only be deleted on its insertion level
if
(
getDartLevel
(
d
)
==
m_mrCurrentLevel
)
{
if
(
isDartValid
(
d
))
{
deleteDartLine
(
index
)
;
m_mrattribs
.
removeLine
(
d
.
index
);
m_mrNbDarts
[
m_mrCurrentLevel
]
--
;
}
}
else
{
unsigned
int
di
=
(
*
m_mrDarts
[
m_mrCurrentLevel
-
1
])[
d
.
index
];
// si le brin de niveau i pointe sur le meme brin que le niveau i-1
if
(
di
!=
index
)
{
if
(
isDartValid
(
d
))
//index))
deleteDartLine
(
index
)
;
}
for
(
unsigned
int
i
=
m_mrCurrentLevel
;
i
<=
getMaxLevel
();
++
i
)
// for all levels from current to max
{
(
*
m_mrDarts
[
i
])[
d
.
index
]
=
di
;
//copy the index from previous level
}
}
}
else
deleteDartLine
(
dartIndex
(
d
))
;
}
inline
void
GenericMap
::
deleteDartLine
(
unsigned
int
index
)
{
m_attribs
[
DART
].
removeLine
(
index
)
;
// free the dart line
...
...
@@ -200,163 +85,8 @@ inline unsigned int GenericMap::copyDartLine(unsigned int index)
return
newindex
;
}
inline
void
GenericMap
::
duplicateDart
(
Dart
d
)
{
assert
(
getDartLevel
(
d
)
<=
m_mrCurrentLevel
||
!
"duplicateDart : called with a dart inserted after current level"
)
;
if
(
getDartLevel
(
d
)
==
m_mrCurrentLevel
)
// no need to duplicate
return
;
// a dart from its insertion level
unsigned
int
oldindex
=
dartIndex
(
d
)
;
if
(
m_mrCurrentLevel
>
0
)
{
if
((
*
m_mrDarts
[
m_mrCurrentLevel
-
1
])[
d
.
index
]
!=
oldindex
)
// no need to duplicate if the dart is already
return
;
// duplicated with respect to previous level
}
unsigned
int
newindex
=
copyDartLine
(
oldindex
)
;
for
(
unsigned
int
i
=
m_mrCurrentLevel
;
i
<=
getMaxLevel
();
++
i
)
// for all levels from current to max
{
assert
((
*
m_mrDarts
[
i
])[
d
.
index
]
==
oldindex
||
!
"duplicateDart : dart was already duplicated on a greater level"
)
;
(
*
m_mrDarts
[
i
])[
d
.
index
]
=
newindex
;
// make this MRdart points to the new dart line
}
}
inline
void
GenericMap
::
duplicateDartAtOneLevel
(
Dart
d
,
unsigned
int
level
)
{
(
*
m_mrDarts
[
level
])[
d
.
index
]
=
copyDartLine
(
dartIndex
(
d
))
;
}
inline
void
GenericMap
::
propagateDartRelation
(
Dart
d
,
AttributeMultiVector
<
Dart
>*
rel
)
{
Dart
dd
=
(
*
rel
)[
dartIndex
(
d
)]
;
pushLevel
()
;
for
(
unsigned
int
i
=
getCurrentLevel
()
+
1
;
i
<=
getMaxLevel
();
++
i
)
{
setCurrentLevel
(
i
)
;
(
*
rel
)[
dartIndex
(
d
)]
=
dd
;
}
popLevel
()
;
}
inline
void
GenericMap
::
propagateDartRelation
(
Dart
d
,
Dart
e
,
AttributeMultiVector
<
Dart
>*
rel
)
{
Dart
dd
=
(
*
rel
)[
dartIndex
(
d
)]
;
pushLevel
()
;
for
(
unsigned
int
i
=
getCurrentLevel
()
+
1
;
i
<=
getMaxLevel
();
++
i
)
{
setCurrentLevel
(
i
)
;
while
(
(
*
rel
)[
dartIndex
(
d
)]
!=
e
)
d
=
(
*
rel
)[
dartIndex
(
d
)];
if
(
d
!=
e
)
duplicateDart
(
d
);
(
*
rel
)[
dartIndex
(
d
)]
=
dd
;
}
popLevel
()
;
}
inline
void
GenericMap
::
propagateDartRelation
(
Dart
d
,
Dart
e
,
Dart
f
,
AttributeMultiVector
<
Dart
>*
rel
,
AttributeMultiVector
<
Dart
>*
rel2
)
{
Dart
dd
=
f
;
pushLevel
()
;
for
(
unsigned
int
i
=
getCurrentLevel
()
+
1
;
i
<=
getMaxLevel
();
++
i
)
{
setCurrentLevel
(
i
)
;
while
(
(
*
rel
)[
dartIndex
(
e
)]
!=
dd
)
dd
=
(
*
rel2
)[
dartIndex
(
dd
)];
(
*
rel
)[
dartIndex
(
d
)]
=
dd
;
}
popLevel
()
;
}
template
<
unsigned
int
ORBIT
>
inline
void
GenericMap
::
propagateDartEmbedding
(
Dart
d
)
{
unsigned
int
emb
=
getEmbedding
<
ORBIT
>
(
d
)
;
pushLevel
()
;
for
(
unsigned
int
i
=
getCurrentLevel
()
+
1
;
i
<=
getMaxLevel
();
++
i
)
{
setCurrentLevel
(
i
)
;
setDartEmbedding
<
ORBIT
>
(
d
,
emb
)
;
}
popLevel
()
;
}
template
<
unsigned
int
ORBIT
>
inline
void
GenericMap
::
propagateOrbitEmbedding
(
Dart
d
)
{
unsigned
int
emb
=
getEmbedding
<
ORBIT
>
(
d
)
;
pushLevel
()
;
for
(
unsigned
int
i
=
getCurrentLevel
()
+
1
;
i
<=
getMaxLevel
();
++
i
)
{
setCurrentLevel
(
i
)
;
setOrbitEmbedding
<
ORBIT
>
(
d
,
emb
)
;
}
popLevel
()
;
}
inline
unsigned
int
GenericMap
::
dartIndex
(
Dart
d
)
const
{
if
(
m_isMultiRes
)
return
(
*
m_mrDarts
[
m_mrCurrentLevel
])[
d
.
index
]
;
return
d
.
index
;
}
inline
Dart
GenericMap
::
indexDart
(
unsigned
int
index
)
const
{
if
(
m_isMultiRes
)
return
Dart
(
(
*
m_mrDarts
[
m_mrCurrentLevel
])[
index
])
;
return
Dart
(
index
);
}
inline
unsigned
int
GenericMap
::
getDartLevel
(
Dart
d
)
const
{
return
(
*
m_mrLevels
)[
d
.
index
]
;
}
inline
void
GenericMap
::
incDartLevel
(
Dart
d
)
const
{
++
((
*
m_mrLevels
)[
d
.
index
])
;
}
inline
unsigned
int
GenericMap
::
getNbInsertedDarts
(
unsigned
int
level
)
{
if
(
level
<
m_mrDarts
.
size
())
return
m_mrNbDarts
[
level
]
;
else
return
0
;
}
inline
unsigned
int
GenericMap
::
getNbDarts
(
unsigned
int
level
)
{
if
(
level
<
m_mrDarts
.
size
())
{
unsigned
int
nb
=
0
;
for
(
unsigned
int
i
=
0
;
i
<=
level
;
++
i
)
nb
+=
m_mrNbDarts
[
i
]
;
return
nb
;
}
<