libqicore-api  2.4.3.28
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
behavior.hpp
Go to the documentation of this file.
1 
7 #ifndef QICORE_BEHAVIOR_H_
8 # define QICORE_BEHAVIOR_H_
9 
10 #include <qicore/api.hpp>
11 #include <qi/anyvalue.hpp>
12 #include <qi/anyobject.hpp>
13 #include <qi/session.hpp>
14 #include <qi/type/objecttypebuilder.hpp>
15 #include <qi/anymodule.hpp>
16 
17 #ifdef interface
18  #undef interface
19 #endif
20 namespace qilang {
21  class Node;
22  typedef boost::shared_ptr<Node> NodePtr;
23  typedef std::vector<NodePtr> NodePtrVector;
24 }
25 
26 namespace qi {
27 
29  {
30  typedef std::pair<std::string, std::string> Slot; // objectUid.methodName
31  typedef std::map<std::string, qi::AnyValue> ParameterMap;
32 
34  {
35  std::string uid;
36  std::string interface;
37  std::string factory;
39  };
40 
42  {
43  std::string uid;
44  Slot src; // uid.slot
45  Slot dst; // uid.slot
46  AnyValue filter; // will probably change
47  std::string toString()
48  {
49  return src.first + '.' + src.second + " -> " + dst.first + '.' + dst.second;
50  }
51  };
52 
53  typedef std::map<std::string, Node> NodeMap;
54  typedef std::map<std::string, Transition> TransitionMap;
57  std::string name;
58  void load(std::istream& is);
59  void clear();
60  };
61 
63  QICORE_API void displayModel(const BehaviorModel& model);
64 
65 }
66 
67 QI_TYPE_STRUCT(::qi::BehaviorModel, nodes, transitions, name);
68 QI_TYPE_STRUCT(::qi::BehaviorModel::Node, uid, interface, factory);
69 QI_TYPE_STRUCT(::qi::BehaviorModel::Transition, uid, src, dst, filter);
70 
71 
72 namespace qi {
73 
75  {
76  public:
77  typedef std::map<std::string, AnyObject> ObjectMap;
78  /* Two transision modes:
79  * - Direct: link is a link to a connect(source, target, targetMethod)
80  * - Intercept: debug mode, link is a connect(source, &Behavior::transition)
81  */
83  {
84  AnyObject source;
85  AnyObject target;
86  SignalLink link;
87  std::string property; // target property name
88  unsigned int targetMethod; // or target method id
89  bool debug;
90  };
91  typedef std::map<std::string, TransitionPtr> TransitionMap;
92 
93  public:
94  Behavior(qi::SessionPtr session): _session(session) {}
95  ~Behavior() { }
96  AnyObject makeObject(const std::string& model, const std::string& factory, const qi::BehaviorModel::ParameterMap& params);
97  void loadObjects(bool debugmode);
98  void unloadObjects();
99  void setTransitions(bool debugmode, qi::MetaCallType type = qi::MetaCallType_Auto);
100  void removeTransitions();
101  void loadFile(const std::string& path);
102  void loadString(const std::string& data);
103  AnyObject object(const std::string& name);
104  qi::AnyValue call(const std::string& objUid, const std::string& fun, std::vector<qi::AnyValue> args);
105 
107  qi::Signal<const std::string&, qi::AnyValue> onTransition;
109  qi::Signal<const std::string&, const std::string&> onTaskError;
111  qi::Signal<const std::string&, bool> onTaskRunning;
112 
113  public:
114  void setModel(const qi::BehaviorModel &model) { _model = model; }
115  qi::SessionPtr session() { return _session;};
116  qi::BehaviorModel& model() { return _model; };
117  ObjectMap& objects() { return _objects; };
118  TransitionMap& transitions() { return _transitions; };
119  //TODO: DOES NOT BUILD WITH BOTH const and non const
120  //const BehaviorModel& model() const { return _model; };
121  //const ObjectMap& objects() const { return _objects; };
122  //const TransitionMap& transitions() const { return _transitions; };
123 
124  public:
125  void start() { onStart(); }
126  void stop() {}
127 
128  qi::Signal<void> onStart;
129  qi::Signal<void> onStop;
130 
131  private:
132  void transition(qi::AnyValue argument, const std::string& transitionId);
133 
134  private:
135  typedef qi::SignalLink Link;
136  // hooks on running/error
137  typedef std::map<std::string, std::pair<SignalLink, SignalLink> > ObjectLinks;
138  ObjectLinks _objectLinks;
139  qi::BehaviorModel _model;
140  ObjectMap _objects;
141  TransitionMap _transitions;
142  qi::SessionPtr _session;
143  };
144 
145  QI_REGISTER_OBJECT(Behavior, loadObjects, unloadObjects, setTransitions, removeTransitions, loadFile, loadString, call, onTransition, model, objects, transitions, setModel, onTaskRunning, onTaskError, object, start, stop, onStart, onStop);
146 
147 }
148 
149 
150 
151 #endif
qi::BehaviorModel & model()
Definition: behavior.hpp:116
std::map< std::string, AnyObject > ObjectMap
Definition: behavior.hpp:77
QI_TYPE_STRUCT(::qi::BehaviorModel, nodes, transitions, name)
qi::Signal< void > onStop
Definition: behavior.hpp:129
std::pair< std::string, std::string > Slot
Definition: behavior.hpp:30
std::map< std::string, TransitionPtr > TransitionMap
Definition: behavior.hpp:91
std::map< std::string, Node > NodeMap
Definition: behavior.hpp:53
std::string interface
Definition: behavior.hpp:36
TransitionMap & transitions()
Definition: behavior.hpp:118
Behavior(qi::SessionPtr session)
Definition: behavior.hpp:94
qi::Signal< const std::string &, bool > onTaskRunning
Triggered when one of the tasks's running property changes state.
Definition: behavior.hpp:111
qi::Signal< void > onStart
Definition: behavior.hpp:128
void displayModel(const BehaviorModel &model)
TransitionMap transitions
Definition: behavior.hpp:56
QI_REGISTER_OBJECT(Behavior, loadObjects, unloadObjects, setTransitions, removeTransitions, loadFile, loadString, call, onTransition, model, objects, transitions, setModel, onTaskRunning, onTaskError, object, start, stop, onStart, onStop)
std::map< std::string, qi::AnyValue > ParameterMap
Definition: behavior.hpp:31
qi::SessionPtr session()
Definition: behavior.hpp:115
qi::Signal< const std::string &, qi::AnyValue > onTransition
Triggered when a transition occurrs, if transitions were set in debug mode.
Definition: behavior.hpp:107
qi::Signal< const std::string &, const std::string & > onTaskError
Triggered when one of the tasks enter/leave an error state.
Definition: behavior.hpp:109
ObjectMap & objects()
Definition: behavior.hpp:117
std::string name
Definition: behavior.hpp:57
std::map< std::string, Transition > TransitionMap
Definition: behavior.hpp:54
ParameterMap parameters
Definition: behavior.hpp:38
std::vector< NodePtr > NodePtrVector
Definition: behavior.hpp:23
void start()
Definition: behavior.hpp:125
void stop()
Definition: behavior.hpp:126
void setModel(const qi::BehaviorModel &model)
Definition: behavior.hpp:114
BehaviorModel loadBehaviorModel(const qilang::NodePtrVector &nodes)
boost::shared_ptr< Node > NodePtr
Definition: behavior.hpp:21
#define QICORE_API
Definition: api.hpp:14