ViennaLS
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
7namespace viennals {
8
15 std::vector<int> materialMap;
16 std::set<int> materials;
17
18public:
19 MaterialMap() = default;
20 MaterialMap(const MaterialMap &) = default;
21 MaterialMap &operator=(const MaterialMap &) = default;
23
24 void insertNextMaterial(const int passedMaterialId) {
25 materialMap.push_back(passedMaterialId);
26 materials.insert(passedMaterialId);
27 }
28
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
std::size_t getNumberOfMaterials() const
Definition lsMaterialMap.hpp:58
std::size_t getNumberOfLayers() const
Definition lsMaterialMap.hpp:56
MaterialMap & operator=(MaterialMap &&)=default
int getMaterialId(const std::size_t index) const
Definition lsMaterialMap.hpp:60
void clear()
Definition lsMaterialMap.hpp:71
void insertNextMaterial(const int passedMaterialId)
Definition lsMaterialMap.hpp:24
MaterialMap(const MaterialMap &)=default
const std::vector< int > & getMaterialMap() const
Definition lsMaterialMap.hpp:84
bool hasMaterial(const int materialId) const
Definition lsMaterialMap.hpp:78
MaterialMap & operator=(const MaterialMap &)=default
void setMaterialId(const std::size_t index, const int materialId)
Definition lsMaterialMap.hpp:45
void removeLastMaterial()
Definition lsMaterialMap.hpp:29
const std::set< int > & getMaterials() const
Definition lsMaterialMap.hpp:82
bool isValidIndex(const std::size_t index) const
Definition lsMaterialMap.hpp:67
void reserve(const std::size_t size)
Definition lsMaterialMap.hpp:76
Definition lsAdvect.hpp:41