00001 #ifndef MULTIPLE_ARRAY_REFERENCE_H 00002 #define MULTIPLE_ARRAY_REFERENCE_H 00003 00004 #include "arrayreference.h" 00005 #include "expression.h" 00006 00007 class MultipleArrayReference : public ArrayReference { 00008 private: 00009 ArrayReference *arrayReference; 00010 Expression *expression; 00011 00012 public: 00013 MultipleArrayReference(SrcPosition *position, ArrayReference *arrayReference, Expression *expression) 00014 : ArrayReference(position), Ast(position), arrayReference(arrayReference), expression(expression) {} 00015 00016 MultipleArrayReference(const MultipleArrayReference& multipleArrayReference) : ArrayReference(multipleArrayReference.position), Ast(position) { 00017 *(this) = multipleArrayReference; 00018 } 00019 00020 virtual ~MultipleArrayReference() { 00021 delete this->arrayReference; 00022 delete this->expression; 00023 } 00024 00025 ArrayReference *getArrayReference() { 00026 return this->arrayReference; 00027 } 00028 00029 Expression *getExpression() { 00030 return this->expression; 00031 } 00032 00033 virtual Ast& operator = (const Ast& ast); 00034 virtual bool operator == (const Ast& ast) const; 00035 00036 virtual VisitorReturn *visit(Visitor& visitor) { 00037 return visitor.visitMultipleArrayReference(this); 00038 } 00039 00040 virtual Ast& clone() const { 00041 return *(new MultipleArrayReference(new SrcPosition(*(this->position)), 00042 this->arrayReference ? dynamic_cast<ArrayReference*>(&(this->arrayReference->clone())) : 0, 00043 this->expression ? dynamic_cast<Expression*>(&(this->expression->clone())) : 0)); 00044 } 00045 }; 00046 00047 #endif