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 }
49 materialMap[index] = materialId;
50 materials.insert(materialId);
51 }
52
53 std::size_t getNumberOfLayers() const { return materialMap.size(); }
54
55 std::size_t getNumberOfMaterials() const { return materials.size(); }
56
57 int getMaterialId(const std::size_t index) const {
58 if (index >= materialMap.size())
59 return -1;
60 return materialMap[index];
61 }
62
63 // Additional utility methods
64 bool isValidIndex(const std::size_t index) const {
65 return index < materialMap.size();
66 }
67
68 void clear() {
69 materialMap.clear();
70 materials.clear();
71 }
72
73 void reserve(const std::size_t size) { materialMap.reserve(size); }
74
75 bool hasMaterial(const int materialId) const {
76 return materials.count(materialId) > 0;
77 }
78
79 const std::set<int> &getMaterials() const { return materials; }
80
81 const std::vector<int> &getMaterialMap() const { return materialMap; }
82};
83
84} // namespace viennals
std::size_t getNumberOfMaterials() const
Definition lsMaterialMap.hpp:55
std::size_t getNumberOfLayers() const
Definition lsMaterialMap.hpp:53
MaterialMap & operator=(MaterialMap &&)=default
int getMaterialId(const std::size_t index) const
Definition lsMaterialMap.hpp:57
void clear()
Definition lsMaterialMap.hpp:68
void insertNextMaterial(const int passedMaterialId)
Definition lsMaterialMap.hpp:24
MaterialMap(const MaterialMap &)=default
const std::vector< int > & getMaterialMap() const
Definition lsMaterialMap.hpp:81
bool hasMaterial(const int materialId) const
Definition lsMaterialMap.hpp:75
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:79
bool isValidIndex(const std::size_t index) const
Definition lsMaterialMap.hpp:64
void reserve(const std::size_t size)
Definition lsMaterialMap.hpp:73
Definition lsAdvect.hpp:40