ComSDK
 Указатель Классы Пространства имен Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Группы Страницы
predicate.h
1 #ifndef __PREDICATE_H__
2 #define __PREDICATE_H__
3 
4 #include "anymap.h"
5 #include "action_item_executor.h"
6 
7 namespace com {
8  namespace graph {
9  class Edge;
15  class MAC_DLLEXPORT Predicate {
16  public:
17  virtual ~Predicate(){}
18 
20  virtual std::shared_ptr< Edge > getOutputEdge(const Anymap& val) const = 0;
21 
23  virtual std::vector< std::shared_ptr<Edge> > getAssignedEdges() const = 0;
24  };
25 
31  class MAC_DLLEXPORT PassPredicate : public Predicate {
32  public:
33  PassPredicate(){}
34 
35  virtual std::shared_ptr< Edge > getOutputEdge(const Anymap& val) const {
36  return m_edge;
37  }
38 
39  virtual std::vector< std::shared_ptr<Edge> > getAssignedEdges() const {
40  return {m_edge};
41  }
42 
44  void setEdge(std::shared_ptr< Edge > edge) {
45  m_edge = edge;
46  }
47 
48  private:
49  std::shared_ptr< Edge > m_edge;
50  };
51 
57  class MAC_DLLEXPORT BooleanPredicate : public Predicate {
58  public:
59  typedef std::function<bool (const Anymap&)> BooleanPredicateMap;
60 
61  public:
63  BooleanPredicate(BooleanPredicateMap map);
64  virtual ~BooleanPredicate(){}
65 
66  virtual std::shared_ptr< Edge > getOutputEdge(const Anymap& val) const;
67  virtual std::vector< std::shared_ptr<Edge> > getAssignedEdges() const;
68 
70  bool setOutputEdge(std::shared_ptr< Edge > Edge, bool val);
71 
73  void setMap(BooleanPredicateMap map);
74 
75  public:
76  static std::shared_ptr<BooleanPredicate> fromActionItemExecutor(std::shared_ptr<sys::ActionItemExecutor> aiExec);
77 
78  private:
79  std::shared_ptr<Edge> m_onFalseEdge;
80  std::shared_ptr<Edge> m_onTrueEdge;
81  BooleanPredicateMap m_map;
82  };
83  }
84 }
85 
86 #endif
virtual std::vector< std::shared_ptr< Edge > > getAssignedEdges() const
Возвращает все ребра, привязанные к предикату
Definition: predicate.h:39
virtual std::shared_ptr< Edge > getOutputEdge(const Anymap &val) const
Возвращает ребро по значению данных val.
Definition: predicate.h:35
Definition: edge.h:20
Бинарный предикат
Definition: predicate.h:57
Мультитиповой словарь
Definition: anymap.h:79
void setEdge(std::shared_ptr< Edge > edge)
Задает ребро
Definition: predicate.h:44
Простой (пропускной) предикат
Definition: predicate.h:31
Предикат графа
Definition: predicate.h:15