1#ifndef __CS_ARRAY_2DSPAN_H__
2#define __CS_ARRAY_2DSPAN_H__
41#if defined(__cplusplus)
48#define __has_builtin(x) 0
95#
if (defined(__GNUC__) || defined(__clang__)) && \
98 const char *file_name = __builtin_FILE(),
99 const int line_number = __builtin_LINE()
101 const char *file_name = __FILE__,
102 const int line_number = __LINE__
112 allocate_(file_name, line_number);
127#
if (defined(__GNUC__) || defined(__clang__)) && \
130 const char *file_name = __builtin_FILE(),
131 const int line_number = __builtin_LINE()
133 const char *file_name = __FILE__,
134 const int line_number = __LINE__
144 allocate_(file_name, line_number);
168 _full_array(data_array)
182 bool shallow_copy=
false,
183#
if (defined(__GNUC__) || defined(__clang__)) && \
186 const char *file_name = __builtin_FILE(),
187 const int line_number = __builtin_LINE()
189 const char *file_name = __FILE__,
190 const int line_number = __LINE__
194 set_size_(other._dim1, other._dim2);
200 _is_owner = (shallow_copy) ?
false : other._is_owner;
203 allocate_(file_name, line_number);
204 cs_array_copy<T>(_size, other._full_array, _full_array);
207 _full_array = other._full_array;
255 swap(first._dim1, second._dim1);
256 swap(first._dim2, second._dim2);
257 swap(first._size, second._size);
258 swap(first._is_owner, second._is_owner);
259 swap(first._mode, second._mode);
260 swap(first._full_array, second._full_array);
291 _full_array =
nullptr;
309 _full_array =
nullptr;
328 *
this = other.
view();
343 cs_arrays_set_value<T,1>(_size, val, _full_array);
357#
if (defined(__GNUC__) || defined(__clang__)) && \
360 const char *file_name = __builtin_FILE(),
361 const int line_number = __builtin_LINE()
363 const char *file_name = __FILE__,
364 const int line_number = __LINE__
377 allocate_(file_name, line_number);
396#
if (defined(__GNUC__) || defined(__clang__)) && \
399 const char *file_name = __builtin_FILE(),
400 const int line_number = __builtin_LINE()
402 const char *file_name = __FILE__,
403 const int line_number = __LINE__
408 assert(size_to_keep <=
dim2 && size_to_keep <= _dim2);
414 if (copy_data &&
dim1 < _dim1)
416 "%s: Data cannot be saved when new dim1 is smaller than previous.\n",
424 reallocate_(file_name, line_number);
431 cs_array_copy<T>(_size, _full_array, tmp);
439 cs_array_copy<T>(size_to_keep,
441 _full_array + i*_dim2);
531 return _full_array + i * _dim2;
548 return _full_array + i * _dim2;
624 const char *file_name,
625 const int line_number
628 const char *_ptr_name =
"_full_array";
629 _full_array =
static_cast<T *
>(cs_mem_malloc_hd(_mode,
647 const char *file_name,
648 const int line_number
653 const char *_ptr_name =
"_full_array";
654 _full_array =
static_cast<T *
>(cs_mem_realloc_hd(_full_array,
void bft_error(const char *const file_name, const int line_num, const int sys_error_code, const char *const format,...)
Calls the error handler (set by bft_error_handler_set() or default).
Definition: bft_error.cpp:193
Definition: cs_array_2dspan.h:64
CS_F_HOST_DEVICE void set_alloc_mode(cs_alloc_mode_t mode)
Set memory allocation mode.
Definition: cs_array_2dspan.h:477
CS_F_HOST_DEVICE T * vals()
Getter function for full array.
Definition: cs_array_2dspan.h:498
CS_F_HOST_DEVICE const T * vals() const
Const getter function for full array.
Definition: cs_array_2dspan.h:512
CS_F_HOST_DEVICE cs_lnum_t size()
Getter function for total size.
Definition: cs_array_2dspan.h:588
CS_F_HOST_DEVICE cs_lnum_t dim2()
Getter function for second dimension size.
Definition: cs_array_2dspan.h:574
CS_F_HOST_DEVICE ~array_2dspan()
Destructor method.
Definition: cs_array_2dspan.h:234
CS_F_HOST_DEVICE array_2dspan(array_2dspan &other, bool shallow_copy=false, const char *file_name=__FILE__, const int line_number=__LINE__)
Constructor method using copy. May be a shallow copy.
Definition: cs_array_2dspan.h:180
CS_F_HOST_DEVICE array_2dspan(cs_lnum_t dim1, cs_lnum_t dim2, cs_alloc_mode_t alloc_mode, const char *file_name=__FILE__, const int line_number=__LINE__)
Constructor method with specified allocation method.
Definition: cs_array_2dspan.h:123
CS_F_HOST_DEVICE friend void swap(array_2dspan &first, array_2dspan &second)
Class swap operator used for assignment or move.
Definition: cs_array_2dspan.h:248
CS_F_HOST_DEVICE void resize(cs_lnum_t dim1, cs_lnum_t dim2, const char *file_name=__FILE__, const int line_number=__LINE__)
Resize data array.
Definition: cs_array_2dspan.h:354
CS_F_HOST_DEVICE void resize(cs_lnum_t dim1, cs_lnum_t dim2, bool copy_data, cs_lnum_t size_to_keep, const char *file_name=__FILE__, const int line_number=__LINE__)
Resize data array while keeping some of the old data.
Definition: cs_array_2dspan.h:390
CS_F_HOST_DEVICE array_2dspan()
Default constructor method leading to "empty container".
Definition: cs_array_2dspan.h:74
CS_F_HOST_DEVICE array_2dspan view()
Get a view (non owner) of the array.
Definition: cs_array_2dspan.h:463
CS_F_HOST_DEVICE void empty()
Initializer method for empty containers.
Definition: cs_array_2dspan.h:305
CS_F_HOST_DEVICE array_2dspan(cs_lnum_t dim1, cs_lnum_t dim2, const char *file_name=__FILE__, const int line_number=__LINE__)
Constructor method using only dimension.
Definition: cs_array_2dspan.h:92
CS_F_HOST_DEVICE void clear()
Clear data (empty container).
Definition: cs_array_2dspan.h:285
CS_F_HOST_DEVICE array_2dspan(array_2dspan &&other)
Move constructor.
Definition: cs_array_2dspan.h:219
CS_F_HOST_DEVICE array_2dspan(cs_lnum_t dim1, cs_lnum_t dim2, T *data_array, cs_alloc_mode_t alloc_mode=cs_alloc_mode)
Constructor method for non owner version.
Definition: cs_array_2dspan.h:155
CS_F_HOST_DEVICE cs_lnum_t dim1()
Getter function for first dimension size.
Definition: cs_array_2dspan.h:560
CS_F_HOST_DEVICE void point_to(array_2dspan &other)
Change pointers/size of an existing container.
Definition: cs_array_2dspan.h:322
CS_F_HOST_DEVICE array_2dspan & operator=(array_2dspan other)
Assignment operator.
Definition: cs_array_2dspan.h:270
CS_F_HOST_DEVICE void set_to_val(T val)
Set all values of the data array to a constant value.
Definition: cs_array_2dspan.h:339
#define __has_builtin(x)
Definition: cs_array_2dspan.h:48
#define CS_F_HOST_DEVICE
Definition: cs_defs.h:585
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:350
#define CS_FREE(_ptr)
Definition: cs_mem.h:155
#define CS_MALLOC_HD(_ptr, _ni, _type, _mode)
Definition: cs_mem.h:99
#define cs_alloc_mode
Definition: cs_mem.h:187
cs_alloc_mode_t
Definition: cs_mem.h:50
Definition: cs_array.h:1098