15 #include "eckit/exception/Exceptions.h"
16 #include "eckit/types/Types.h"
19 using namespace eckit;
26 Span::Span(Offset start, Length length) :
32 void Span::extend(
const Span& other) {
34 if (start_ != other.
start_) {
38 for (
const auto& kv : other.
integerValues_) addValues(kv.first, kv.second);
39 for (
const auto& kv : other.
realValues_) addValues(kv.first, kv.second);
40 for (
const auto& kv : other.
stringValues_) addValues(kv.first, kv.second);
43 void Span::extend(Length length) {
53 ASSERT(realValues_.find(column) == realValues_.end());
54 ASSERT(stringValues_.find(column) == stringValues_.end());
55 integerValues_[column].insert(
static_cast<int64_t
>(
val));
60 ASSERT(integerValues_.find(column) == integerValues_.end());
61 ASSERT(stringValues_.find(column) == stringValues_.end());
62 realValues_[column].insert(
val);
66 ASSERT(realValues_.find(column) == realValues_.end());
67 ASSERT(integerValues_.find(column) == integerValues_.end());
68 const char*
c =
reinterpret_cast<const char*
>(&
val);
69 stringValues_[column].insert(std::string(
c, ::strnlen(
c,
sizeof(
double))));
76 ss <<
"Unsupported column type " << t <<
" found for column '" << column <<
"'";
77 throw SeriousBug(ss.str(), Here());
82 void Span::addValues(
const std::string& column,
const std::set<double>& vals) {
84 ASSERT(integerValues_.find(column) == integerValues_.end());
85 ASSERT(stringValues_.find(column) == stringValues_.end());
86 realValues_[column].insert(vals.cbegin(), vals.cend());
89 void Span::addValues(
const std::string& column,
const std::set<long>& vals) {
91 ASSERT(realValues_.find(column) == realValues_.end());
92 ASSERT(stringValues_.find(column) == stringValues_.end());
93 integerValues_[column].insert(vals.begin(), vals.end());
96 void Span::addValues(
const std::string& column,
const std::set<std::string>& vals) {
98 ASSERT(integerValues_.find(column) == integerValues_.end());
99 ASSERT(realValues_.find(column) == realValues_.end());
100 stringValues_[column].insert(vals.begin(), vals.end());
std::map< std::string, std::set< std::string > > stringValues_
std::map< std::string, std::set< long > > integerValues_
std::map< std::string, std::set< double > > realValues_