atlas
Table.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2013 ECMWF.
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  * In applying this licence, ECMWF does not waive the privileges and immunities
7  * granted to it by virtue of its status as an intergovernmental organisation
8  * nor does it submit to any jurisdiction.
9  */
10 
16 
17 #pragma once
18 
19 #include <array>
20 #include <type_traits>
21 
22 #include "atlas/util/Object.h"
23 
24 #include "atlas/array.h"
25 #include "atlas/library/config.h"
26 
27 namespace atlas {
28 namespace array {
29 
30 // --------------------------------------------------------------------------
31 
54 
55 class Table : public util::Object {
56 private:
57  static constexpr unsigned short _values_ = 0;
58  static constexpr unsigned short _displs_ = 1;
59  static constexpr unsigned short _counts_ = 2;
60 
61 public:
62  //-- Constructors
63 
66  Table( const std::string& name = "" );
67 
68  ~Table();
69 
70 private:
73  Table( idx_t values[], size_t rows, size_t displs[], size_t counts[] );
74 
75 public:
76  //-- Accessors
77 
79  const std::string& name() const { return name_; }
80 
82  void rename( const std::string& name ) { name_ = name; }
83 
85  size_t rows() const { return rows_; }
86 
88  size_t cols( size_t row_idx ) const { return counts_( row_idx ); }
89 
91  size_t maxcols() const { return maxcols_; }
92 
94  size_t mincols() const { return mincols_; }
95 
97  idx_t missing_value() const { return missing_value_; }
98 
100  size_t size() const { return data_[_values_]->size(); }
101 
103  virtual size_t footprint() const;
104 
106  virtual void updateDevice() const;
107 
109  virtual void updateHost() const;
110 
112  virtual void syncHostDevice() const;
113 
115  virtual bool valid() const;
116 
118  virtual bool hostNeedsUpdate() const;
119 
121  virtual bool deviceNeedsUpdate() const;
122 
124  void dump( std::ostream& ) const;
125 
127  bool owns() { return owns_; }
128 
130 
133  virtual void add( size_t rows, size_t cols, const idx_t values[], bool fortran_array = false );
134 
137  virtual void add( size_t rows, size_t cols );
138 
141  virtual void add( size_t rows, const size_t cols[] );
142 
145  virtual void insert( size_t position, size_t rows, size_t cols, const idx_t values[], bool fortran_array = false );
146 
149  virtual void insert( size_t position, size_t rows, size_t cols );
150 
153  virtual void insert( size_t position, size_t rows, const size_t cols[] );
154 
157  virtual void clear();
158 
159 private:
161 
162  void resize_values( size_t old_size, size_t size, bool initialize, const idx_t values[], bool fortran_array );
163 
164  void resize_counts_and_displs( size_t size );
165 
166  void insert_counts_and_displs( size_t position, size_t rows );
167 
168  void resize_values( size_t size );
169 
170  void insert_values( size_t position, size_t size );
171 
172 private:
173  template <bool ReadOnly>
174  friend class TableView;
175 
176  std::string name_;
177  bool owns_;
178  std::array<array::Array*, 3> data_;
179  idx_t missing_value_;
180  size_t rows_;
181  size_t maxcols_;
182  size_t mincols_;
183  ArrayView<size_t, 1> displs_;
184  ArrayView<size_t, 1> counts_;
185  ArrayView<idx_t, 1> values_;
186 };
187 
188 //------------------------------------------------------------------------------------------------------
189 
190 } // namespace array
191 } // namespace atlas
virtual bool hostNeedsUpdate() const
Check if data is present on host.
Definition: Table.cc:344
size_t mincols() const
Minimum value for number of columns over all rows.
Definition: Table.h:94
virtual void clear()
Resize connectivity, and insert given rows with missing values.
Definition: Table.cc:98
size_t rows() const
Number of rows in the connectivity table.
Definition: Table.h:85
size_t maxcols() const
Maximum value for number of columns over all rows.
Definition: Table.h:91
idx_t missing_value() const
Value that is given to unassigned entries.
Definition: Table.h:97
Table.
Definition: Table.h:55
bool owns()
Check if data is owned or wrapped.
Definition: Table.h:127
virtual void syncHostDevice() const
Synchronise data between host and device.
Definition: Table.cc:330
void dump(std::ostream &) const
Print all values unformatted to output stream.
Definition: Table.cc:370
virtual void updateHost() const
Clone data from device.
Definition: Table.cc:324
Definition: Object.h:18
virtual size_t footprint() const
Return memory footprint of table.
Definition: Table.cc:360
Contains all atlas classes and methods.
Definition: atlas-grids.cc:33
virtual void add(size_t rows, size_t cols, const idx_t values[], bool fortran_array=false)
– Modifiers
Definition: Table.cc:171
void rename(const std::string &name)
Rename this Connectivity.
Definition: Table.h:82
long idx_t
Integer type for indices in connectivity tables.
Definition: config.h:42
virtual bool deviceNeedsUpdate() const
Check if data is present on device.
Definition: Table.cc:352
Definition: TableView.h:142
virtual void insert(size_t position, size_t rows, size_t cols, const idx_t values[], bool fortran_array=false)
Resize connectivity, and insert given rows.
Definition: Table.cc:242
virtual bool valid() const
Check if data is valid.
Definition: Table.cc:336
virtual void updateDevice() const
Clone data to device.
Definition: Table.cc:318
Table(const std::string &name="")
Construct connectivity table that needs resizing a-posteriori Data is owned.
Definition: Table.cc:34
size_t cols(size_t row_idx) const
Number of columns for specified row in the connectivity table.
Definition: Table.h:88
const std::string & name() const
Name associated to this Connetivity.
Definition: Table.h:79
size_t size() const
Number of values stored in the table.
Definition: Table.h:100