FiberVISH 0.2
Fish - The Fiber Bundle API for the Vish Visualization Shell
FragmentIDCollection.hpp
1#ifndef __FIBER_FIELD_FRAGMENTIDCOLLECTION_HPP
2#define __FIBER_FIELD_FRAGMENTIDCOLLECTION_HPP
3
4#include "FieldAPI.h"
5#include <memcore/RefPtr.hpp>
6#include <unordered_map>
7#include <vector>
8#include "FragmentID.hpp"
9#include "DynamicSize.hpp"
10
11namespace Fiber
12{
13
18class FIELD_API FragmentIDCollection : public ReferenceBase<FragmentIDCollection>
19{
20public:
23
24private:
25 FragmentNames_t FragmentNames;
26 RefPtr<Chunk<RefPtr<FragmentID> >> myFragmentIDs;
27
28 DynamicSize myFragmentLayout;
29
30 FragmentIDs_t &FragmentIDs() const
31 {
32 return myFragmentIDs->get_vector();
33 }
34
35 template <Dims_t DIMS>
36 void setFragmentNames(const MultiIndex<DIMS>&NumberOfFragments, const string&FragmentNamePrefix)
37 {
38 myFragmentIDs = new Chunk<RefPtr<FragmentID>>( NumberOfFragments.size() );
39
40 for(MultiIndex<DIMS> FragNumber : NumberOfFragments)
41 {
42 string FragmentName = FragmentNamePrefix + std::to_string( FragNumber );
43 index_t FragmentIndex = FragNumber.linear( NumberOfFragments );
44
45 FragmentIDs()[ FragmentIndex ] = new FragmentID(FragmentName, int(FragmentIndex), self() );
46 FragmentNames[ FragmentName ] = FragmentIndex;
47 }
48 }
49
50protected:
51 virtual ~FragmentIDCollection();
52
53public:
55
57
58 RefPtr<TypedArray<RefPtr<FragmentID>>> getFragmentIDArray() const;
59
62 {
63 Assert( myFragmentIDs );
64 return myFragmentIDs->get_vector();
65 }
66
67 RefPtr<FragmentID> findFragmentID(FragmentIndex_t) const;
68
77 FragmentIndex_t getID(const RefPtr<FragmentID>&fID);
78
84 FragmentIndex_t findID(const RefPtr<FragmentID>&fID) const;
85
86 RefPtr<FragmentID> findFragmentIDByName(const string&Name) const;
87
91 size_t NumberOfFragmentIDs() const
92 {
93 return getFragmentIDs().size();
94 }
95
100 {
101 return myFragmentLayout;
102 }
103
104 bool isDense() const
105 {
106 if (!myFragmentLayout.isValid()) return false;
107
108 return myFragmentLayout.getNumberOfElements() == NumberOfFragmentIDs();
109 }
110
114 template <Dims_t DIMS>
115 bool setFragmentLayout(const MultiIndex<DIMS>&NumberOfFragments, const string&FragmentNamePrefix)
116 {
117 if (myFragmentLayout.isValid()) return false; // already have a fragment layout
118 if (NumberOfFragmentIDs()>0) return false; // not a virgin FragmentIDCollection
119
120 myFragmentLayout.resize(NumberOfFragments);
121
122 setFragmentNames(NumberOfFragments, FragmentNamePrefix);
123
124 return true;
125 }
126
127 template <Dims_t DIMS>
128 FragmentIDCollection(const MultiIndex<DIMS>&NumberOfFragments, const string&FragmentNamePrefix)
130 , myFragmentLayout( NumberOfFragments )
131 {
132 setFragmentNames(NumberOfFragments, FragmentNamePrefix);
133 }
134
139 RefPtr<FragmentID>& makeFragmentID(const string&Name);
140 FragmentIndex_t findNumericalIDByName(const string&Name) const;
141
142 string xml() const;
143
145 unsigned iterate(const std::function<bool(const RefPtr<FragmentID>&, int, const std::string&)>&F) const;
146};
147
148
153{
154public:
156
157 virtual RefPtr<FragmentIDCollection> getFragmentIDCollection() const = 0;
158};
159
160
161} // namespace Fiber
162
163#endif // __FIBER_FIELD_FRAGMENTIDCOLLECTION_HPP
An iterator with an optional DataCreator, which is just a class to intercept creation of data along a...
Definition CreativeIterator.hpp:34
A class describing an n-dimensional space at runtime.
Definition field/DynamicSize.hpp:29
bool isValid() const
Check if some size has been defined here.
Definition field/DynamicSize.hpp:261
DynamicSize & resize(const MultiIndex< N > &MI)
Set a new size from the given MultiIndex.
Definition field/DynamicSize.hpp:129
Convenience base class.
Definition FragmentIDCollection.hpp:153
A collection of fragment identifiers with bijective mapping to an integer fragment number.
Definition FragmentIDCollection.hpp:19
const DynamicSize & getFragmentLayout() const
Get the current fragment layout.
Definition FragmentIDCollection.hpp:99
bool setFragmentLayout(const MultiIndex< DIMS > &NumberOfFragments, const string &FragmentNamePrefix)
Set the fragment layout.
Definition FragmentIDCollection.hpp:115
size_t NumberOfFragmentIDs() const
Get the number of fragment ID's managed here.
Definition FragmentIDCollection.hpp:91
const FragmentIDs_t & getFragmentIDs() const
get a vector of fragment id's
Definition FragmentIDCollection.hpp:61
Identification information about a field's fragment.
Definition FragmentID.hpp:42
Given a fragmented field of curvilinear coordinates, (3D array of coordinates), build a uniform Grid ...
Definition FAQ.dox:2
string to_string(const Eagle::FixedArray< ElementType, N > &A, const char *OpenBrace="{", const char *CloseBrace="}", const char *Separator=",")