26#define GRID_BOUNDS_DEBUG 0
28#define GRID_BOUNDS_DEBUG 1
47 template <
typename U,
typename =
int>
struct has_value_type : std::false_type { };
48 template <
typename U>
struct has_value_type <U, decltype(
std::declval<typename U::value_type>(), 0)> : std::true_type { };
50 template <
typename U,
typename A,
typename B>
using if_ =
typename std::conditional<U::value, A, B>::type;
128 return m_W == 0 &&
m_H == 0;
137 static_assert(!std::is_same<T, T>::value,
"Not implemented.");
145 for (
int j = j0; j < j1; ++j)
148 for (
int i = i0; i < i1; ++i)
197 for (
int i=0; i <
m_H*
m_W; ++i)
209 for (
int i = 0; i <
m_H*
m_W; ++i)
213 void set(
int i,
int j,
const T& value)
221 T&
operator[](std::pair<u16, u16> coords) {
return get(coords.first, coords.second); }
222 T&
get(std::pair<u16, u16> coords) {
return get(coords.first, coords.second); }
224 T&
operator[](std::pair<u16, u16> coords)
const {
return get(coords.first, coords.second); }
225 T&
get(std::pair<u16, u16> coords)
const {
return get(coords.first, coords.second); }
262 size_t len = value.
m_H * value.
m_W;
269 for (
size_t i = 1; i < len; ++i)
271 if (prevVal == value.
m_Data[i])
279 prevVal = value.
m_Data[i];
292 for (
size_t i = 0; i < len;)
298 std::fill(&value.
m_Data[i], &value.
m_Data[i+count], el);
345 for (
size_t i = 0; i < (size_t)(
m_BW*
m_BH); ++i)
352 void set(
int i,
int j,
const T& value)
392 bool wasDirty =
dirty;
Helper templates definitions for serializing/deserializing common objects.
void Serializer(S &serialize, const char *name, Args &&... args)
Definition: SerializeTemplates.h:51
Basic 2D array, intended for storing tile data, plus support for lazy updates by ICmpObstructionManag...
Definition: Grid.h:38
void reset_data(is_pod)
Definition: Grid.h:162
if_< std::is_pod< U >, is_pod, if_< has_value_type< U >, is_container, default_type > > dispatch
Definition: Grid.h:55
T & operator[](std::pair< u16, u16 > coords)
Definition: Grid.h:221
~Grid()
Definition: Grid.h:108
T & operator[](std::pair< u16, u16 > coords) const
Definition: Grid.h:224
Grid & operator=(const Grid &g)
Definition: Grid.h:79
u16 m_H
Definition: Grid.h:249
u16 height() const
Definition: Grid.h:132
void bitwise_or(const Grid &g)
Definition: Grid.h:201
void copy_data(T *o, is_pod)
Definition: Grid.h:77
T * m_Data
Definition: Grid.h:250
bool compare_data(T *o, is_pod) const
Definition: Grid.h:115
u16 m_W
Definition: Grid.h:249
bool _any_set_in_square(int i0, int j0, int i1, int j1, is_pod) const
Definition: Grid.h:140
T & get(std::pair< u16, u16 > coords)
Definition: Grid.h:222
void add(const Grid &g)
Definition: Grid.h:192
bool _any_set_in_square(int, int, int, int, default_type) const
Definition: Grid.h:135
void clear()
Definition: Grid.h:172
T & get(int i, int j)
Definition: Grid.h:227
T & get(int i, int j) const
Definition: Grid.h:235
Grid()
Definition: Grid.h:58
bool any_set_in_square(int i0, int j0, int i1, int j1) const
Definition: Grid.h:156
void set(int i, int j, const T &value)
Definition: Grid.h:213
Grid(u16 w, u16 h)
Definition: Grid.h:62
void copy_data(T *o, default_type)
Definition: Grid.h:76
void swap(Grid &g)
Definition: Grid.h:101
void reset()
Definition: Grid.h:165
Grid(const Grid &g)
Definition: Grid.h:67
typename std::conditional< U::value, A, B >::type if_
Definition: Grid.h:50
T & get(std::pair< u16, u16 > coords) const
Definition: Grid.h:225
bool operator==(const Grid &g) const
Definition: Grid.h:117
T value_type
Definition: Grid.h:72
bool compare_sizes(const Grid< U > *g) const
Definition: Grid.h:244
bool operator!=(const Grid &g) const
Definition: Grid.h:124
bool compare_data(T *o, default_type) const
Definition: Grid.h:114
u16 width() const
Definition: Grid.h:131
bool blank() const
Definition: Grid.h:126
void resize(u16 w, u16 h)
Definition: Grid.h:177
void reset_data(default_type)
Definition: Grid.h:161
Deserialization interface; see serialization overview.
Definition: IDeserializer.h:35
virtual void NumberU16_Unbounded(const char *name, uint16_t &out)
Definition: IDeserializer.cpp:110
virtual void NumberU32_Unbounded(const char *name, uint32_t &out)
Definition: IDeserializer.cpp:124
Serialization interface; see serialization overview.
Definition: ISerializer.h:121
void NumberU32_Unbounded(const char *name, uint32_t value)
Serialize a number.
Definition: ISerializer.h:171
void NumberU16_Unbounded(const char *name, uint16_t value)
Serialize a number.
Definition: ISerializer.h:161
Similar to Grid, except optimised for sparse usage (the grid is subdivided into buckets whose content...
Definition: Grid.h:311
T * GetBucket(int i, int j)
Definition: Grid.h:316
T ** m_Data
Definition: Grid.h:370
size_t m_DirtyID
Definition: Grid.h:372
u16 m_BH
Definition: Grid.h:369
~SparseGrid()
Definition: Grid.h:337
u16 m_H
Definition: Grid.h:368
void set(int i, int j, const T &value)
Definition: Grid.h:352
u16 m_BW
Definition: Grid.h:369
u16 m_W
Definition: Grid.h:368
void reset()
Definition: Grid.h:343
@ BucketSize
Definition: Grid.h:314
@ BucketBits
Definition: Grid.h:314
T & get(int i, int j)
Definition: Grid.h:360
SparseGrid(u16 w, u16 h)
Definition: Grid.h:327
#define SAFE_ARRAY_DELETE(p)
delete memory ensuing from new[] and set the pointer to zero (thus making double-frees safe / a no-op...
Definition: code_generation.h:121
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:277
Definition: ShaderDefines.cpp:31
#define T(string_literal)
Definition: secure_crt.cpp:77
void operator()(IDeserializer &deserialize, const char *name, Grid< T > &value)
Definition: Grid.h:285
void operator()(ISerializer &serialize, const char *name, Grid< T > &value)
Definition: Grid.h:260
Definition: SerializeTemplates.h:42
uint16_t u16
Definition: types.h:38
uint32_t u32
Definition: types.h:39