Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenMesh
OpenMesh
Commits
ab51547d
Commit
ab51547d
authored
Sep 12, 2016
by
Hans-Christian Ebke
Browse files
PropertyManager: Add initializing createIfNotExists() versions.
parent
a705d57b
Pipeline
#2755
failed with stage
in 17 minutes and 48 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/OpenMesh/Core/Utils/PropertyManager.hh
View file @
ab51547d
...
...
@@ -208,6 +208,42 @@ class PropertyManager {
return
std
::
move
(
pm
);
}
/**
* Like createIfNotExists() with two parameters except, if the property
* doesn't exist, it is initialized with the supplied value over
* the supplied range after creation. If the property already exists,
* this method has the exact same effect as the two parameter version.
* Lifecycle management is disabled in any case.
*
* @see makePropertyManagerFromExistingOrNew
*/
template
<
typename
PROP_VALUE
,
typename
ITERATOR_TYPE
>
static
PropertyManager
createIfNotExists
(
MeshT
&
mesh
,
const
char
*
propname
,
const
ITERATOR_TYPE
&
begin
,
const
ITERATOR_TYPE
&
end
,
const
PROP_VALUE
&
init_value
)
{
const
bool
exists
=
propertyExists
(
mesh
,
propname
);
PropertyManager
pm
(
mesh
,
propname
,
exists
);
pm
.
retain
();
if
(
!
exists
)
pm
.
set_range
(
begin
,
end
,
init_value
);
return
std
::
move
(
pm
);
}
/**
* Like createIfNotExists() with two parameters except, if the property
* doesn't exist, it is initialized with the supplied value over
* the supplied range after creation. If the property already exists,
* this method has the exact same effect as the two parameter version.
* Lifecycle management is disabled in any case.
*
* @see makePropertyManagerFromExistingOrNew
*/
template
<
typename
PROP_VALUE
,
typename
ITERATOR_RANGE
>
static
PropertyManager
createIfNotExists
(
MeshT
&
mesh
,
const
char
*
propname
,
const
ITERATOR_RANGE
&
range
,
const
PROP_VALUE
&
init_value
)
{
return
createIfNotExists
(
mesh
,
propname
,
range
.
begin
(),
range
.
end
(),
init_value
);
}
PropertyManager
duplicate
(
const
char
*
clone_name
)
{
PropertyManager
pm
(
*
mesh_
,
clone_name
,
false
);
...
...
@@ -267,6 +303,27 @@ class PropertyManager {
return
(
Proxy
)
pm
;
}
/**
* Like createIfNotExists() with two parameters except, if the property
* doesn't exist, it is initialized with the supplied value over
* the supplied range after creation. If the property already exists,
* this method has the exact same effect as the two parameter version.
* Lifecycle management is disabled in any case.
*
* @see makePropertyManagerFromExistingOrNew
*/
template
<
typename
PROP_VALUE
,
typename
ITERATOR_TYPE
>
static
Proxy
createIfNotExists
(
MeshT
&
mesh
,
const
char
*
propname
,
const
ITERATOR_TYPE
&
begin
,
const
ITERATOR_TYPE
&
end
,
const
PROP_VALUE
&
init_value
)
{
const
bool
exists
=
propertyExists
(
mesh
,
propname
);
PropertyManager
pm
(
mesh
,
propname
,
exists
);
pm
.
retain
();
if
(
!
exists
)
pm
.
set_range
(
begin
,
end
,
init_value
);
return
(
Proxy
)
pm
;
}
Proxy
duplicate
(
const
char
*
clone_name
)
{
PropertyManager
pm
(
*
mesh_
,
clone_name
,
false
);
pm
.
mesh_
->
property
(
pm
.
prop_
)
=
mesh_
->
property
(
prop_
);
...
...
@@ -474,5 +531,47 @@ PropertyManager<PROPTYPE, MeshT> makePropertyManagerFromExistingOrNew(MeshT &mes
return
PropertyManager
<
PROPTYPE
,
MeshT
>::
createIfNotExists
(
mesh
,
propname
);
}
/** \relates PropertyManager
* Like the two parameter version of makePropertyManagerFromExistingOrNew()
* except it initializes the property with the specified value over the
* specified range if it needs to be created. If the property already exists,
* this function has the exact same effect as the two parameter version.
*
* Creates a non-owning wrapper for a mesh property (no lifecycle management).
* If the given property does not exist, it is created.
*
* Intended for creating or accessing persistent properties.
*/
template
<
typename
PROPTYPE
,
typename
MeshT
,
typename
ITERATOR_TYPE
,
typename
PROP_VALUE
>
PropertyManager
<
PROPTYPE
,
MeshT
>
makePropertyManagerFromExistingOrNew
(
MeshT
&
mesh
,
const
char
*
propname
,
const
ITERATOR_TYPE
&
begin
,
const
ITERATOR_TYPE
&
end
,
const
PROP_VALUE
&
init_value
)
{
return
PropertyManager
<
PROPTYPE
,
MeshT
>::
createIfNotExists
(
mesh
,
propname
,
begin
,
end
,
init_value
);
}
/** \relates PropertyManager
* Like the two parameter version of makePropertyManagerFromExistingOrNew()
* except it initializes the property with the specified value over the
* specified range if it needs to be created. If the property already exists,
* this function has the exact same effect as the two parameter version.
*
* Creates a non-owning wrapper for a mesh property (no lifecycle management).
* If the given property does not exist, it is created.
*
* Intended for creating or accessing persistent properties.
*/
template
<
typename
PROPTYPE
,
typename
MeshT
,
typename
ITERATOR_RANGE
,
typename
PROP_VALUE
>
PropertyManager
<
PROPTYPE
,
MeshT
>
makePropertyManagerFromExistingOrNew
(
MeshT
&
mesh
,
const
char
*
propname
,
const
ITERATOR_RANGE
&
range
,
const
PROP_VALUE
&
init_value
)
{
return
makePropertyManagerFromExistingOrNew
<
PROPTYPE
,
MeshT
>
(
mesh
,
propname
,
range
.
begin
(),
range
.
end
(),
init_value
);
}
}
/* namespace OpenMesh */
#endif
/* PROPERTYMANAGER_HH_ */
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment