CVarPath Class Reference

#include <varpath.h>


Public Member Functions

 CVarPath (const std::string &raw)
void decode ()
void display ()
bool empty ()
bool isFinal ()
 returns true if there s no more . in the path


Data Fields

std::vector< std::pair< std::string,
std::string > > 
Destination

Private Member Functions

std::string getToken ()

Private Attributes

std::string RawVarPath
uint32 TokenPos


Constructor & Destructor Documentation

CVarPath::CVarPath const std::string &  raw  )  [inline]
 

Definition at line 35 of file varpath.h.

References decode(), and RawVarPath.

00035                                         : RawVarPath(raw)
00036         {
00037                 decode ();
00038         }


Member Function Documentation

void CVarPath::decode  ) 
 

Definition at line 101 of file varpath.cpp.

References getToken(), nlwarning, RawVarPath, TokenPos, and uint.

Referenced by CVarPath().

00102 {
00103         vector<string> dest;
00104         TokenPos = 0;
00105         Destination.clear ();
00106 
00107         string val = getToken ();
00108 
00109         if (val == "")
00110                 return;
00111                 
00112         if (val == "[" )
00113         {
00114                 do
00115                 {
00116                         uint osbnb = 0;
00117                         string d;
00118                         do
00119                         {
00120                                 val = getToken ();
00121                                 if (val == "[")
00122                                         osbnb++;
00123 
00124                                 // end of token
00125                                 if (val == "")
00126                                 {
00127                                         nlwarning ("VP: Bad VarPath '%s', suppose it s an empty varpath", RawVarPath.c_str());
00128                                         Destination.clear ();
00129                                         return;
00130                                 }
00131                                         
00132                                 if (osbnb == 0 && (val == "," || val == "]"))
00133                                         break;
00134 
00135                                 if (val == "]")
00136                                         osbnb--;
00137 
00138                                 d += val;
00139                         }
00140                         while (true);
00141                         dest.push_back (d);
00142                         if (val == "]")
00143                                 break;
00144                 }
00145                 while (true);
00146         }
00147         else if (val != "." && val != "," && val != "]")
00148         {
00149                 dest.push_back (val);
00150         }
00151         else
00152         {
00153                 nlwarning ("VP: Malformated VarPath '%s' before position %d", RawVarPath.c_str (), TokenPos);
00154                 return;
00155         }
00156 
00157         // must the a . or end of string
00158         val = getToken ();
00159         if (val == " ")
00160         {
00161                 // special case, there s a space that means that everything after is not really part of the varpath.
00162                 Destination.push_back (make_pair(RawVarPath, string("")));
00163                 return;
00164         }
00165         else if (val != "." && val != "" && val != "=")
00166         {
00167                 nlwarning ("VP: Malformated VarPath '%s' before position %d", RawVarPath.c_str (), TokenPos);
00168                 return;
00169         }
00170 
00171         for (uint i = 0; i < dest.size(); ++i)
00172         {
00173                 string srv, var;
00174                 uint pos;
00175                 
00176                 if ((pos = dest[i].find ('.')) != string::npos)
00177                 {
00178                         srv = dest[i].substr(0, pos);
00179                         var = dest[i].substr(pos+1);
00180                         if (TokenPos < RawVarPath.size())
00181                                 var += val + RawVarPath.substr (TokenPos);
00182                 }
00183                 else
00184                 {
00185                         srv = dest[i];
00186                         if (val == "=")
00187                         {
00188                                 srv += val + RawVarPath.substr (TokenPos);
00189                                 var = "";
00190                         }
00191                         else
00192                                 var = RawVarPath.substr (TokenPos);
00193                 }
00194 
00195                 Destination.push_back (make_pair(srv, var));
00196         }
00197 
00198         //display ();
00199 }

void CVarPath::display  ) 
 

Definition at line 208 of file varpath.cpp.

References nlinfo, and uint.

00209 {
00210         nlinfo ("VP: VarPath dest = %d", Destination.size ());
00211         for (uint i = 0; i < Destination.size (); i++)
00212         {
00213                 nlinfo ("VP:  > '%s' '%s'", Destination[i].first.c_str(), Destination[i].second.c_str());
00214         }
00215 }

bool CVarPath::empty  )  [inline]
 

Definition at line 49 of file varpath.h.

Referenced by NLNET::serviceGetView().

00050         {
00051                 return Destination.empty();
00052         }

string CVarPath::getToken  )  [private]
 

VarPath ::= [bloc '.']* bloc bloc ::= '[' [VarPath ',']* VarPath ']' | name name ::= [ascii]* ['*']

Definition at line 77 of file varpath.cpp.

References RawVarPath, res, and TokenPos.

Referenced by decode().

00078 {
00079         string res;
00080         
00081         if (TokenPos >= RawVarPath.size())
00082                 return res;
00083 
00084         res += RawVarPath[TokenPos];
00085 
00086         switch (RawVarPath[TokenPos++])
00087         {
00088         case '.': case '*': case '[': case ']': case ',': case '=': case ' ':
00089                 break;
00090         default :
00091                 while (TokenPos < RawVarPath.size() && RawVarPath[TokenPos] != '.' && RawVarPath[TokenPos] != '[' && RawVarPath[TokenPos] != ']' && RawVarPath[TokenPos] != ',' && RawVarPath[TokenPos] != '=' && RawVarPath[TokenPos] != ' ')
00092                 {
00093                         res += RawVarPath[TokenPos++];
00094                 }
00095                 break;
00096         }
00097         return res;
00098 }

bool CVarPath::isFinal  ) 
 

returns true if there s no more . in the path

Definition at line 201 of file varpath.cpp.

Referenced by NLNET::serviceGetView().

00202 {
00203         if(Destination.size() == 0) return true;
00204         if(Destination[0].second.size() == 0) return true;
00205         return false;
00206 }


Field Documentation

std::vector<std::pair<std::string, std::string> > CVarPath::Destination
 

Definition at line 42 of file varpath.h.

Referenced by NLMISC_COMMAND(), NLNET::serviceGetView(), and NLNET::setInformations().

std::string CVarPath::RawVarPath [private]
 

Definition at line 58 of file varpath.h.

Referenced by CVarPath(), decode(), and getToken().

uint32 CVarPath::TokenPos [private]
 

Definition at line 60 of file varpath.h.

Referenced by decode(), and getToken().


The documentation for this class was generated from the following files:
Generated on Tue Mar 16 06:43:55 2004 for NeL by doxygen 1.3.6