RepastHPC  2.3.1
SingleOccupancy.h
1 /*
2  * Repast for High Performance Computing (Repast HPC)
3  *
4  * Copyright (c) 2010 Argonne National Laboratory
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with
8  * or without modification, are permitted provided that the following
9  * conditions are met:
10  *
11  * Redistributions of source code must retain the above copyright notice,
12  * this list of conditions and the following disclaimer.
13  *
14  * Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  *
18  * Neither the name of the Argonne National Laboratory nor the names of its
19  * contributors may be used to endorse or promote products derived from
20  * this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
25  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTEES OR
26  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
32  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  *
34  *
35  * SingleOccupancy.h
36  *
37  * Created on: Aug 11, 2010
38  * Author: nick
39  */
40 
41 #ifndef SINGLEOCCUPANCY_H_
42 #define SINGLEOCCUPANCY_H_
43 
44 #include <boost/unordered_map.hpp>
45 #include <boost/shared_ptr.hpp>
46 
47 #include "Point.h"
48 
49 namespace repast {
50 
59 template<typename T, typename GPType>
61 
62 private:
63  typedef typename boost::unordered_map<Point<GPType> , boost::shared_ptr<T>, HashGridPoint<GPType> > LocationMap;
64  typedef typename LocationMap::iterator LocationMapIter;
65  typedef typename LocationMap::const_iterator LocationMapConstIter;
66 
67  LocationMap locations;
68 
69 public:
70 
78  T* get(const Point<GPType>& location) const;
79 
86  void getAll(const Point<GPType>& location, std::vector<T*>& out) const;
87 
94  bool put(boost::shared_ptr<T>& agent, const Point<GPType>& location);
95 
102  void remove(boost::shared_ptr<T>& agent, const Point<GPType>& location);
103 
104 };
105 
106 template<typename T, typename GPType>
108  LocationMapConstIter iter = locations.find(location);
109  if (iter == locations.end())
110  return NULL;
111  return iter->second.get();
112 }
113 
114 template<typename T, typename GPType>
115 void SingleOccupancy<T, GPType>::getAll(const Point<GPType>& location, std::vector<T*>& out) const {
116  T* agent = get(location);
117  if (agent != NULL) {
118  out.push_back(agent);
119  }
120 }
121 
122 template<typename T, typename GPType>
123 bool SingleOccupancy<T, GPType>::put(boost::shared_ptr<T>& agent, const Point<GPType>& location) {
124  LocationMapIter iter = locations.find(location);
125  // already occupied
126  if (iter != locations.end())
127  return false;
128  locations[location] = agent;
129  return true;
130 }
131 
132 template<typename T, typename GPType>
133 void SingleOccupancy<T, GPType>::remove(boost::shared_ptr<T>& agent, const Point<GPType>& location) {
134  locations.erase(location);
135 }
136 
137 }
138 
139 #endif /* SINGLEOCCUPANCY_H_ */
repast::SingleOccupancy::get
T * get(const Point< GPType > &location) const
Gets the object found at the specified location.
Definition: SingleOccupancy.h:107
repast::HashGridPoint
Class that allows retrieval of hash value for Point objects.
Definition: Point.h:67
repast::SingleOccupancy::remove
void remove(boost::shared_ptr< T > &agent, const Point< GPType > &location)
Removes the specified item from the specified location.
Definition: SingleOccupancy.h:133
repast::SingleOccupancy::put
bool put(boost::shared_ptr< T > &agent, const Point< GPType > &location)
Puts the specified item at the specified location.
Definition: SingleOccupancy.h:123
repast::SingleOccupancy
Single Occupancy cell accessor for accessing the occupants of locations in a Grid.
Definition: SingleOccupancy.h:60
repast::Point< GPType >
repast::SingleOccupancy::getAll
void getAll(const Point< GPType > &location, std::vector< T * > &out) const
Gets the item found at the specified location.
Definition: SingleOccupancy.h:115