@@ -32,9 +32,6 @@ namespace Spheral {
32
32
#endif
33
33
34
34
35
-
36
- // #define MV_VALUE_SEMANTICS
37
-
38
35
template <typename DataType>
39
36
class ManagedVector ;
40
37
@@ -72,94 +69,52 @@ public:
72
69
{
73
70
#if !defined(SPHERAL_GPU_ACTIVE)
74
71
setCallback ();
75
-
76
72
#endif // SPHERAL_GPU_ACTIVE
77
73
}
78
74
79
- SPHERAL_HOST_DEVICE ManagedVector (size_t elems) :
75
+ SPHERAL_HOST ManagedVector (size_t elems) :
80
76
MA(),
81
77
m_size(elems)
82
78
{
83
- #if !defined(SPHERAL_GPU_ACTIVE)
84
79
MA::allocate (m_size < initial_capacity ? initial_capacity: pow2_ceil (m_size), chai::CPU, getCallback ());
85
80
for (size_t i = 0 ; i < m_size; i++) new (&MA::operator [](i)) DataType ();
86
81
MA::registerTouch (chai::CPU);
87
- #endif // SPHERAL_GPU_ACTIVE
88
82
}
89
83
90
84
SPHERAL_HOST ManagedVector (size_t elems, DataType identity) :
91
85
MA(),
92
86
m_size(elems)
93
87
{
94
- #if !defined(SPHERAL_GPU_ACTIVE)
95
88
MA::allocate (m_size < initial_capacity ? initial_capacity: pow2_ceil (m_size), chai::CPU, getCallback ());
96
89
for (size_t i = 0 ; i < m_size; i++) new (&MA::operator [](i)) DataType (identity);
97
90
MA::registerTouch (chai::CPU);
98
- #endif // SPHERAL_GPU_ACTIVE
99
91
}
100
92
101
- #ifdef MV_VALUE_SEMANTICS
102
- // ---------------------
103
- // Destructor
104
- // ---------------------
105
- SPHERAL_HOST ~ManagedVector ()
106
- {
107
- MA::free ();
108
- }
109
- #endif
110
93
using MA::move;
111
94
using MA::free;
112
95
113
96
// ---------------------
114
97
// Copy Constructor
115
98
// ---------------------
116
- #ifdef MV_VALUE_SEMANTICS
117
- SPHERAL_HOST_DEVICE constexpr inline ManagedVector (ManagedVector const & rhs) noexcept :
118
- ManagedVector(rhs.m_size)
119
- {printf (" MV Copy w/ Value Semantics.\n " );
120
- for (size_t i = 0 ; i < m_size; i++) new (&MA::operator [](i)) DataType (rhs[i]);
121
- }
122
- #else
123
99
SPHERAL_HOST_DEVICE constexpr inline ManagedVector (ManagedVector const & rhs) noexcept : MA(rhs), m_size(rhs.m_size) {}
124
- #endif
125
100
126
101
// ---------------------
127
102
// Assignment
128
103
// ---------------------
129
- #ifdef MV_VALUE_SEMANTICS
130
- SPHERAL_HOST_DEVICE ManagedVector<DataType>& operator =(ManagedVector const & rhs) {
131
- if (capacity () != rhs.capacity ()) MA::reallocate (rhs.capacity ());
132
- m_size = rhs.m_size ;
133
- for (size_t i = 0 ; i < m_size; i++) new (&MA::operator [](i)) DataType (rhs[i]);
134
- return *this ;
135
- }
136
- #else
137
104
SPHERAL_HOST_DEVICE ManagedVector<DataType>& operator =(ManagedVector const & rhs) {
138
105
MA::operator =(rhs);
139
106
m_size = rhs.m_size ;
140
107
return *this ;
141
108
}
142
- #endif
143
109
144
110
// ---------------------
145
111
// Equivalence
146
112
// ---------------------
147
- #ifdef MV_VALUE_SEMANTICS
148
- SPHERAL_HOST bool operator ==(ManagedVector const & rhs) const {
149
- if (m_size != rhs.m_size ) return false ;
150
- for (size_t i = 0 ; i < m_size; i++) {
151
- if (MA::operator [](i) != rhs[i]) {
152
- return false ;
153
- }
154
- }
155
- return true ;
156
- }
157
- #else
158
113
SPHERAL_HOST_DEVICE bool operator ==(ManagedVector const & rhs) const {
159
114
if (m_size != rhs.m_size ) return false ;
160
115
return MA::operator ==(rhs);
161
116
}
162
- # endif
117
+
163
118
SPHERAL_HOST_DEVICE bool operator !=(ManagedVector const & rhs) const {
164
119
return !(*this == rhs);
165
120
}
@@ -174,10 +129,10 @@ public:
174
129
SPHERAL_HOST void push_back (DataType&& value) {
175
130
if (capacity () == 0 ) MA::allocate (initial_capacity, chai::CPU, getCallback ());
176
131
if (m_size >= capacity ()) MA::reallocate (pow2_ceil (m_size + 1 ));
177
- // MA::operator[](m_size) = std::move(value);
178
132
new (&MA::operator [](m_size)) DataType (value);
179
133
m_size++;
180
134
}
135
+
181
136
template <typename ... Args>
182
137
SPHERAL_HOST
183
138
DataType& emplace_back (Args&&... args) {
@@ -330,21 +285,14 @@ inline
330
285
ManagedVector<U> deepCopy (ManagedVector<U> const & array)
331
286
{
332
287
ManagedVector<U> copy (array.size ());
333
- for (size_t i = 0 ; i < array.size (); i++) new (©[i]) U (array[i]);
288
+ for (size_t i = 0 ; i < array.size (); i++) {
289
+ new (©[i]) U (array[i]);
290
+ }
334
291
return copy;
335
292
}
336
293
337
294
} // namespace Spheral
338
295
339
- // #include "SphArrayInline.hh"
340
-
341
- #else
342
-
343
- // // Forward declare the SphArrayIterator class.
344
- // namespace Spheral {
345
- // template<typename sph_array_t> class SphArrayIterator ;
346
- // } // namespace Spheral
347
-
348
296
#endif // __Spheral_lvarray_hh__
349
297
350
298
0 commit comments