libsesstype  2.0.0
Library for Session Types programming.
seq.h
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__
 All Classes Namespaces Files Functions