Interface Documentation
Version: invalid
entity_storage.hh
Go to the documentation of this file.
1 /*
2  @@@@@@@@ @@ @@@@@@ @@@@@@@@ @@
3  /@@///// /@@ @@////@@ @@////// /@@
4  /@@ /@@ @@@@@ @@ // /@@ /@@
5  /@@@@@@@ /@@ @@///@@/@@ /@@@@@@@@@/@@
6  /@@//// /@@/@@@@@@@/@@ ////////@@/@@
7  /@@ /@@/@@//// //@@ @@ /@@/@@
8  /@@ @@@//@@@@@@ //@@@@@@ @@@@@@@@ /@@
9  // /// ////// ////// //////// //
10 
11  Copyright (c) 2016, Los Alamos National Security, LLC
12  All rights reserved.
13  */
14 #pragma once
15 
18 #include "array_buffer.hh"
19 #include "flecsi/util/offset.hh"
20 #include "index_space.hh"
21 
22 namespace flecsi {
23 namespace topo {
24 
25 template<typename T>
26 using topology_storage = array_buffer<T>;
27 
29 {
30 public:
31  using offset_t = util::offset_t;
32 
33  const offset_t operator[](size_t i) const {
34  return s_[i];
35  }
36 
37  void add_count(uint32_t count) {
38  offset_t o(start_, count);
39  s_.push_back(o);
40  start_ += count;
41  }
42 
43  void add_end(size_t end) {
44  assert(end > start_);
45  add_count(static_cast<uint32_t>(end - start_));
46  }
47 
48  std::pair<size_t, size_t> range(size_t i) const {
49  return s_[i].range();
50  }
51 
52  void clear() {
53  s_.clear();
54  start_ = 0;
55  }
56 
57  auto & storage() {
58  return s_;
59  }
60 
61  const auto & storage() const {
62  return s_;
63  }
64 
65  size_t size() const {
66  return s_.size();
67  }
68 
69 private:
71  size_t start_ = 0;
72 }; // class offset_storage_t
73 
74 template<typename T>
76 {
77 public:
78  class iterator
79  {
80  public:
81  iterator(simple_id i) : i_(i) {}
82 
83  bool operator==(const iterator & itr) {
84  return i_ == itr.i_;
85  }
86 
87  bool operator!=(const iterator & itr) {
88  return i_ != itr.i_;
89  }
90 
91  simple_id operator*() {
92  return i_;
93  }
94 
95  iterator & operator++() {
96  ++i_;
97  return *this;
98  }
99 
100  private:
101  size_t i_;
102  };
103 
104  simple_id operator[](size_t i) const {
105  return i;
106  }
107 
108  simple_id back() const {
109  return size_ - 1;
110  }
111 
112  void push_back(simple_id) {
113  assert(false && "invalid operation");
114  }
115 
116  void pushed() {
117  assert(false && "invalid operation");
118  }
119 
120  void clear() {
121  size_ = 0;
122  }
123 
124  bool empty() const {
125  return size_ == 0;
126  }
127 
128  void resize(size_t n) {
129  size_ = n;
130  }
131 
132  size_t capacity() const {
133  return size_;
134  }
135 
136  template<typename... Args>
137  void assign(Args &&...) {
138  assert(false && "invalid operation");
139  }
140 
141  template<typename... Args>
142  void insert(Args &&...) {}
143 
144  void reserve(size_t) {
145  assert(false && "invalid operation");
146  }
147 
148  iterator begin() const {
149  return iterator(0);
150  }
151 
152  iterator end() const {
153  return iterator(size_ - 1);
154  }
155 
156 private:
157  size_t size_;
158 }; // struct identity_storage
159 
160 } // namespace topo
161 } // namespace flecsi
Definition: entity_storage.hh:28
offset represents an offset range (a start index plus a count of elements) in a single uint64_t...
Definition: offset.hh:34
Definition: array_buffer.hh:71
Definition: index_space.hh:1711
Definition: entity_storage.hh:75
Definition: entity_storage.hh:78
Definition: control.hh:31