48 #include <boost/shared_ptr.hpp>
49 #include <boost/noncopyable.hpp>
50 #include <boost/serialization/serialization.hpp>
51 #include <boost/serialization/export.hpp>
52 #include <boost/serialization/set.hpp>
65 friend class boost::serialization::access;
72 template<
class Archive>
73 void serialize(Archive& ar,
const unsigned int version) {
79 virtual bool isEmpty(){
return false; }
89 template<
typename Datum>
91 friend class boost::serialization::access;
98 data.assign(projectionData.begin(), projectionData.end());
101 data.assign(projectionData.begin(), projectionData.end());
106 template<
class Archive>
107 void serialize(Archive& ar,
const unsigned int version) {
108 ar & boost::serialization::base_object<ProjectionInfoPacket>(*
this);
112 std::vector<Datum> data;
114 virtual bool isEmpty(){
return (data.size() == 0); }
132 virtual bool addAgent(boost::shared_ptr<T> agent) = 0;
133 virtual void removeAgent(T* agent) = 0;
137 std::set<int> filter;
140 virtual ProjectionInfoPacket* getProjectionInfo(
AgentId id,
bool secondaryInfo =
false, std::set<AgentId>* secondaryIds = 0,
int destProc = -1 ) = 0;
146 enum RADIUS{ PRIMARY, SECONDARY };
164 const std::string
name()
const {
208 return ( (filter.size() == 0) ||
209 (filter.find(agent->getId().agentType()) != filter.end()));
273 virtual void getRequiredAgents(std::set<AgentId>& agentsToTest, std::set<AgentId>& agentsRequired, RADIUS radius = PRIMARY) = 0;
281 virtual void getAgentsToPush(std::set<AgentId>& agentsToTest, std::map<
int, std::set<AgentId> >& agentsToPush) = 0;
288 virtual void getProjectionInfo(std::vector<AgentId>& agents, std::vector<ProjectionInfoPacket*>& packets,
289 bool secondaryInfo =
false, std::set<AgentId>* secondaryIds = 0,
int destProc = -1);
295 void updateProjectionInfo(std::vector<ProjectionInfoPacket*>& pips,
Context<T>* context);
297 virtual void cleanProjectionInfo(std::set<AgentId>& agentsToKeep) = 0;
299 virtual void balance(){};
306 bool secondaryInfo, std::set<AgentId>* secondaryIds,
int destProc){
307 for(std::vector<AgentId>::const_iterator iter = agents.begin(), iterEnd = agents.end(); iter != iterEnd; iter++){
308 ProjectionInfoPacket* packet = getProjectionInfo((*iter), secondaryInfo, secondaryIds, destProc);
309 if((packet != 0) && (!packet->isEmpty())) packets.push_back(packet);
315 for(std::vector<ProjectionInfoPacket*>::const_iterator pipIter = pips.begin(), pipIterEnd = pips.end(); pipIter != pipIterEnd; pipIter++){
316 updateProjectionInfo(*pipIter, context);