| 41 | using namespace std; |
| 42 | |
| 43 | class ArrayVariable : public Variable |
| 44 | { |
| 45 | public: |
| 46 | static ArrayVariable* CreateArrayVariable(const CGContext& cg_context, Block* blk, const std::string &name, const Type *type, const Expression* init, const CVQualifiers* qfer, const Variable* isFieldVarOf); |
| 47 | ArrayVariable(const ArrayVariable& av); |
| 48 | virtual ~ArrayVariable(void); |
| 49 | |
| 50 | void add_index(const Expression* e); |
| 51 | void set_index(size_t index, const Expression* e); |
| 52 | virtual size_t get_dimension(void) const { return sizes.size();} |
| 53 | unsigned long size_in_bytes(void) const; |
| 54 | unsigned long get_size(void) const; |
| 55 | std::vector<unsigned int> get_sizes(void) const { return sizes;} |
| 56 | const std::vector<const Expression*>& get_indices(void) const { return indices;} |
| 57 | const std::vector<const Expression*>& get_more_init_values(void) const { return init_values;} |
| 58 | bool no_loop_initializer(void) const; |
| 59 | |
| 60 | ArrayVariable* itemize(void) const; |
| 61 | ArrayVariable* itemize(const vector<int>& const_indices) const; |
| 62 | ArrayVariable* itemize(const std::vector<const Variable*>& indices, Block* blk) const; |
| 63 | ArrayVariable* itemize(const std::vector<const Expression*>& indices, Block* blk) const; |
| 64 | ArrayVariable* rnd_mutate(void); |
| 65 | bool is_variant(const Variable* v) const; |
| 66 | virtual bool is_global(void) const; |
| 67 | virtual bool is_visible_local(const Block* blk) const; |
| 68 | |
| 69 | string make_print_index_str(const vector<const Variable*> &cvs) const; |
| 70 | virtual void Output(std::ostream &) const; |
| 71 | virtual void OutputDef(std::ostream &out, int indent) const; |
| 72 | virtual void OutputDecl(std::ostream &) const; |
| 73 | virtual void hash(std::ostream& out) const; |
| 74 | virtual const Variable* get_collective(void) const { return collective ? collective : this;} |
| 75 | virtual const ArrayVariable* get_array(string& /*field*/) const { return this;} |
| 76 | virtual void OutputLowerBound(std::ostream &) const; |
| 77 | virtual void OutputUpperBound(std::ostream &) const; |
| 78 | void output_with_indices(std::ostream &out, const std::vector<const Variable*>& cvs) const; |
| 79 | void output_checksum_with_indices(std::ostream &out, const std::vector<const Variable*>& cvs, string field_name) const; |
| 80 | void output_init(std::ostream &out, const Expression* init, const vector<const Variable*>& cvs, int indent) const; |
| 81 | void output_addr_checks(std::ostream &out, const Variable* var, string field_name, int indent) const; |
| 82 | void add_init_value(const Expression* e) { init_values.push_back(e);} |
| 83 | const vector<const Expression*>& get_init_values(void) const { return init_values;} |
| 84 | string build_initializer_str(const vector<string>& init_strings) const; |
| 85 | string build_init_recursive(size_t dimen, const vector<string>& init_strings) const; |
| 86 | |
| 87 | const ArrayVariable* collective; |
| 88 | Block* parent; |
| 89 | private: |
| 90 | ArrayVariable(Block* blk, const std::string &name, const Type *type, const Expression* init, const CVQualifiers* qfer, const vector<unsigned int>& sizes, const Variable* isFieldVarOf); |
| 91 | |
| 92 | |
| 93 | const std::vector<unsigned int> sizes; |
| 94 | std::vector<const Expression*> indices; |
| 95 | std::vector<const Expression*> init_values; |
| 96 | }; |
| 97 | |
| 98 | /////////////////////////////////////////////////////////////////////////////// |
| 99 |
nothing calls this directly
no outgoing calls
no test coverage detected