IODA Bundle
Span.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 1996-2012 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 nor
8  * does it submit to any jurisdiction.
9  */
10 
11 #ifndef odc_core_Span_H
12 #define odc_core_Span_H
13 
14 #include <set>
15 #include <map>
16 #include <string>
17 
18 #include "eckit/io/Length.h"
19 #include "eckit/io/Offset.h"
20 
21 #include "odc/api/ColumnType.h"
22 
23 namespace odc {
24 namespace core {
25 
26 //----------------------------------------------------------------------------------------------------------------------
27 
28 // Describe the data extent, and the keys, spanned by an ODB
29 
30 class Span {
31 
32 public: // methods
33 
34  Span(eckit::Offset start, eckit::Length length);
35  ~Span();
36 
37  eckit::Offset offset() const { return start_; }
38  eckit::Length length() const { return length_; }
39 
40  void extend(const Span& other);
41  void extend(eckit::Length length);
42 
43  // Add the values _as_a_double_. Not nice, but compatible with old decoding api
44  void addValue(const std::string& column, api::ColumnType t, double val);
45 
46  void addValues(const std::string& column, const std::set<long>& vals);
47  void addValues(const std::string& column, const std::set<double>& vals);
48  void addValues(const std::string& column, const std::set<std::string>& vals);
49 
50  template <typename T>
51  void visit(T& visitor) {
52  for (const auto& kv : integerValues_) visitor(kv.first, kv.second);
53  for (const auto& kv : realValues_) visitor(kv.first, kv.second);
54  for (const auto& kv : stringValues_) visitor(kv.first, kv.second);
55  }
56 
57 private: // members
58 
59  eckit::Offset start_;
60  eckit::Length length_;
61 
62  std::map<std::string, std::set<long>> integerValues_;
63  std::map<std::string, std::set<double>> realValues_;
64  std::map<std::string, std::set<std::string>> stringValues_;
65 };
66 
67 //----------------------------------------------------------------------------------------------------------------------
68 
69 } // namespace core
70 } // namespace odc
71 
72 #endif
73 
std::map< std::string, std::set< std::string > > stringValues_
Definition: Span.h:64
void extend(const Span &other)
Definition: Span.cc:32
Span(eckit::Offset start, eckit::Length length)
eckit::Length length_
Definition: Span.h:60
void visit(T &visitor)
Definition: Span.h:51
eckit::Offset offset() const
Definition: Span.h:37
eckit::Offset start_
Definition: Span.h:59
void addValue(const std::string &column, api::ColumnType t, double val)
Definition: Span.cc:47
std::map< std::string, std::set< long > > integerValues_
Definition: Span.h:62
void addValues(const std::string &column, const std::set< long > &vals)
Definition: Span.cc:89
std::map< std::string, std::set< double > > realValues_
Definition: Span.h:63
void extend(eckit::Length length)
eckit::Length length() const
Definition: Span.h:38
Definition: ColumnInfo.h:23