00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #define sw_cbl_codetree_defarray_h
00012
00013 #include
00014
00015 #include
00016
00017 namespace cbl {
00018 namespace codetree {
00019 namespace def {
00020
00021 class TRangeDef;
00022
00023
00024 class TArrayDef : public TCompositeDef<> {
00025 public:
00026 enum TStyle {
00027 asStatic, asDynamic, asOpen
00028 };
00029
00030 private:
00031 typedef TCompositeDef<> base_class;
00032
00033 typedef std::deque TRangeList;
00034
00035 unsigned FSize;
00036 TRangeList FDim;
00037 TStyle FStyle;
00038
00039 void calcSize();
00040
00041 protected:
00042
00043 TArrayDef(symbols::TModuleSym *AOwner, TDef *ABaseDef);
00044
00045 friend class symbols::TModuleSym;
00046
00047 public:
00048 TArrayDef(const TArrayDef&);
00049
00050
00051 virtual unsigned size() const;
00052
00053
00054 TStyle style() const;
00055 void style(TStyle);
00056
00057
00058 void add(TRangeDef *ADim);
00059 const TRangeList& dimensions() const;
00060
00061
00062 virtual void accept(TDefVisitor&);
00063
00064
00065 virtual TArrayDef *clone() const;
00066 };
00067
00068 }
00069 }
00070 }
00071
00072 #endif