00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ARRAYREFREAD_H_
00011 #define ARRAYREFREAD_H_
00012
00013 #include "SaveInstruction.h"
00014
00015 #include <string>
00016 using namespace std;
00017
00018
00019 namespace il{class node;}
00020
00021 namespace sail {
00022 class Variable;
00023 class Symbol;
00024
00038 class ArrayRefRead: public SaveInstruction {
00039 friend class boost::serialization::access;
00040
00041 template<class Archive>
00042 void serialize(Archive & ar, const unsigned int version)
00043 {
00044 ar & boost::serialization::base_object<sail::SaveInstruction>(*this);
00045 ar & v1;
00046 ar & v2;
00047 ar & index;
00048 ar & offset;
00049 ar & name;
00050 }
00051 private:
00052 Variable* v1;
00053 Variable* v2;
00054 Symbol* index;
00055 int offset;
00056 string name;
00059 public:
00060 ArrayRefRead(Variable* v1, Variable* v2, Symbol* index, int offset,
00061 string name, il::node* original, int line);
00062 ArrayRefRead(){};
00063
00067 int get_offset();
00072 string get_field_name();
00073 virtual string to_string() const;
00074
00078 virtual Variable* get_lhs();
00079 virtual void set_lhs(Variable* v);
00080
00085 Variable* get_rhs();
00086
00090 Symbol* get_index();
00091 virtual bool is_removable();
00092 virtual string to_string(bool pretty_print) const;
00093 virtual ~ArrayRefRead();
00094 };
00095
00096 }
00097
00098 #endif