44 #include <boost/noncopyable.hpp>
47 #include "GridDimensions.h"
87 template<
typename ValueType,
typename Po
intType>
96 void translate(std::vector<PointType>& pt);
167 template<
typename ValueType,
typename Po
intType>
168 ValueLayer<ValueType, PointType>::ValueLayer(
const std::string& name,
const GridDimensions& dimensions) :
169 BaseValueLayer(name), _dimensions(dimensions) {
172 template<
typename ValueType,
typename Po
intType>
174 for (
size_t i = 0; i < _dimensions.dimensionCount(); i++) {
175 pt[i] -= _dimensions.origin(i);
179 template<
typename ValueType,
typename Po
intType>
184 template<
typename ValueType,
typename Po
intType>
196 template<
typename ValueType,
typename Borders>
221 const ValueType& defaultValue = ValueType());
243 void set(
const ValueType& value,
const Point<int>& pt);
246 template<
typename ValueType,
typename Borders>
251 matrix =
new SparseMatrix<ValueType> (*(
dynamic_cast<SparseMatrix<ValueType>*
> (other)));
256 template<
typename ValueType,
typename Borders>
257 DiscreteValueLayer<ValueType, Borders>::DiscreteValueLayer(
const DiscreteValueLayer<ValueType, Borders>& other) :
258 ValueLayer<ValueType, int> (other.name(), other.dimensions()), _dense(other._dense), borders(other.dimensions()) {
259 create(_dense, other.matrix);
262 template<
typename ValueType,
typename Borders>
263 DiscreteValueLayer<ValueType, Borders>& DiscreteValueLayer<ValueType, Borders>::operator=(
const DiscreteValueLayer<
264 ValueType, Borders>& rhs) {
267 ValueLayer<ValueType, int>::_name = rhs.name();
268 ValueLayer<ValueType, int>::_dimensions = rhs.dimensions();
270 create(_dense, rhs.matrix);
271 borders = Borders(ValueLayer<ValueType, int>::_dimensions);
276 template<
typename ValueType,
typename Borders>
277 DiscreteValueLayer<ValueType, Borders>::~DiscreteValueLayer() {
281 template<
typename ValueType,
typename Borders>
283 bool dense,
const ValueType& defaultValue) :
289 std::vector<int> converted_coords;
290 for (
double d : coords) {
291 converted_coords.push_back(
static_cast<int>(d));
300 template<
typename ValueType,
typename Borders>
303 borders.transform(pt.
coords(), out);
309 template<
typename ValueType,
typename Borders>
312 borders.transform(pt.
coords(), out);
326 template<
typename ValueType,
typename Borders>
332 std::map<std::vector<double>, ValueType> values;
333 ValueType _defaultValue;
335 typedef typename std::map<std::vector<double>, ValueType>::iterator values_iter;
379 template<
typename ValueType,
typename Borders>
381 ValueLayer<ValueType, double> (other._name, other._dimensions), values(other.values), _defaultValue(
382 other._defaultValue), borders(other._dimensions) {
385 template<
typename ValueType,
typename Borders>
386 ContinuousValueLayer<ValueType, Borders>& ContinuousValueLayer<ValueType, Borders>::operator=(
387 const ContinuousValueLayer<ValueType, Borders>& rhs) {
391 values.insert(rhs.values.begin(), rhs.values.end());
392 ValueLayer<ValueType, double>::_name = rhs.
name();
393 ValueLayer<ValueType, double>::_dimensions = rhs.dimensions();
394 _defaultValue = rhs._defaultValue;
395 borders = Borders(ValueLayer<ValueType, int>::_dimensions);
400 template<
typename ValueType,
typename Borders>
402 const GridDimensions& dimensions,
const ValueType& defaultValue) :
403 ValueLayer<ValueType, double> (name, dimensions), _defaultValue(defaultValue), borders(
ValueLayer<ValueType, double>::_dimensions) {
406 template<
typename ValueType,
typename Borders>
409 borders.transform(pt.
coords(), out);
414 std::pair<values_iter, bool> res = values.insert(std::make_pair(out, _defaultValue));
415 return res.first->second;
418 template<
typename ValueType,
typename Borders>
421 borders.transform(pt.
coords(), out);