DSC
 All Classes Namespaces Files Functions Variables Typedefs Friends Macros
attribute_vector.h
1 //
2 // attibute_vector.h
3 // 3D_DSC
4 //
5 // Created by Morten Nobel-Jørgensen.
6 // Copyright (c) 2014 Morten Nobel-Jørgensen. All rights reserved.
7 //
8 
9 #pragma once
10 
11 #include <vector>
12 #include <cassert>
13 
14 namespace is_mesh {
15 
16 template<typename ITEMID, typename ITEM>
18 {
19  std::vector<ITEM> items;
20 public:
22  AttributeVector(size_t size = 0, ITEM item = ITEM())
23  {
24  items = std::vector<ITEM>(size, item);
25  }
26 
28  const ITEM& get(ITEMID ID) const
29  {
30  assert(static_cast<unsigned int>(ID) < items.size());
31  return items[ID];
32  }
33 
35  ITEM& get(ITEMID ID)
36  {
37  if(ID >= items.size())
38  {
39  items.resize(ID + 1);
40  }
41  return items[ID];
42  }
43 
45  const ITEM& operator [](ITEMID ID) const
46  {
47  assert(static_cast<unsigned int>(ID) < items.size());
48  return items[ID];
49  }
50 
52  ITEM& operator [](ITEMID ID)
53  {
54  if(ID >= items.size())
55  {
56  items.resize(ID + 1);
57  }
58  return items[ID];
59  }
60 
61  size_t size() const
62  {
63  return items.size();
64  }
65 
66  // Set selected elements to the default value
67  // Should be invoked when garbage collection on is_mesh is run (See is_mesh::add_gc_listener )
68  // The garbage collection will destroy deleted elements and elements with same ids
69  // can later be reused.
70  void garbage_collect(const std::vector<ITEMID> & ids, ITEM item = ITEM()){
71  for (auto id : ids){
72  items[id] = item;
73  }
74  }
75 };
76 }
const ITEM & operator[](ITEMID ID) const
const reference to item given by ID
Definition: attribute_vector.h:45
Definition: attribute_vector.h:17
AttributeVector(size_t size=0, ITEM item=ITEM())
Construct from optional size and item.
Definition: attribute_vector.h:22