AERA
resized_vector.h
1 //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
2 //_/_/
3 //_/_/ AERA
4 //_/_/ Autocatalytic Endogenous Reflective Architecture
5 //_/_/
6 //_/_/ Copyright (c) 2018-2023 Jeff Thompson
7 //_/_/ Copyright (c) 2018-2023 Kristinn R. Thorisson
8 //_/_/ Copyright (c) 2018-2023 Icelandic Institute for Intelligent Machines
9 //_/_/ Copyright (c) 2018 Throstur Thorarensen
10 //_/_/ http://www.iiim.is
11 //_/_/
12 //_/_/ Copyright (c) 2010-2012 Eric Nivel
13 //_/_/ Center for Analysis and Design of Intelligent Agents
14 //_/_/ Reykjavik University, Menntavegur 1, 102 Reykjavik, Iceland
15 //_/_/ http://cadia.ru.is
16 //_/_/
17 //_/_/ Part of this software was developed by Eric Nivel
18 //_/_/ in the HUMANOBS EU research project, which included
19 //_/_/ the following parties:
20 //_/_/
21 //_/_/ Autonomous Systems Laboratory
22 //_/_/ Technical University of Madrid, Spain
23 //_/_/ http://www.aslab.org/
24 //_/_/
25 //_/_/ Communicative Machines
26 //_/_/ Edinburgh, United Kingdom
27 //_/_/ http://www.cmlabs.com/
28 //_/_/
29 //_/_/ Istituto Dalle Molle di Studi sull'Intelligenza Artificiale
30 //_/_/ University of Lugano and SUPSI, Switzerland
31 //_/_/ http://www.idsia.ch/
32 //_/_/
33 //_/_/ Institute of Cognitive Sciences and Technologies
34 //_/_/ Consiglio Nazionale delle Ricerche, Italy
35 //_/_/ http://www.istc.cnr.it/
36 //_/_/
37 //_/_/ Dipartimento di Ingegneria Informatica
38 //_/_/ University of Palermo, Italy
39 //_/_/ http://diid.unipa.it/roboticslab/
40 //_/_/
41 //_/_/
42 //_/_/ --- HUMANOBS Open-Source BSD License, with CADIA Clause v 1.0 ---
43 //_/_/
44 //_/_/ Redistribution and use in source and binary forms, with or without
45 //_/_/ modification, is permitted provided that the following conditions
46 //_/_/ are met:
47 //_/_/ - Redistributions of source code must retain the above copyright
48 //_/_/ and collaboration notice, this list of conditions and the
49 //_/_/ following disclaimer.
50 //_/_/ - Redistributions in binary form must reproduce the above copyright
51 //_/_/ notice, this list of conditions and the following disclaimer
52 //_/_/ in the documentation and/or other materials provided with
53 //_/_/ the distribution.
54 //_/_/
55 //_/_/ - Neither the name of its copyright holders nor the names of its
56 //_/_/ contributors may be used to endorse or promote products
57 //_/_/ derived from this software without specific prior
58 //_/_/ written permission.
59 //_/_/
60 //_/_/ - CADIA Clause: The license granted in and to the software
61 //_/_/ under this agreement is a limited-use license.
62 //_/_/ The software may not be used in furtherance of:
63 //_/_/ (i) intentionally causing bodily injury or severe emotional
64 //_/_/ distress to any person;
65 //_/_/ (ii) invading the personal privacy or violating the human
66 //_/_/ rights of any person; or
67 //_/_/ (iii) committing or preparing for any act of war.
68 //_/_/
69 //_/_/ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
70 //_/_/ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
71 //_/_/ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
72 //_/_/ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
73 //_/_/ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
74 //_/_/ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
75 //_/_/ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
76 //_/_/ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
77 //_/_/ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
78 //_/_/ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
79 //_/_/ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
80 //_/_/ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
81 //_/_/ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
82 //_/_/ OF SUCH DAMAGE.
83 //_/_/
84 //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
85 
86 #ifndef r_code_vector_h
87 #define r_code_vector_h
88 
89 #include <vector>
90 #include "../submodules/CoreLibrary/CoreLibrary/types.h"
91 
92 
93 using namespace core;
94 
95 namespace r_code {
96 
97 // auto-resized vector
98 #if 0 // If resize causes a crash, then enable this temporary fix which overrides resize but leaks memory.
99  template<typename T> class resized_vector {
100  public:
101  resized_vector() : vector_(new std::vector<T>()) {}
102  resized_vector(size_t n) : vector_(new std::vector<T>(n)) {}
103  ~resized_vector() { delete vector_; }
104  size_t size() const { return vector_->size(); }
105  T& operator [](size_t i) {
106 
107  if (i >= size())
108  resize(i + 1);
109  return (*vector_)[i];
110  }
111  const T& operator [](size_t i) const {
112 
113  return (*vector_)[i];
114  }
115  void push_back(T t) { vector_->push_back(t); }
116  void clear() { vector_->clear(); }
117  void resize(size_t new_size) {
118  if (new_size <= vector_->size()) {
119  // No need to realloc.
120  vector_->resize(new_size);
121  return;
122  }
123 
124  std::vector<T>* new_vector = new std::vector<T>(new_size);
125  for (size_t i = 0; i < vector_->size(); ++i)
126  (*new_vector)[i] = (*vector_)[i];
127 #if 0 // This fails, so comment it out. It's a memory leak, but the code runs.
128  delete vector_;
129 #endif
130  vector_ = new_vector;
131  }
132  const std::vector<T>* as_std() const { return vector_; }
133  private:
134  std::vector<T>* vector_;
135  };
136 #else
137 template<typename T> class resized_vector {
138 public:
139  resized_vector() {}
140  resized_vector(size_t n) : vector_(n) {}
141  size_t size() const { return vector_.size(); }
142  T &operator [](size_t i) {
143 
144  if (i >= size())
145  vector_.resize(i + 1);
146  return vector_[i];
147  }
148  const T &operator [](size_t i) const {
149 
150  return vector_[i];
151  }
152  void push_back(T t) { vector_.push_back(t); }
153  void clear() { vector_.clear(); }
154  void resize(size_t new_size) { vector_.resize(new_size); }
155  const std::vector<T>* as_std() const { return &vector_; }
156 private:
157  std::vector<T> vector_;
158 };
159 #endif
160 }
161 
162 
163 #endif
r_code::resized_vector
Definition: resized_vector.h:137