39 #include <boost/array.hpp>
40 #include <boost/functional/hash.hpp>
41 #include <boost/unordered/unordered_map.hpp>
46 #ifndef OPENMS_COMPARISON_CLUSTERING_HASHGRID_H
47 #define OPENMS_COMPARISON_CLUSTERING_HASHGRID_H
61 template <
typename Cluster>
79 typedef typename boost::unordered_multimap<ClusterCenter, Cluster>
CellContent;
84 typedef boost::unordered_map<CellIndex, CellContent>
Grid;
86 typedef typename CellContent::key_type
key_type;
95 public std::iterator<std::input_iterator_tag, value_type>
110 while (cell_it_ == grid_it_->second.end())
115 if (grid_it_ == grid_.end())
121 cell_it_ = grid_it_->second.begin();
127 grid_(grid), grid_it_(grid.
end())
130 Iterator(Grid & grid, grid_iterator grid_it, cell_iterator cell_it) :
131 grid_(grid), grid_it_(grid_it), cell_it_(cell_it)
154 {
return !(*
this == rhs); }
164 return grid_it_->first;
173 public std::iterator<std::input_iterator_tag, const value_type>
188 while (cell_it_ == grid_it_->second.end())
193 if (grid_it_ == grid_.end())
199 cell_it_ = grid_it_->second.begin();
205 grid_(grid), grid_it_(grid.
end())
208 ConstIterator(
const Grid & grid, grid_iterator grid_it, cell_iterator cell_it) :
209 grid_(grid), grid_it_(grid_it), cell_it_(cell_it)
215 grid_(it.grid_), grid_it_(it.grid_it_), cell_it_(it.cell_it_)
236 {
return !(*
this == rhs); }
246 return grid_it_->first;
278 cell_dimension(cell_dimension),
279 grid_dimension(grid_dimension_)
287 cell_iterator
insert(
const value_type & v)
290 CellContent & cell = cells_[cellkey];
292 return cell.insert(v);
300 CellContent & cell = pos.
grid_it_->second;
309 size_type
erase(
const key_type & key)
314 CellContent & cell = cells_.at(cellkey);
315 return cell.erase(key);
317 catch (std::out_of_range &) {}
331 grid_iterator grid_it = cells_.begin();
332 if (grid_it == cells_.end())
return end();
334 cell_iterator cell_it = grid_it->second.begin();
335 return iterator(cells_, grid_it, cell_it);
343 const_grid_iterator grid_it = cells_.begin();
344 if (grid_it == cells_.end())
return end();
346 const_cell_iterator cell_it = grid_it->second.begin();
361 const_iterator
end()
const
383 ret += it->second.size();
392 const_grid_iterator
grid_begin()
const {
return cells_.begin(); }
397 const_grid_iterator
grid_end()
const {
return cells_.end(); }
402 const typename Grid::mapped_type &
grid_at(
const CellIndex & x)
const {
return cells_.at(x); }
415 typename Grid::mapped_type &
grid_at(
const CellIndex & x) {
return cells_.at(x); }
424 for (; it != ret.
end(); ++it, ++lit, ++rit)
426 double t = std::floor(*lit / *rit);
427 if (t < std::numeric_limits<Int64>::min() || t > std::numeric_limits<Int64>::max())
throw Exception::OutOfRange(__FILE__, __LINE__, __PRETTY_FUNCTION__);
428 *it =
static_cast<Int64>(t);
437 for (; it_new != d.
end(); ++it_new, ++it_cur)
439 if (*it_cur < *it_new)
447 template <UInt N,
typename T>
450 boost::hash<T> hasher;
451 std::size_t hash = 0;
Iterator(Grid &grid, grid_iterator grid_it, cell_iterator cell_it)
Definition: HashGrid.h:130
HashGrid(const ClusterCenter &cell_dimension)
Definition: HashGrid.h:275
Container for (2-dimensional coordinate, value) pairs.
Definition: HashGrid.h:62
Grid & grid_
Definition: HashGrid.h:103
CellContent::iterator cell_iterator
Definition: HashGrid.h:101
Grid::iterator grid_iterator
Definition: HashGrid.h:100
const CoordinateType * const_iterator
Definition: DPosition.h:77
CellContent::const_iterator const_cell_iterator
Definition: HashGrid.h:256
Out of range exception.
Definition: Exception.h:320
boost::unordered_map< CellIndex, CellContent > Grid
Map of (cell-index, cell-content).
Definition: HashGrid.h:84
ConstIterator(const Grid &grid, grid_iterator grid_it, cell_iterator cell_it)
Definition: HashGrid.h:208
DPosition< 2, Int64 > CellIndex
Index for cells.
Definition: HashGrid.h:74
cell_iterator insert(const value_type &v)
Inserts a (2-dimensional coordinate, value) pair.
Definition: HashGrid.h:287
bool empty() const
Return true if HashGrid is empty.
Definition: HashGrid.h:369
const Grid & grid_
Definition: HashGrid.h:181
grid_iterator grid_it_
Definition: HashGrid.h:104
grid_iterator grid_begin()
Definition: HashGrid.h:407
const_grid_iterator grid_end() const
Returns iterator to on after last grid cell.
Definition: HashGrid.h:397
const value_type & operator*() const
Definition: HashGrid.h:238
ConstIterator const_iterator
Definition: HashGrid.h:252
void updateGridDimension_(const CellIndex &d)
Definition: HashGrid.h:433
Iterator iterator
Definition: HashGrid.h:253
std::size_t hash_value(const DPosition< N, T > &b)
Definition: HashGrid.h:448
Iterator operator++(int)
Definition: HashGrid.h:143
boost::unordered_multimap< ClusterCenter, Cluster > CellContent
Contents of a cell.
Definition: HashGrid.h:79
Grid::const_iterator grid_iterator
Definition: HashGrid.h:178
CellContent::key_type key_type
Definition: HashGrid.h:86
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
ConstIterator(const Iterator &it)
Definition: HashGrid.h:214
const CellIndex & grid_dimension
Upper-right corner of key space for cells.
Definition: HashGrid.h:272
Constant element iterator for the hash grid.
Definition: HashGrid.h:172
cell_iterator cell_it_
Definition: HashGrid.h:105
Grid cells_
Definition: HashGrid.h:261
iterator begin()
Returns iterator to first element.
Definition: HashGrid.h:329
ConstIterator & operator++()
Definition: HashGrid.h:218
CellContent::value_type value_type
Definition: HashGrid.h:88
ConstIterator end() const
Non-mutable end iterator.
Definition: DPosition.h:395
CoordinateType * iterator
Definition: DPosition.h:76
void searchNextCell_()
Definition: HashGrid.h:186
CellIndex grid_dimension_
Definition: HashGrid.h:262
Representation of a coordinate in D-dimensional space.
Definition: DPosition.h:54
const_grid_iterator grid_begin() const
Returns iterator to first grid cell.
Definition: HashGrid.h:392
void searchNextCell_()
Definition: HashGrid.h:108
const value_type * operator->() const
Definition: HashGrid.h:241
value_type * operator->() const
Definition: HashGrid.h:159
void clear()
Clears the map.
Definition: HashGrid.h:324
grid_iterator grid_end()
Definition: HashGrid.h:411
const CellIndex index() const
Definition: HashGrid.h:244
Grid::mapped_type & grid_at(const CellIndex &x)
Definition: HashGrid.h:415
bool operator!=(const ConstIterator &rhs) const
Definition: HashGrid.h:235
bool operator==(const Iterator &rhs) const
Definition: HashGrid.h:150
ConstIterator(const Grid &grid)
Definition: HashGrid.h:204
CellIndex cellindexAtClustercenter_(const ClusterCenter &key)
Definition: HashGrid.h:419
const_iterator begin() const
Returns iterator to first element.
Definition: HashGrid.h:341
bool operator==(const ConstIterator &rhs) const
Definition: HashGrid.h:232
Element iterator for the hash grid.
Definition: HashGrid.h:94
Grid::iterator grid_iterator
Definition: HashGrid.h:255
DPosition< 2, double > ClusterCenter
Coordinate for stored pairs.
Definition: HashGrid.h:69
const_iterator end() const
Returns iterator to first element.
Definition: HashGrid.h:361
CellContent::size_type size_type
Definition: HashGrid.h:258
size_type erase(const key_type &key)
Erases elements matching the 2-dimensional coordinate.
Definition: HashGrid.h:309
CellContent::mapped_type mapped_type
Definition: HashGrid.h:87
const CellIndex index() const
Definition: HashGrid.h:162
grid_iterator grid_it_
Definition: HashGrid.h:182
OPENMS_INT64_TYPE Int64
Signed integer type (64bit)
Definition: Types.h:64
Iterator(Grid &grid)
Definition: HashGrid.h:126
bool operator!=(const Iterator &rhs) const
Definition: HashGrid.h:153
const ClusterCenter cell_dimension
Dimension of cells.
Definition: HashGrid.h:268
CellContent::const_iterator cell_iterator
Definition: HashGrid.h:179
size_type size() const
Return number of elements.
Definition: HashGrid.h:377
Grid::const_iterator const_grid_iterator
Definition: HashGrid.h:254
ConstIterator operator++(int)
Definition: HashGrid.h:225
Iterator & operator++()
Definition: HashGrid.h:136
void erase(iterator pos)
Erases element on given iterator.
Definition: HashGrid.h:298
CellContent::iterator cell_iterator
Definition: HashGrid.h:257
value_type & operator*() const
Definition: HashGrid.h:156
iterator end()
Returns iterator to first element.
Definition: HashGrid.h:353
ConstIterator begin() const
Non-mutable begin iterator.
Definition: DPosition.h:389
cell_iterator cell_it_
Definition: HashGrid.h:183
const Grid::mapped_type & grid_at(const CellIndex &x) const
Returns the grid cell at given index.
Definition: HashGrid.h:402