19 #include "atlas/domain/Domain.h" 20 #include "atlas/library/config.h" 21 #include "atlas/projection/Projection.h" 22 #include "atlas/util/Object.h" 48 using uid_t = std::string;
49 using hash_t = std::string;
51 template <
typename Derived,
typename Po
int>
54 using difference_type = size_t;
55 using iterator_category = std::random_access_iterator_tag;
56 using value_type = Point;
57 using pointer =
const Point*;
58 using reference =
const Point&;
61 virtual bool next( value_type& ) = 0;
62 virtual reference operator*()
const = 0;
63 virtual const Derived& operator++() = 0;
64 virtual const Derived& operator+=( difference_type ) = 0;
65 virtual bool operator==(
const Derived& )
const = 0;
66 virtual bool operator!=(
const Derived& )
const = 0;
67 virtual difference_type distance(
const Derived& )
const = 0;
68 virtual std::unique_ptr<Derived> clone()
const = 0;
77 static const Grid* create(
const std::string& name );
79 static const Grid* create(
const std::string& name,
const Config& );
90 virtual std::string name()
const = 0;
91 virtual std::string type()
const = 0;
95 virtual uid_t uid()
const;
98 virtual void hash( eckit::Hash& )
const = 0;
101 std::string hash()
const;
109 virtual size_t footprint()
const {
return 0; }
118 virtual idx_t size()
const = 0;
120 virtual Spec spec()
const = 0;
122 virtual std::unique_ptr<IteratorXY> xy_begin()
const = 0;
123 virtual std::unique_ptr<IteratorXY> xy_end()
const = 0;
124 virtual std::unique_ptr<IteratorLonLat> lonlat_begin()
const = 0;
125 virtual std::unique_ptr<IteratorLonLat> lonlat_end()
const = 0;
130 virtual Config meshgenerator()
const;
131 virtual Config partitioner()
const;
135 virtual void print( std::ostream& )
const = 0;
138 friend std::ostream& operator<<( std::ostream& s,
const Grid& p ) {
148 mutable hash_t hash_;
154 mutable std::vector<GridObserver*> grid_observers_;
159 std::vector<const Grid*> registered_grids_;
162 void registerGrid(
const Grid& grid ) {
163 if ( std::find( registered_grids_.begin(), registered_grids_.end(), &grid ) == registered_grids_.end() ) {
164 registered_grids_.push_back( &grid );
165 grid.attachObserver( *
this );
168 void unregisterGrid(
const Grid& grid ) {
169 auto found = std::find( registered_grids_.begin(), registered_grids_.end(), &grid );
170 if ( found != registered_grids_.end() ) {
171 registered_grids_.erase( found );
172 grid.detachObserver( *
this );
176 for (
auto grid : registered_grids_ ) {
177 grid->detachObserver( *
this );
180 virtual void onGridDestruction(
Grid& ) = 0;
186 idx_t atlas__grid__Grid__size(
Grid* This );
188 void atlas__grid__Grid__uid(
const Grid* This,
char*& uid,
int& size );
189 Grid::Domain::Implementation* atlas__grid__Grid__lonlat_bounding_box(
const Grid* This );
const Domain & domain() const
Definition: Grid.h:104
Definition: Projection.h:49
const Projection & projection() const
Definition: Grid.h:113
virtual void print(std::ostream &) const =0
Fill provided me.
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
Configuration class used to construct various atlas components.
Definition: Config.h:27