Branch data Line data Source code
1 : : #ifndef MESHKIT_LOCAL_TAG_HPP
2 : : #define MESHKIT_LOCAL_TAG_HPP
3 : :
4 : : #include "meshkit/iMesh.hpp"
5 : : #include "meshkit/MKCore.hpp"
6 : : #include "meshkit/Error.hpp"
7 : : #include <string>
8 : : #include <sstream>
9 : :
10 : : namespace MeshKit
11 : : {
12 : : class LocalTag
13 : : {
14 : : public:
15 : 10 : explicit LocalTag(MKCore *mkCore, int size = 1,
16 : : iMesh::TagValueType type = iBase_ENTITY_HANDLE)
17 : 10 : : imesh_(mkCore->imesh_instance()->instance())
18 : : {
19 : : #ifdef MOAB
20 : : init("", size, type);
21 : : #else
22 [ + - ][ + - ]: 10 : init("local_tag", size, type);
23 : : #endif
24 : 10 : }
25 : :
26 : 10 : LocalTag(MKCore *mkCore, const std::string &name, int size = 1,
27 : : iMesh::TagValueType type = iBase_ENTITY_HANDLE)
28 : 10 : : imesh_(mkCore->imesh_instance()->instance())
29 : : {
30 [ + - ]: 10 : init(name, size, type);
31 : 10 : }
32 : :
33 : 20 : ~LocalTag()
34 : 20 : {
35 : 20 : imesh_.destroyTag(tag_handle_, true);
36 : 20 : }
37 : :
38 : 78 : operator iMesh::TagHandle()
39 : : {
40 : 78 : return tag_handle_;
41 : : }
42 : :
43 : : private:
44 : 20 : void init(const std::string &name, int size, iMesh::TagValueType type)
45 : : {
46 : : iMesh::Error err;
47 : 20 : err = imesh_.createTag(name.c_str(), size, type, tag_handle_);
48 : :
49 [ + + ]: 24 : for (int i=0; err == iBase_TAG_ALREADY_EXISTS; i++) {
50 [ + - ]: 4 : std::ostringstream os;
51 [ + - ][ + - ]: 4 : os << name << i;
52 [ + - ]: 8 : std::string tag_name = os.str();
53 [ + - ]: 4 : err = imesh_.createTag(tag_name.c_str(), size, type, tag_handle_);
54 : 4 : }
55 : :
56 : 20 : IBERRCHK(err, "FIXME");
57 : 20 : }
58 : :
59 : : iMesh imesh_;
60 : : iMesh::TagHandle tag_handle_;
61 : : };
62 : : }
63 : :
64 : : #endif
|