Program Listing for File checks.hpp¶
↰ Return to documentation for file (include/nix/valid/checks.hpp)
// Copyright (c) 2013, German Neuroinformatics Node (G-Node)
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted under the terms of the BSD License. See
// LICENSE file in the root of the Project.
#ifndef NIX_CHECKS_H
#define NIX_CHECKS_H
#include <nix/util/util.hpp>
#include <nix/valid/helper.hpp>
#include <nix/base/IDimensions.hpp>
#include <nix/types.hpp>
#include <boost/optional.hpp>
#include <boost/any.hpp>
namespace nix {
namespace valid {
struct notGreater {
const double value;
template<typename T>
notGreater(T value) : value(static_cast<double>(value)) {}
template<typename T2>
bool operator()(const T2 &val) const {
return !(static_cast<double>(val) > value);
}
};
struct isGreater {
const double value;
template<typename T>
isGreater(T value) : value(static_cast<double>(value)) {}
template<typename T2>
bool operator()(const T2 &val) const {
return static_cast<double>(val) > value;
}
};
struct notSmaller {
const double value;
template<typename T>
notSmaller(T value) : value(static_cast<double>(value)) {}
template<typename T2>
bool operator()(const T2 &val) const {
return !(static_cast<double>(val) < value);
}
};
struct isSmaller {
const double value;
template<typename T>
isSmaller(T value) : value(static_cast<double>(value)) {}
template<typename T2>
bool operator()(const T2 &val) const {
return static_cast<double>(val) < value;
}
};
template<typename T>
struct notEqual {
const T value;
notEqual(T value) : value(value) {}
template<typename T2>
bool operator()(const T2 &val) const {
return value != val;
}
};
template<typename T>
struct isEqual {
const T value;
isEqual(T value) : value(value) {}
template<typename T2>
bool operator()(const T2 &val) const {
return value == val;
}
};
// needed because: for bizarre reasons bool converts to int when compared to boost::optional
template<>
struct isEqual<bool> {
const bool value;
isEqual(bool value) : value(value) {}
template<typename T2>
bool operator()(const T2 &val) const {
return value ? !!val : !val;
}
};
struct notFalse {
// WARNING: enum will convert via int, which means 0 = false !
template<typename T>
bool operator()(const T &val) const {
return !!val;
}
};
struct isFalse {
// WARNING: enum will convert via int, which means 0 = false !
template<typename T>
bool operator()(const T &val) const {
return !val;
}
};
struct notEmpty {
template<typename T>
bool operator()(const T &val) const {
return !(val.empty());
}
};
struct isEmpty {
template<typename T>
bool operator()(const T &val) const {
return val.empty();
}
};
struct isUnit {
typedef std::function<bool(std::string)> TPRED;
virtual bool operator()(const std::string &u) const = 0;
bool operator()(const boost::optional<std::string> &u) const {
// note: relying on short-curcuiting here
return u && (*this)(*u);
}
bool operator()(const std::vector<std::string> &u, TPRED obj) const {
// if test succeeds find_if_not will not find anything & return it == end
return std::find_if_not(u.begin(), u.end(), obj) == u.end();
}
virtual ~isUnit() { }
};
struct isValidUnit : public isUnit {
bool operator()(const std::string &u) const {
return (util::isSIUnit(u) || util::isCompoundSIUnit(u));
}
bool operator()(const boost::optional<std::string> &u) const {
return isUnit::operator()(u);
}
bool operator()(const std::vector<std::string> &u) const {
return isUnit::operator()(u, *this);
}
};
struct isAtomicUnit : public isUnit {
bool operator()(const std::string &u) const {
return util::isSIUnit(u);
}
bool operator()(const boost::optional<std::string> &u) const {
return isUnit::operator()(u);
}
bool operator()(const std::vector<std::string> &u) const {
return isUnit::operator()(u, *this);
}
};
struct isCompoundUnit : public isUnit {
bool operator()(const std::string &u) const {
return util::isCompoundSIUnit(u);
}
bool operator()(const boost::optional<std::string> &u) const {
return isUnit::operator()(u);
}
bool operator()(const std::vector<std::string> &u) const {
return isUnit::operator()(u, *this);
}
};
struct isSet {
template<typename T>
bool operator()(const T &val) const {
typedef typename std::conditional<hasEmpty<T>::value, notEmpty, notFalse>::type subCheck;
return subCheck(val);
}
};
struct isSorted {
template<typename T>
bool operator()(const T &container) const {
return std::is_sorted(container.begin(), container.end());
}
};
struct NIXAPI dimEquals {
size_t value;
dimEquals(const size_t &value) : value(value) {}
bool operator()(const DataArray &array) const;
};
struct NIXAPI tagUnitsMatchRefsUnits {
std::vector<std::string> units;
tagUnitsMatchRefsUnits(const std::vector<std::string> &units) : units(units) {}
bool operator()(const std::vector<DataArray> &references) const;
};
struct NIXAPI dimTicksMatchData {
const DataArray &data;
dimTicksMatchData(const DataArray &data) : data(data) {}
bool operator()(const std::vector<Dimension> &dims) const;
};
struct NIXAPI dimLabelsMatchData {
const DataArray &data;
dimLabelsMatchData(const DataArray &data) : data(data) {}
bool operator()(const std::vector<Dimension> &dims) const;
};
struct NIXAPI dimDataFrameTicksMatchData {
const DataArray &data;
dimDataFrameTicksMatchData(const DataArray &data) : data(data) {}
bool operator()(const std::vector<Dimension> &dims) const;
};
} // namespace valid
} // namespace nix
#endif // NIX_CHECKS_H