Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

SymbolValueList Class Reference

#include <cmt_symbol.h>

Collaboration diagram for SymbolValueList:

Collaboration graph
[legend]
List of all members.

Public Types

typedef cmt_vector< SymbolValueListSymbolValueListVector

Public Member Functions

int select_first (const cmt_string &tag_name="") const
int select_last () const
void show (const Symbol &symbol, const SymbolValue &value, bool &first_definition) const

Public Attributes

CommandType command_type
Useuse
SymbolValue::SymbolValueVector values
bool is_reflexive
bool discarded

Member Typedef Documentation

typedef cmt_vector<SymbolValueList> SymbolValueList::SymbolValueListVector
 

Definition at line 31 of file cmt_symbol.h.


Member Function Documentation

int SymbolValueList::select_first const cmt_string tag_name = ""  )  const
 

Definition at line 2655 of file cmt_symbol.cxx.

References Tag::find(), Tag::get_priority(), Tag::is_selected(), cmt_vector< T >::size(), SymbolValue::tag, and values.

Referenced by ActionBuilder::build(), MacroBuilder::build(), PathBuilder::build(), SetBuilder::build(), and PathBuilder::clean().

02656 {
02657   int priority = 0;
02658   int value_number;
02659   int selected = -1;
02660 
02661   Tag* the_tag = 0;
02662 
02663   if (tag_name != "") the_tag = Tag::find (tag_name);
02664 
02665   for (value_number = 0;
02666        value_number < values.size ();
02667        value_number++)
02668     {
02669       const SymbolValue& value = values[value_number];
02670 
02671       const Tag* tag = value.tag;
02672 
02673       if (the_tag == 0)
02674         {
02675           if (!tag->is_selected ()) continue;
02676         }
02677       else
02678         {
02679           if (tag != the_tag) continue;
02680           selected = value_number;
02681         }
02682 
02683       //
02684       // Only the first value at a given priority is
02685       // selected (which implies the '>' test instead
02686       // of '>=')
02687       //
02688 
02689       if (tag->get_priority () > priority)
02690         {
02691           priority = tag->get_priority ();
02692           selected = value_number;
02693         }
02694     }
02695 
02696   return (selected);
02697 }

int SymbolValueList::select_last  )  const
 

Definition at line 2700 of file cmt_symbol.cxx.

References Tag::get_priority(), Tag::is_selected(), cmt_vector< T >::size(), SymbolValue::tag, and values.

02701 {
02702   int priority = 0;
02703   int value_number;
02704   int selected = -1;
02705 
02706   for (value_number = 0;
02707        value_number < values.size ();
02708        value_number++)
02709     {
02710       SymbolValue& value = values[value_number];
02711 
02712       const Tag* tag = value.tag;
02713 
02714       if (tag->is_selected ())
02715         {
02716           //
02717           // The last value at a given priority is
02718           // selected (which implies the '>=' test instead
02719           // of '>')
02720           //
02721 
02722           if (tag->get_priority () >= priority)
02723             {
02724               priority = tag->get_priority ();
02725               selected = value_number;
02726             }
02727         }
02728     }
02729 
02730   return (selected);
02731 }

void SymbolValueList::show const Symbol symbol,
const SymbolValue value,
bool &  first_definition
const
 

Definition at line 2734 of file cmt_symbol.cxx.

References ActionType, command_type, CommandAction, CommandAlias, CommandMacro, CommandMacroAppend, CommandMacroPrepend, CommandMacroRemove, CommandMacroRemoveAll, CommandMacroRemoveAllRegexp, CommandMacroRemoveRegexp, CommandPath, CommandPathAppend, CommandPathPrepend, CommandPathRemove, CommandPathRemoveRegexp, CommandSet, CommandSetAppend, CommandSetPrepend, CommandSetRemove, CommandSetRemoveRegexp, discarded, Cmt::get_action(), Tag::get_default(), Tag::get_name(), Use::get_package_name(), Symbol::name, SymbolValue::tag, SymbolValue::text, use, and Use::version.

Referenced by ActionBuilder::build(), MacroBuilder::build(), PathBuilder::build(), and SetBuilder::build().

