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