24 #include <type_traits> 27 #include "atlas/library/config.h" 34 #if ATLAS_HAVE_FORTRAN 35 #define INDEX_REF Index 36 #define FROM_FORTRAN -1 58 void set(
const idx_t& value ) { *( idx_ ) = value + BASE; }
59 idx_t get()
const {
return *(idx_)-BASE; }
60 void operator =(
const idx_t& value ) {
set( value ); }
91 operator idx_t()
const {
return get(); }
101 template <
bool ReadOnly>
103 #if ATLAS_HAVE_FORTRAN 109 using ReturnType =
typename std::conditional<ReadOnly, idx_t, Index>::type;
113 TableRow(
const idx_t* data,
size_t size ) : data_( const_cast<idx_t*>( data ) ), size_( size ) {}
116 idx_t operator()(
size_t i )
const {
return data_[i] FROM_FORTRAN; }
119 ReturnType operator()(
size_t i ) {
return INDEX_REF( data_ + i ); }
122 size_t size()
const {
return size_; }
126 TableRow& operator=(
const idx_t column_values[] ) {
127 assert( not ReadOnly );
128 for (
size_t n = 0; n < size_; ++n ) {
129 data_[n] = column_values[n] TO_FORTRAN;
141 template <
bool ReadOnly>
143 #if ATLAS_HAVE_FORTRAN 144 using Index =
typename std::conditional<ReadOnly, idx_t, detail::TableIndex>::type;
153 static constexpr
unsigned short _values_ = 0;
154 static constexpr
unsigned short _displs_ = 1;
155 static constexpr
unsigned short _counts_ = 2;
158 using value_type =
idx_t;
159 using Data =
typename std::conditional<ReadOnly, const idx_t, idx_t>::type;
161 template <
typename ReturnType,
bool ReadOnly_>
164 template <
typename ReturnType>
168 idx_t apply(
size_t row,
size_t col )
const {
return tv_->values_( tv_->displs_( row ) + col ) FROM_FORTRAN; }
171 template <
typename ReturnType>
175 Index apply(
size_t row,
size_t col )
const {
return Index( &tv_->values_( tv_->displs_( row ) + col ) ); }
195 size_t rows()
const {
return rows_; }
199 size_t cols(
size_t row_idx )
const {
return counts_( row_idx ); }
213 assert( counts_( row_idx ) > col_idx );
214 return const_access_.apply( row_idx, col_idx );
221 assert( counts_( row_idx ) > col_idx );
222 return access_.apply( row_idx, col_idx );
229 Data* data() {
return values_.data(); }
232 size_t size()
const {
return values_.size(); }
235 idx_t missing_value()
const {
return missing_value_; }
238 ConstRow row(
size_t row_idx )
const {
return ConstRow( values_.data() + displs_( row_idx ), counts_( row_idx ) ); }
241 Row row(
size_t row_idx ) {
return Row( values_.data() + displs_( row_idx ), counts_( row_idx ) ); }
246 size_t displs(
const size_t row )
const {
return displs_( row ); }
249 const size_t* displs()
const {
return displs_.data(); }
250 const size_t* counts()
const {
return counts_.data(); }
254 idx_t missing_value_;
ATLAS_HOST_DEVICE Index operator()(size_t row_idx, size_t col_idx)
Access to connectivity table elements for given row and column The returned index has base 0 regardle...
Definition: TableView.h:220
Table.
Definition: Table.h:55
ATLAS_HOST_DEVICE size_t mincols() const
Minimum value for number of columns over all rows.
Definition: TableView.h:207
ATLAS_HOST_DEVICE size_t cols(size_t row_idx) const
Number of columns for specified row in the connectivity table.
Definition: TableView.h:199
ATLAS_HOST_DEVICE idx_t operator()(size_t row_idx, size_t col_idx) const
Access to connectivity table elements for given row and column The returned index has base 0 regardle...
Definition: TableView.h:212
Definition: TableView.h:162
ATLAS_HOST_DEVICE size_t displs(const size_t row) const
– Modifiers
Definition: TableView.h:246
Definition: TableView.h:49
ATLAS_HOST_DEVICE size_t rows() const
Number of rows in the connectivity table.
Definition: TableView.h:195
const idx_t * data() const
Access to raw data.
Definition: TableView.h:228
Contains all atlas classes and methods.
Definition: atlas-grids.cc:33
long idx_t
Integer type for indices in connectivity tables.
Definition: config.h:42
Definition: TableView.h:142
ATLAS_HOST_DEVICE size_t maxcols() const
Maximum value for number of columns over all rows.
Definition: TableView.h:203
Definition: TableView.h:102