Polaris: SymbolAccessRef.h Source File

SymbolAccessRef.h

Go 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     ///< This one is to satisfy Listable
00060     virtual void    print(ostream & o) const;
00061 
00062     friend ostream & operator << (ostream & o, const SymbolAccess & sa);
00063 };
00064 
00065 #endif
 © 1995-2005 University of Illinois, Urbana-Champaign. All rights reserved.  Fri Mar 25 23:06:14 2005