ViennaLS
Toggle main menu visibility
Loading...
Searching...
No Matches
lsMaterialMap.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <algorithm>
4
#include <set>
5
#include <vector>
6
7
namespace
viennals
{
8
14
class
MaterialMap
{
15
std::vector<int> materialMap;
16
std::set<int> materials;
17
18
public
:
19
MaterialMap
() =
default
;
20
MaterialMap
(
const
MaterialMap
&) =
default
;
21
MaterialMap
&
operator=
(
const
MaterialMap
&) =
default
;
22
MaterialMap
&
operator=
(
MaterialMap
&&) =
default
;
23
24
void
insertNextMaterial
(
const
int
passedMaterialId) {
25
materialMap.push_back(passedMaterialId);
26
materials.insert(passedMaterialId);
27
}
28
29
void
removeLastMaterial
() {
30
if
(materialMap.empty()) {
31
return
;
32
}
33
34
int
idToRemove = materialMap.back();
35
materialMap.pop_back();
36
37
bool
isUnique = std::find(materialMap.begin(), materialMap.end(),
38
idToRemove) == materialMap.end();
39
40
if
(isUnique) {
41
materials.erase(idToRemove);
42
}
43
}
44
45
void
setMaterialId
(
const
std::size_t index,
const
int
materialId) {
46
if
(index >= materialMap.size()) {
47
materialMap.resize(index + 1, -1);
// Initialize new elements with -1
48
}
else
{
49
auto
oldMaterialId = materialMap[index];
50
materials.erase(oldMaterialId);
// Remove old material ID if it exists
51
}
52
materialMap[index] = materialId;
53
materials.insert(materialId);
54
}
55
56
std::size_t
getNumberOfLayers
()
const
{
return
materialMap.size(); }
57
58
std::size_t
getNumberOfMaterials
()
const
{
return
materials.size(); }
59
60
int
getMaterialId
(
const
std::size_t index)
const
{
61
if
(index >= materialMap.size())
62
return
-1;
63
return
materialMap[index];
64
}
65
66
// Additional utility methods
67
bool
isValidIndex
(
const
std::size_t index)
const
{
68
return
index < materialMap.size();
69
}
70
71
void
clear
() {
72
materialMap.clear();
73
materials.clear();
74
}
75
76
void
reserve
(
const
std::size_t size) { materialMap.reserve(size); }
77
78
bool
hasMaterial
(
const
int
materialId)
const
{
79
return
materials.count(materialId) > 0;
80
}
81
82
const
std::set<int> &
getMaterials
()
const
{
return
materials; }
83
84
const
std::vector<int> &
getMaterialMap
()
const
{
return
materialMap; }
85
};
86
87
}
// namespace viennals
viennals::MaterialMap::getNumberOfMaterials
std::size_t getNumberOfMaterials() const
Definition
lsMaterialMap.hpp:58
viennals::MaterialMap::getNumberOfLayers
std::size_t getNumberOfLayers() const
Definition
lsMaterialMap.hpp:56
viennals::MaterialMap::operator=
MaterialMap & operator=(MaterialMap &&)=default
viennals::MaterialMap::getMaterialId
int getMaterialId(const std::size_t index) const
Definition
lsMaterialMap.hpp:60
viennals::MaterialMap::clear
void clear()
Definition
lsMaterialMap.hpp:71
viennals::MaterialMap::insertNextMaterial
void insertNextMaterial(const int passedMaterialId)
Definition
lsMaterialMap.hpp:24
viennals::MaterialMap::MaterialMap
MaterialMap(const MaterialMap &)=default
viennals::MaterialMap::getMaterialMap
const std::vector< int > & getMaterialMap() const
Definition
lsMaterialMap.hpp:84
viennals::MaterialMap::hasMaterial
bool hasMaterial(const int materialId) const
Definition
lsMaterialMap.hpp:78
viennals::MaterialMap::operator=
MaterialMap & operator=(const MaterialMap &)=default
viennals::MaterialMap::setMaterialId
void setMaterialId(const std::size_t index, const int materialId)
Definition
lsMaterialMap.hpp:45
viennals::MaterialMap::removeLastMaterial
void removeLastMaterial()
Definition
lsMaterialMap.hpp:29
viennals::MaterialMap::MaterialMap
MaterialMap()=default
viennals::MaterialMap::getMaterials
const std::set< int > & getMaterials() const
Definition
lsMaterialMap.hpp:82
viennals::MaterialMap::isValidIndex
bool isValidIndex(const std::size_t index) const
Definition
lsMaterialMap.hpp:67
viennals::MaterialMap::reserve
void reserve(const std::size_t size)
Definition
lsMaterialMap.hpp:76
viennals
Definition
lsAdvect.hpp:41
include
viennals
lsMaterialMap.hpp
Generated by
1.18.0