02737 {
02738   cmt_string discarded_text;
02739   cmt_string define_text;
02740   ActionType action = Cmt::get_action ();
02741 
02742   if (value.text == "") return;
02743 
02744   if (discarded) discarded_text = " (discarded by override)";
02745   else discarded_text = "";
02746 
02747   if (first_definition) define_text = "defines";
02748   else define_text = "overrides";
02749 
02750   cout << "# Package ";
02751   if (use != 0)
02752     {
02753       cout << use->get_package_name () << " " << use->version;
02754     }
02755 
02756   switch (command_type)
02757     {
02758       case CommandSet :
02759         cout << " " << define_text << " set " << symbol.name << " as ";
02760         first_definition = false;
02761         break;
02762       case CommandSetAppend :
02763         cout << " appends to set " << symbol.name << " : ";
02764         break;
02765       case CommandSetPrepend :
02766         cout << " prepends to set " << symbol.name << " : ";
02767         break;
02768       case CommandSetRemove :
02769         cout << " removes from set " << symbol.name << " : ";
02770         break;
02771       case CommandSetRemoveRegexp :
02772         cout << " removes RE from set " << symbol.name << " : ";
02773         break;
02774       case CommandAlias :
02775         cout << " " << define_text << " alias " << symbol.name << " as ";
02776         first_definition = false;
02777         break;
02778       case CommandPath :
02779         cout << " " << define_text << " path " << symbol.name << " as ";
02780         first_definition = false;
02781         break;
02782       case CommandPathAppend :
02783         cout << " appends to path " << symbol.name << " : ";
02784         break;
02785       case CommandPathPrepend :
02786         cout << " prepends to path " << symbol.name << " : ";
02787         break;
02788       case CommandPathRemove :
02789         cout << " removes from path " << symbol.name << " : ";
02790         break;
02791       case CommandPathRemoveRegexp :
02792         cout << " removes RE from path " << symbol.name << " : ";
02793         break;
02794       case CommandMacroPrepend :
02795         cout << " prepends to macro " << symbol.name << " : ";
02796         break;
02797       case CommandMacro :
02798         cout << " " << define_text << " macro " << symbol.name << " as ";
02799         break;
02800       case CommandMacroAppend :
02801         cout << " appends to macro " << symbol.name << " : ";
02802         break;
02803       case CommandMacroRemove :
02804         cout << " remove from macro " << symbol.name << " : ";
02805         break;
02806       case CommandMacroRemoveRegexp :
02807         cout << " remove RE from macro " << symbol.name << " : ";
02808         break;
02809       case CommandMacroRemoveAll :
02810         cout << " remove all from macro " << symbol.name << " : ";
02811         break;
02812       case CommandMacroRemoveAllRegexp :
02813         cout << " remove all RE from macro " << symbol.name << " : ";
02814         break;
02815       case CommandAction :
02816         cout << " " << define_text << " action " << symbol.name << " as ";
02817         first_definition = false;
02818         break;
02819     }
02820 
02821   cout << "'" << value.text << "'";
02822           
02823   Tag* selected_tag = value.tag;
02824           
02825   if ((selected_tag == 0) ||
02826       (selected_tag == Tag::get_default ()))
02827     {
02828       cout << " for default tag";
02829     }
02830   else
02831     {
02832       cout << " for tag '" << selected_tag->get_name () << "'";
02833     }
02834   
02835   cout << discarded_text << endl;
02836 }


Member Data Documentation

CommandType SymbolValueList::command_type
 

Definition at line 37 of file cmt_symbol.h.

Referenced by Symbol::add_value_to_list(), ActionBuilder::build(), MacroBuilder::build(), PathBuilder::build(), SetBuilder::build(), PathBuilder::clean(), Symbol::is_selected(), and show().

bool SymbolValueList::discarded
 

Definition at line 41 of file cmt_symbol.h.

Referenced by Symbol::add_value_to_list(), ActionBuilder::build(), ScriptBuilder::build(), MacroBuilder::build(), PathBuilder::build(), SetBuilder::build(), PathBuilder::clean(), Symbol::is_selected(), and show().

bool SymbolValueList::is_reflexive
 

Definition at line 40 of file cmt_symbol.h.

Referenced by Symbol::add_value_to_list(), ActionBuilder::build(), MacroBuilder::build(), PathBuilder::build(), and SetBuilder::build().

Use* SymbolValueList::use
 

Definition at line 38 of file cmt_symbol.h.

Referenced by Symbol::add_value_to_list(), ActionBuilder::build(), ScriptBuilder::build(), MacroBuilder::build(), PathBuilder::build(), SetBuilder::build(), PathBuilder::clean(), and show().

SymbolValue::SymbolValueVector SymbolValueList::values
 

Definition at line 39 of file cmt_symbol.h.

Referenced by Symbol::add_value_to_list(), ActionBuilder::build(), MacroBuilder::build(), PathBuilder::build(), SetBuilder::build(), Symbol::check_tag_used(), PathBuilder::clean(), Symbol::is_selected(), select_first(), and select_last().


The documentation for this class was generated from the following files:
Generated on Mon May 2 10:26:03 2005 for CMT by doxygen 1.3.5