![]() |
libsesstype
2.0.0
Library for Session Types programming.
|
00001 #ifndef SESSTYPE__PARAMETERISED__EXPR__SEQ_H__ 00002 #define SESSTYPE__PARAMETERISED__EXPR__SEQ_H__ 00003 00004 #ifdef __cplusplus 00005 #include <iterator> 00006 #include <vector> 00007 #endif 00008 00009 #include "sesstype/parameterised/expr.h" 00010 00011 #ifdef __cplusplus 00012 namespace sesstype { 00013 namespace parameterised { 00014 #endif 00015 00016 #ifdef __cplusplus 00017 00020 class SeqExpr : public Expr { 00021 std::vector<int> vals_; 00022 00023 public: 00024 typedef std::vector<int> SequenceContainer; 00025 00027 SeqExpr() : Expr(ST_EXPR_SEQ), vals_() { } 00028 00030 SeqExpr(const SeqExpr &expr) : Expr(ST_EXPR_SEQ), vals_(expr.vals_) { } 00031 00033 SeqExpr *clone() const override 00034 { 00035 return new SeqExpr(*this); 00036 } 00037 00039 int value(unsigned int idx) const 00040 { 00041 return vals_.at(idx); 00042 } 00043 00045 unsigned int num_values() const 00046 { 00047 return vals_.size(); 00048 } 00049 00052 void append_value(int value) 00053 { 00054 vals_.push_back(value); 00055 } 00056 00058 SequenceContainer::const_iterator seq_begin() const 00059 { 00060 return vals_.begin(); 00061 } 00062 00064 SequenceContainer::const_iterator seq_end() const 00065 { 00066 return vals_.end(); 00067 } 00068 00069 virtual void accept(util::ExprVisitor &v) override; 00070 }; 00071 #endif // __cplusplus 00072 00073 #ifdef __cplusplus 00074 extern "C" { 00075 #endif 00076 00077 #ifdef __cplusplus 00078 typedef SeqExpr st_seq_expr; 00079 #else 00080 typedef struct SeqExpr st_seq_expr; 00081 #endif 00082 00083 #ifdef __cplusplus 00084 } // extern "C" 00085 #endif 00086 00087 #ifdef __cplusplus 00088 } // namespace parameterised 00089 } // namespace sesstype 00090 #endif 00091 00092 #endif//SESSTYPE__PARAMETERISED__EXPR__SEQ_H__