SymbolAccessRef.hGo to the documentation of this file.00001 #ifndef _SYMBOLACCESSREF_H
00002 #define _SYMBOLACCESSREF_H
00003
00004 #ifdef POLARIS_GNU_PRAGMAS
00005 #pragma interface
00006 #endif
00007
00008 #include "ClassNames.h"
00009 #include "Symbol/Symbol.h"
00010 #include "AbstractAccess.h"
00011
00012 class ProgramUnit;
00013 class SymbolAccess;
00014 class InlineObject;
00015
00016 class SymbolAccessRef : public Listable {
00017
00018 protected:
00019 RefList<AbstractAccess> _read;
00020 RefList<AbstractAccess> _write;
00021 RefList<AbstractAccess> _readwrite;
00022
00023 void _copy_access_lists( const List<AbstractAccess> & read,
00024 const List<AbstractAccess> & write,
00025 const List<AbstractAccess> & readwrite );
00026
00027 public:
00028 SymbolAccessRef( );
00029 SymbolAccessRef( const List<AbstractAccess> & read,
00030 const List<AbstractAccess> & write,
00031 const List<AbstractAccess> & readwrite );
00032 SymbolAccessRef( const SymbolAccess & other );
00033 ~SymbolAccessRef( );
00034
00035 virtual Listable *listable_clone() const;
00036
00037 virtual SymbolAccessRef *clone() const;
00038
00039 void relink_eptrs( ProgramUnit & p );
00040
00041 void add_read ( const AbstractAccess & r );
00042 void add_write ( const AbstractAccess & w );
00043 void add_readwrite( const AbstractAccess & rw );
00044
00045 Iterator<AbstractAccess> iter_read( );
00046 Iterator<AbstractAccess> iter_write( );
00047 Iterator<AbstractAccess> iter_readwrite( );
00048
00049 void ins( const SymbolAccess & rhs );
00050
00051 SymbolAccess * remap_interface_vars( InlineObject * inl_obj,
00052 const Symbol & sym,
00053 ProgramUnit & pgm,
00054 Statement & stmt,
00055 int exec_pred=-1) const;
00056
00057 void write( ostream & o, Symbol & sym, Statement & stmt ) const;
00058
00059
00060 virtual void print(ostream & o) const;
00061
00062 friend ostream & operator << (ostream & o, const SymbolAccess & sa);
00063 };
00064
00065 #endif
|