Menge
Modular Pedestrian Simulation Framework for Research and Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ObstacleAction.h
Go to the documentation of this file.
1 /*
2 
3 License
4 
5 Menge
6 Copyright and trademark 2012-14 University of North Carolina at Chapel Hill.
7 All rights reserved.
8 
9 Permission to use, copy, modify, and distribute this software and its documentation
10 for educational, research, and non-profit purposes, without fee, and without a
11 written agreement is hereby granted, provided that the above copyright notice,
12 this paragraph, and the following four paragraphs appear in all copies.
13 
14 This software program and documentation are copyrighted by the University of North
15 Carolina at Chapel Hill. The software program and documentation are supplied "as is,"
16 without any accompanying services from the University of North Carolina at Chapel
17 Hill or the authors. The University of North Carolina at Chapel Hill and the
18 authors do not warrant that the operation of the program will be uninterrupted
19 or error-free. The end-user understands that the program was developed for research
20 purposes and is advised not to rely exclusively on the program for any reason.
21 
22 IN NO EVENT SHALL THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL OR THE AUTHORS
23 BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
24 DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
25 DOCUMENTATION, EVEN IF THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL OR THE
26 AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 
28 THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND THE AUTHORS SPECIFICALLY
29 DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
30 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY STATUTORY WARRANTY
31 OF NON-INFRINGEMENT. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
32 THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND THE AUTHORS HAVE NO OBLIGATIONS
33 TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
34 
35 Any questions or comments should be sent to the authors {menge,geom}@cs.unc.edu
36 
37 */
38 
45 #ifndef __OBSTACLE_ACTION_H__
46 #define __OBSTACLE_ACTION_H__
47 
48 #include "CoreConfig.h"
49 #include "Action.h"
50 #include "Actions/ActionFactory.h"
51 #include "fsmCommon.h"
52 #include "FSMEnumeration.h"
53 #include <map>
54 #include "SimpleLock.h"
55 
56 // forward declaration
57 
58 namespace Menge {
59 
60  namespace Agents {
61  class BaseAgent;
62  }
63 
64  namespace BFSM {
65  // forward declaration
66  class ObstacleActFactory;
67 
73  class MENGE_API ObstacleAction : public Action {
74  public:
79 
83  virtual ~ObstacleAction();
84 
91  virtual void onEnter( Agents::BaseAgent * agent );
92 
93  friend class ObstacleActFactory;
94  protected:
95 
101  virtual void leaveAction( Agents::BaseAgent * agent );
102 
109  virtual size_t newValue( size_t value ) = 0;
110 
114  size_t _setOperand;
115 
120  std::map< size_t, size_t > _originalMap;
121 
126  };
127 
129 
136  class MENGE_API ObstacleActFactory : public ActionFactory {
137  public:
142 
143  protected:
162  virtual bool setFromXML( Action * action, TiXmlElement * node, const std::string & behaveFldr ) const;
163 
167  size_t _operandID;
168  };
169 
171 
176  class MENGE_API RemoveObstacleSetAction : public ObstacleAction {
177  public:
184  virtual size_t newValue( size_t value );
185  };
186 
188 
192  class MENGE_API RemoveObstacleActFactory : public ObstacleActFactory {
193  public:
198 
207  virtual const char * name() const { return "remove_obstacle"; }
208 
216  virtual const char * description() const {
217  return "Removes the specified obstacle set from the agents consideration";
218  };
219 
220  protected:
231  Action * instance() const { return new RemoveObstacleSetAction(); }
232  };
233 
235 
240  class MENGE_API AddObstacleSetAction : public ObstacleAction {
241  public:
248  virtual size_t newValue( size_t value );
249  };
250 
252 
256  class MENGE_API AddObstacleyActFactory : public ObstacleActFactory {
257  public:
262 
271  virtual const char * name() const { return "add_obstacle"; }
272 
280  virtual const char * description() const {
281  return "Adds the specified obstacle set from the agents consideration";
282  };
283 
284  protected:
295  Action * instance() const { return new AddObstacleSetAction(); }
296  };
297 
299 
304  class MENGE_API SetObstacleSetAction : public ObstacleAction {
305  public:
312  virtual size_t newValue( size_t value );
313  };
314 
316 
320  class MENGE_API SetObstacleActFactory : public ObstacleActFactory {
321  public:
326 
335  virtual const char * name() const { return "set_obstacle"; }
336 
344  virtual const char * description() const {
345  return "Sets the specified obstacle set from the agents consideration";
346  };
347 
348  protected:
359  Action * instance() const { return new SetObstacleSetAction(); }
360  };
361 
362  } // namespace BFSM
363 
364 } // namespace Menge
365 #endif // __OBSTACLE_ACTION_H__
Modifies the agent's obstacle set by ADDING the given obstacle set value.
Definition: ObstacleAction.h:240
The definition of a simple thrading lock.
Action * instance() const
Create an instance of this class's action.
Definition: ObstacleAction.h:295
The core namespace. All elements of Menge are contained in this namespace.
Definition: AgentGenerator.cpp:43
RemoveObstacleActFactory()
Constructor.
Definition: ObstacleAction.h:197
Sets up the proper compiler directives for platform and dll export/import.
Factory for the ObstacleActFactory.
Definition: ObstacleAction.h:256
virtual const char * description() const
A description of the action.
Definition: ObstacleAction.h:344
The base class for modifying agent obstacle sets.
Definition: ObstacleAction.h:73
The definition of a simple mutex-style lock.
Definition: SimpleLock.h:62
Factory for the SetObstacleSetAction.
Definition: ObstacleAction.h:320
The definition of actions that are taken as agents enter states.
virtual const char * name() const
The name of the action.
Definition: ObstacleAction.h:271
Action * instance() const
Create an instance of this class's action.
Definition: ObstacleAction.h:231
std::map< size_t, size_t > _originalMap
A mapping from agent id to the agent's obstacle set value before the action was applied.
Definition: ObstacleAction.h:120
SetObstacleActFactory()
Constructor.
Definition: ObstacleAction.h:325
Factory for the ObstacleAction.
Definition: ObstacleAction.h:136
size_t _operandID
The identifier for the "operand" size_t attribute.
Definition: ObstacleAction.h:167
The factory for parsing xml data and instantiating actions.
virtual const char * name() const
The name of the action.
Definition: ObstacleAction.h:335
virtual const char * description() const
A description of the action.
Definition: ObstacleAction.h:280
virtual const char * description() const
A description of the action.
Definition: ObstacleAction.h:216
Factory for the RemoveObstacleSetAction.
Definition: ObstacleAction.h:192
The namespace contains the Behavior Finite State Machine (BFSM) definition.
Modifies the agent's obstacle set by REMOVING the given obstacle set value.
Definition: ObstacleAction.h:176
The abstract definition of an action.
Definition: Action.h:78
Collection of convenient pre-compiler information for fsm definitions.
size_t _setOperand
The set operand to apply to the agents obstacle set.
Definition: ObstacleAction.h:114
Defines the basic agent properties and functionality that all simulation agents share.
Definition: BaseAgent.h:123
Enumerated types for the State class.
Modifies the agent's obstacle set by SETTING the given obstacle set value (i.e. overriding the old va...
Definition: ObstacleAction.h:304
A class for parsing the xml description of an action and instantiating particular instances...
Definition: ActionFactory.h:62
The namespace that contains the basic simulation mechanisms.
Action * instance() const
Create an instance of this class's action.
Definition: ObstacleAction.h:359
AddObstacleyActFactory()
Constructor.
Definition: ObstacleAction.h:261
SimpleLock _lock
Lock for guaranteeing thread-safety.
Definition: ObstacleAction.h:125
virtual const char * name() const
The name of the action.
Definition: ObstacleAction.h:207