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

cmt_include.cxx

Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <string.h>
00004 #include <ctype.h>
00005 
00006 #include "cmt_include.h"
00007 #include "cmt_use.h"
00008 
00009 /*----------------------------------------------------------*/
00010 /*                                                          */
00011 /*  Operations on Include                                   */
00012 /*                                                          */
00013 /*----------------------------------------------------------*/
00014 
00015 /*----------------------------------------------------------*/
00016 void Include::action (const CmtSystem::cmt_string_vector& words, Use* use)
00017 /*----------------------------------------------------------*/
00018 {
00019   cmt_string name;
00020 
00021   if (use == 0) use = &(Use::current());
00022 
00023   for (int i = 1; i < words.size (); i++)
00024     {
00025       name = words[i];
00026       if (name == "") return;
00027       add (name, use);
00028     }
00029 }
00030 
00031 /*----------------------------------------------------------*/
00032 Include* Include::find (const cmt_string& name, Use* use)
00033 /*----------------------------------------------------------*/
00034 {
00035   int include_index;
00036 
00037   if (use == 0) use = &(Use::current());
00038 
00039   if (use->includes.size () == 0) return (0);
00040 
00041   for (include_index = 0;
00042        include_index < use->includes.size ();
00043        include_index++)
00044     {
00045       Include& incl = use->includes[include_index];
00046 
00047       if (incl.use != use) continue;
00048 
00049       if (incl.name == name)
00050         {
00051           return (&incl);
00052         }
00053     }
00054 
00055   return (0);
00056 }
00057 
00058 /*----------------------------------------------------------*/
00059 Include* Include::add (const cmt_string& name, Use* use)
00060 /*----------------------------------------------------------*/
00061 {
00062   if (name == "") return (0);
00063 
00064   if (use == 0) use = &(Use::current());
00065 
00066   {
00067     Include* incl;
00068 
00069     incl = find (name, use);
00070     if (incl != 0) return (incl);
00071   }
00072 
00073   Include& incl = use->includes.add ();
00074 
00075   incl.name = name;
00076   incl.use = use;
00077 
00078   return (&incl);
00079 }
00080 
00081 /*----------------------------------------------------------*/
00082 void Include::print_all (PrintMode mode)
00083 /*----------------------------------------------------------*/
00084 {
00085   int number;
00086   int include_number;
00087   Use::UsePtrVector& uses = Use::uses ();
00088 
00089   if (uses.size () > 0)
00090     {
00091       for (number = 0; number < uses.size (); number++)
00092         {
00093           const Use* use = uses[number];
00094 
00095           if (use->package == "CMT") continue;
00096 
00097           cout << "-I${" << use->prefix << "ROOT}/src ";
00098 
00099           for (include_number = 0;
00100                include_number < use->includes.size ();
00101                include_number++)
00102             {
00103               const Include& incl = use->includes[include_number];
00104 
00105               cout << "-I" << incl.name << " ";
00106             }
00107         }
00108     }
00109 
00110   for (include_number = 0;
00111        include_number < (Use::current()).includes.size ();
00112        include_number++)
00113     {
00114       const Include& incl = (Use::current()).includes[include_number];
00115 
00116       cout << "-I" << incl.name << " ";
00117     }
00118 }
00119 
00120 /*----------------------------------------------------------*/
00121 void Include::print_filters (PrintMode mode)
00122 /*----------------------------------------------------------*/
00123 {
00124   int number;
00125   int include_number;
00126   Use::UsePtrVector& uses = Use::uses ();
00127 
00128   if (uses.size () > 0)
00129     {
00130       for (number = 0; number < uses.size (); number++)
00131         {
00132           Use* use = uses[number];
00133 
00134           cout << "s#" <<
00135               ".*" << SLASH <<
00136               use->package << SLASH <<
00137               use->version << SLASH <<
00138               "#$(" << use->prefix << "ROOT)" << SLASH <<
00139               "#g" << endl;
00140 
00141           for (include_number = 0;
00142                include_number < use->includes.size ();
00143                include_number++)
00144             {
00145               Include& incl = use->includes[include_number];
00146 
00147               const cmt_string& d = Cmt::filter_dir (incl.name);
00148 
00149               if (d.size () > 0)
00150                 {
00151                   cout << "s#" << d << "#" <<
00152                       incl.name << "#g" << endl;
00153                 }
00154             }
00155         }
00156     }
00157 
00158   {
00159     const Use* use = &(Use::current());
00160 
00161     cout << "s#" << ".*" << SLASH <<
00162         use->package << SLASH <<
00163         use->version << SLASH <<
00164         "#$(" << use->prefix << "ROOT)" << SLASH <<
00165         "#g" << endl;
00166 
00167     for (include_number = 0;
00168          include_number < use->includes.size ();
00169          include_number++)
00170       {
00171         const Include& incl = use->includes[include_number];
00172 
00173         const cmt_string& d = Cmt::filter_dir (incl.name);
00174 
00175         if (d.size () > 0)
00176           {
00177             cout << "s#" << d << "#" <<
00178                 incl.name << "#g" << endl;
00179           }
00180       }
00181   }
00182 }
00183 
00184 /*----------------------------------------------------------*/
00185 void Include::clear_all ()
00186 /*----------------------------------------------------------*/
00187 {
00188 }
00189 
00190 /*----------------------------------------------------------*/
00191 Include::Include ()
00192 /*----------------------------------------------------------*/
00193 {
00194   use = 0;
00195 }
00196 
00197 /*----------------------------------------------------------*/
00198 Include::~Include ()
00199 /*----------------------------------------------------------*/
00200 {
00201   use = 0;
00202 }
00203 

Generated at Thu Apr 11 16:49:41 2002 for CMT by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000