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

init.h

Go to the documentation of this file.
00001 #ifndef init_h
00002 #define init_h
00003 
00004 #include "tag.h"
00005 
00007 class Init : private Tag
00008 {
00009  public:
00010   enum Type  
00011     {
00012       INITOPEN,
00013       INITCLOSE,
00014       INCLUDE,
00015       MACROS,
00016       MENU,
00017       IMAGE,
00018       FILELINK,
00019       FILELIST,
00020       INTERPRETER,
00021       FUNCTIONS,
00022       LOCALE,
00023       CHARSET,
00024       DELETE,
00025       DEFINE,
00026       USER       
00027     };
00028 
00029   struct Range
00030   {
00031     enum Type
00032       {
00033         FROM_TO,
00034         LEVEL
00035       };
00036 
00037     Type type;
00038 
00039     int lower;
00040     int upper;
00041     int level;
00042 
00043     Range( int lower, int upper ) : type( FROM_TO ), lower( lower ), upper( upper ) {}
00044     Range( int level ) : type( LEVEL), level( level ) {}
00045     Range() {}
00046 
00047     bool in_range( int n );
00048   };
00049 
00050   typedef std::list<Range> range_list;
00051   typedef range_list::iterator range_list_it;
00052 
00053  private:
00054   Type type;
00055 
00056   mutable range_list ral;
00057 
00058   std::string user_name; 
00059 
00063   bool insert;           
00064   bool append;
00065   bool del;
00066 
00067   bool ignore; // recognice an init tag only once
00068 
00069  public:
00070   Init( Line line );
00071 
00072   bool operator!() const { return !Tag::is_valid_tag; }
00073 
00074   Type get_type() const { return type; }
00075 
00076   bool has_range() const { return !ral.empty(); }
00077 
00078   bool has_one_range() const { return get_elements( ral ) == 1; }
00079 
00080   Range get_first() const { return *ral.begin(); }
00081 
00082   range_list get_range() const { return ral; }
00083 
00084 /*
00086   std::string get_tag() { return ""; }
00087 */
00088 
00090   Line get_line() { return Tag::get_line(); }
00091 
00092   std::string get_user_name() const { return user_name; }
00093 
00094   bool is_insert() const { return insert; }
00095   
00096   bool is_append() const { return append; }
00097 
00098   bool is_delete() const { return del; }
00099 
00100   bool is_ignore() const { return ignore; }
00101 
00102   bool is_ignore( bool t ) { ignore = t; set_option("ignore", t ); }
00103 
00104   std::string get_tag();
00105 
00106 private:
00107   void extract_range( const std::string& level );
00108   void strip_list( Strings::string_list& sl );
00109 
00110 #if __GNUC__ == 2
00111   // gcc 2.x.x has problems with template template parameters
00112 
00113   int get_elements( Strings::string_list& sl ) const
00114   {
00115     if( sl.empty() )
00116       return 0;
00117 
00118     int i = 0;
00119     for( Strings::string_list_it it = sl.begin(); it != sl.end(); ++it )
00120       ++i;
00121 
00122     return i;
00123   }
00124 
00125   int get_elements( range_list& sl ) const
00126   {
00127     if( sl.empty() )
00128       return 0;
00129 
00130     int i = 0;
00131     for( range_list_it it = sl.begin(); it != sl.end(); ++it )
00132       ++i;
00133 
00134     return i;
00135   }
00136   
00137 #else
00138 
00139   template <class A> int get_elements( std::list<A>& sl ) const
00140   {
00141     if( sl.empty() )
00142       return 0;
00143 
00144     int i = 0;
00145     for( std::list<A>::iterator it = sl.begin(); it != sl.end(); ++it )
00146       ++i;
00147 
00148     return i;
00149   }
00150 
00151 #endif
00152 
00153 };
00154 
00155 std::string get_init_name( const Init::Type type );
00156 
00157 struct InitTableEntry
00158 {
00159   Init::Type type;
00160   bool was_detected;
00161   Init::range_list ranges;
00162   bool has_range;
00163   bool has_one_range;
00164   std::string user_name;
00165 
00166   InitTableEntry( Init::Type t, bool wd = false )
00167     : type( t ), 
00168       was_detected( wd ), 
00169       has_range( false ), 
00170       has_one_range( false ),
00171       user_name( get_init_name( t ) )
00172   {
00173     
00174   }
00175 
00176   InitTableEntry( Init::Type t, bool wd, const Init::range_list& rl, bool hr, bool hor ) 
00177     : type( t ), 
00178       was_detected( wd ), 
00179       ranges( rl ),
00180       has_range( hr ), 
00181       has_one_range( hor ),
00182       user_name( get_init_name( t ) )
00183   {}
00184 };
00185 
00186 inline bool operator==( const Init::Range& range, Init::Range::Type type )
00187 {
00188   return range.type == type;
00189 }
00190 
00191 Init::Type get_init_type( const std::string type );
00192 
00193 std::string get_init_name( const Init::Type type );
00194 
00195 #endif

Generated on Tue Nov 20 02:19:52 2001 for Leo<HTML> by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001