Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

nci/suif/suif2b/osuif/utilities/pass_utils.h

Go to the documentation of this file.
00001 // $Id: pass_utils.h,v 1.1.1.1 2000/06/08 00:10:03 afikes Exp $
00002 
00003 #ifndef OSUIFUTILITIES__PASS_UTILS_H
00004 #define OSUIFUTILITIES__PASS_UTILS_H
00005 
00006 #include "suifkernel/suifkernel_forwarders.h"
00007 #include "iokernel/cast.h"
00008 #include "common/suif_list.h"
00009 #include "suifkernel/command_line_parsing.h" 
00010 #include "suifkernel/token_stream.h" 
00011 #include "suifpasses/passes.h"
00012 #include "osuifutilities/walker_utils.h"
00013 
00014 
00022 template<class T>
00023 class CollectWalkerPass : public Pass {
00024 protected:
00025   FileSetBlock* _fsb;
00026   CollectWalkerT<T>* _walker;
00027 
00028 public:
00029   CollectWalkerPass( SuifEnv* env, const LString &name) :
00030     Pass( env, name ),
00031     _walker( new CollectWalkerT<T>( env ) )
00032   {
00033     initialize_flags();
00034   }
00035  
00037   virtual void initialize_flags() { }
00038   
00039   virtual void initialize() {
00040     Pass::initialize();
00041   }
00042 
00043   virtual bool parse_command_line(TokenStream *command_line_stream) {
00044     initialize_flags();
00045     return Pass::parse_command_line( command_line_stream );
00046   }
00047 
00048   OptionList* get_command_line() { return _command_line; }
00049   Module *clone() const { return (Module *) this; }
00050 
00051   virtual void do_file_set_block( FileSetBlock* fsb ) {
00052     suif_assert_message( fsb !=NULL,
00053                          ("FileSetBlock is NULL.") );
00054     _fsb = fsb;
00055     fsb->walk( *_walker );
00056     process_walker( _walker );
00057   }
00058 
00059   virtual void process_walker( CollectWalkerT<T>* walker ) {
00060     preprocess();
00061     for ( unsigned i = 0 ; i < walker->size() ; i++ ) {
00062       T* t = walker->at(i);
00063       process_suif_object( t );
00064     }
00065     postprocess();
00066   }
00067 
00068   virtual void preprocess() { }
00069   virtual void postprocess() { }
00070   virtual void process_suif_object(T* t) =0;
00071 };
00072 
00073 
00074 #endif /* OSUIFUTILITIES__PASS_UTILS_H */

Generated at Mon Jul 31 13:42:28 2000 for NCI SUIF by doxygen 1.1.2 written by Dimitri van Heesch, © 1997-2000