diff --git a/crlcore/etc/environment.alliance.xml b/crlcore/etc/environment.alliance.xml
index 889a5c35..367ed251 100644
--- a/crlcore/etc/environment.alliance.xml
+++ b/crlcore/etc/environment.alliance.xml
@@ -25,7 +25,6 @@
${CELL_TOP}/cells/rflib
${CELL_TOP}/cells/rf2lib
${CELL_TOP}/cells/pxlib
- ${CORIOLIS_TOP}/share/cells/stratus2sxlib
diff --git a/crlcore/src/ccore/AllianceFramework.cpp b/crlcore/src/ccore/AllianceFramework.cpp
index bd8e9565..f1019923 100644
--- a/crlcore/src/ccore/AllianceFramework.cpp
+++ b/crlcore/src/ccore/AllianceFramework.cpp
@@ -50,12 +50,82 @@ namespace CRL {
using Hurricane::Graphics;
using Hurricane::ForEachIterator;
using Hurricane::Instance;
+ using Hurricane::PrivateProperty;
+
+
+// -------------------------------------------------------------------
+// Class : "CRL::AllianceFrameworkProperty".
+
+
+ class AllianceFrameworkProperty : public PrivateProperty {
+ public:
+ static AllianceFrameworkProperty* create ( AllianceFramework* );
+ static Name getPropertyName ();
+ virtual Name getName () const;
+ inline AllianceFramework* getFramework () const;
+ virtual string _getTypeName () const;
+ virtual Record* _getRecord () const;
+ private:
+ static Name _name;
+ AllianceFramework* _framework;
+ private:
+ inline AllianceFrameworkProperty ( AllianceFramework* );
+ };
+
+
+ Name AllianceFrameworkProperty::_name = "AllianceFramework";
+
+
+ inline AllianceFrameworkProperty::AllianceFrameworkProperty ( AllianceFramework* af )
+ : PrivateProperty(), _framework(af)
+ { }
+
+
+ inline AllianceFramework* AllianceFrameworkProperty::getFramework () const
+ { return _framework; }
+
+
+ AllianceFrameworkProperty* AllianceFrameworkProperty::create ( AllianceFramework* af )
+ {
+ AllianceFrameworkProperty *property = new AllianceFrameworkProperty ( af );
+
+ property->_postCreate ();
+ return property;
+ }
+
+
+ Name AllianceFrameworkProperty::getPropertyName ()
+ { return _name; }
+
+
+ Name AllianceFrameworkProperty::getName () const
+ { return getPropertyName(); }
+
+
+ string AllianceFrameworkProperty::_getTypeName () const
+ { return _TName ( "AllianceFrameworkProperty" ); }
+
+
+ Record* AllianceFrameworkProperty::_getRecord () const
+ {
+ Record* record = PrivateProperty::_getRecord();
+ if ( record ) {
+ record->add( getSlot("_name" ,_name ) );
+ record->add( getSlot("_framework",_framework) );
+ }
+ return record;
+ }
+
+
+// -------------------------------------------------------------------
+// Class : "CRL::AllianceFramework".
AllianceFramework* AllianceFramework::_singleton = NULL;
const Name AllianceFramework::_parentLibraryName = "AllianceFramework";
+
AllianceFramework::AllianceFramework ()
: _environment()
, _parsers()
@@ -70,9 +140,13 @@ namespace CRL {
System::get ();
DataBase* db = DataBase::getDB ();
- if ( !db )
+ if ( not db )
db = DataBase::create ();
+ db->put ( AllianceFrameworkProperty::create(this) );
+
+ cmess1 << " o Reading Alliance Environment." << endl;
+
_environment.loadFromShell ();
_environment.loadFromXml ();
@@ -105,9 +179,9 @@ namespace CRL {
cmess2 << " o Loading libraries (working first)." << endl;
for ( unsigned i=0 ; igetLibrary()->getName() == sname )
+ if ( _libraries[ilib]->getLibrary()->getName() == libName )
return _libraries[ilib];
}
- return (flags&CreateLibrary) ? createLibrary ( getString(path), flags ) : NULL;
+ return (flags&CreateLibrary) ? createLibrary ( getString(libName), flags ) : NULL;
}
@@ -338,7 +407,6 @@ namespace CRL {
// Transmit all flags except thoses related to views.
loadMode |= (mode & (!Catalog::State::Views));
-
parser = & ( _parsers.getParserSlot ( name, loadMode, _environment ) );
// Try to open cell file (file extention is supplied by the parser).
@@ -372,10 +440,9 @@ namespace CRL {
}
- AllianceLibrary* AllianceFramework::createLibrary ( const string& path, unsigned int& flags )
+ AllianceLibrary* AllianceFramework::createLibrary ( const string& path, unsigned int& flags, string libName )
{
- size_t slash = path.rfind ( '/' );
- string libName = path.substr ( (slash!=string::npos)?slash+1:0 );
+ if ( libName.empty() ) libName = SearchPath::extractLibName(path);
flags &= ~HasCatalog;
@@ -387,7 +454,7 @@ namespace CRL {
}
SearchPath& LIBRARIES = _environment.getLIBRARIES ();
- if ( not (flags & InSearchPath) ) LIBRARIES.prepend ( path );
+ if ( not (flags & InSearchPath) ) LIBRARIES.prepend ( path, libName );
else LIBRARIES.select ( path );
library = new AllianceLibrary ( path, Library::create(getParentLibrary(),libName) );
@@ -405,11 +472,8 @@ namespace CRL {
if ( not parser.loadByLib() ) return library;
- if ( slash == path.npos ) return library;
- string file = path.substr(slash+1,path.size()-slash);
-
// Load the whole library.
- if ( ! _readLocate(file,Catalog::State::State::Logical,true) ) return library;
+ if ( ! _readLocate(libName,Catalog::State::State::Logical,true) ) return library;
// Call the parser function.
(parser.getParsLib())( _environment.getLIBRARIES().getSelected() , library->getLibrary() , _catalog );
@@ -690,4 +754,18 @@ namespace CRL {
}
+ string AllianceFramework::_getString () const
+ { return ""; }
+
+
+ Record *AllianceFramework::_getRecord () const
+ {
+ Record* record = new Record ( "" );
+ record->add ( getSlot ( "_environment", &_environment) );
+ record->add ( getSlot ( "_libraries" , &_libraries ) );
+ record->add ( getSlot ( "_catalog" , &_catalog ) );
+ return record;
+ }
+
+
} // End of CRL namespace.
diff --git a/crlcore/src/ccore/Environment.cpp b/crlcore/src/ccore/Environment.cpp
index 2cee9ea8..4dc8e36b 100644
--- a/crlcore/src/ccore/Environment.cpp
+++ b/crlcore/src/ccore/Environment.cpp
@@ -210,6 +210,8 @@ namespace {
envPath = env.getCORIOLIS_TOP() + "/" + sysConfDir + "/coriolis2/environment.alliance.xml" ;
}
+ cmess1 << " - <" << envPath << ">." << endl;
+
return ep._load ( envPath, warnNotFound );
}
@@ -391,6 +393,7 @@ namespace {
{
unsigned int mode = Environment::Append;
QString modeAttribute = _reader->attributes().value("mode").toString();
+ QString nameAttribute = _reader->attributes().value("name").toString();
if ( not modeAttribute.isEmpty() ) {
if ( modeAttribute == "append" ) mode = Environment::Append;
@@ -403,9 +406,13 @@ namespace {
string library = readTextAsString().toStdString();
expandVariables ( library );
+
+ string libName = nameAttribute.toStdString();
+ if ( libName.empty() ) libName = SearchPath::extractLibName ( library );
+
switch ( _state ) {
case WorkingLibrary: _environment.setWORKING_LIBRARY ( library.c_str() ); break;
- case SystemLibrary: _environment.addSYSTEM_LIBRARY ( library.c_str(), mode ); break;
+ case SystemLibrary: _environment.addSYSTEM_LIBRARY ( library.c_str(), libName.c_str(), mode ); break;
}
}
@@ -651,14 +658,14 @@ namespace CRL {
s << " o Libraries.\n"
<< " - Catalog := \"" << _CATALOG << "\"\n"
<< " - Working Library:\n"
- << " 0:\"" << _LIBRARIES[0] << "\"\n"
+ << " 0:\"" << _LIBRARIES[0].getPath() << "\"\n"
<< " - System Libraries:\n";
if ( _LIBRARIES.getSize() <= 1 ) {
s << " .\n";
} else {
for ( size_t i = 1; i < _LIBRARIES.getSize() ; i++ ) {
- s << " " << setw(2) << i << ":\"" << _LIBRARIES[i] << "\"\n";
+ s << " " << setw(2) << i << ":\"" << _LIBRARIES[i].getPath() << "\"\n";
}
}
@@ -737,26 +744,44 @@ namespace CRL {
}
- void Environment::addSYSTEM_LIBRARY ( const char* value, unsigned int mode )
+ void Environment::addSYSTEM_LIBRARY ( const char* value, const char* libName, unsigned int mode )
{
- if ( mode == Prepend ) { _LIBRARIES.prepend(value); return; }
- if ( mode == Append ) { _LIBRARIES.append (value); return; }
+ if ( mode == Prepend ) { _LIBRARIES.prepend(value,libName); return; }
+ if ( mode == Append ) { _LIBRARIES.append (value,libName); return; }
- string newLibName = _getLibraryName ( value );
+ string newLibName = libName;
for ( size_t i=0 ; i < _LIBRARIES.getSize() ; ++i ) {
- if ( newLibName == _getLibraryName(_LIBRARIES[i]) ) {
- _LIBRARIES.replace ( value, i );
+ if ( newLibName == _LIBRARIES[i].getName() ) {
+ _LIBRARIES.replace ( value, newLibName, i );
return;
}
}
- _LIBRARIES.append (value);
+ _LIBRARIES.append (value,libName);
}
- string Environment::_getLibraryName ( const std::string& path )
+ string Environment::_getString () const
+ { return ""; }
+
+
+ Record *Environment::_getRecord () const
{
- size_t slash = path.rfind ( '/' );
- return path.substr ( (slash!=string::npos)?slash+1:0 );
+ Record* record = new Record ( "" );
+ record->add ( getSlot ( "_CORIOLIS_TOP" , &_CORIOLIS_TOP ) );
+ record->add ( getSlot ( "_displayStyle" , &_displayStyle ) );
+ record->add ( getSlot ( "_SCALE_X" , &_SCALE_X ) );
+ record->add ( getSlot ( "_SYMBOLIC_TECHNOLOGY", &_SYMBOLIC_TECHNOLOGY ) );
+ record->add ( getSlot ( "_REAL_TECHNOLOGY" , &_REAL_TECHNOLOGY ) );
+ record->add ( getSlot ( "_DISPLAY" , &_DISPLAY ) );
+ record->add ( getSlot ( "_IN_LO" , &_IN_LO ) );
+ record->add ( getSlot ( "_IN_PH" , &_IN_PH ) );
+ record->add ( getSlot ( "_POWER" , &_POWER ) );
+ record->add ( getSlot ( "_GROUND" , &_GROUND ) );
+ record->add ( getSlot ( "_CLOCK" , &_CLOCK ) );
+ record->add ( getSlot ( "_OBSTACLE" , &_OBSTACLE ) );
+ record->add ( getSlot ( "_pad" , &_pad ) );
+ record->add ( getSlot ( "_LIBRARIES" , &_LIBRARIES ) );
+ return record;
}
diff --git a/crlcore/src/ccore/SearchPath.cpp b/crlcore/src/ccore/SearchPath.cpp
index 43f79c19..e09119e1 100644
--- a/crlcore/src/ccore/SearchPath.cpp
+++ b/crlcore/src/ccore/SearchPath.cpp
@@ -38,6 +38,24 @@ namespace CRL {
using namespace std;
+
+ string SearchPath::Element::_getString () const
+ {
+ ostringstream s;
+
+ s << "";
+ return s.str();
+ }
+
+
+ Record *SearchPath::Element::_getRecord () const
+ {
+ Record* record = new Record ( "" );
+ record->add ( getSlot ( "_path", &_path ) );
+ record->add ( getSlot ( "_name", &_name ) );
+ return record;
+ }
+
const size_t SearchPath::npos = (size_t)-1;
const string SearchPath::_selectFailed = "";
@@ -49,9 +67,16 @@ namespace CRL {
{ }
- bool SearchPath::_canOpen ( const string& directory, const string& file, ios::openmode mode )
+ string SearchPath::extractLibName ( const string& path )
{
- _selected = directory + "/" + file;
+ size_t slash = path.rfind ( '/' );
+ return path.substr ( (slash!=string::npos) ? slash+1 : 0 );
+ }
+
+
+ bool SearchPath::_canOpen ( const SearchPath::Element& directory, const string& file, ios::openmode mode )
+ {
+ _selected = directory.getPath() + "/" + file;
fstream filestream ( _selected.c_str(), mode );
if ( filestream.is_open() ) {
filestream.close ();
@@ -62,30 +87,30 @@ namespace CRL {
}
- void SearchPath::prepend ( const std::string& path )
+ void SearchPath::prepend ( const std::string& path, const std::string& name )
{
- vector::iterator ipath = _paths.begin();
+ vector::iterator ipath = _paths.begin();
_index = 0;
if ( ipath != _paths.end() ) { ++ipath; ++_index; }
- _paths.insert ( ipath, path );
+ _paths.insert ( ipath, Element(path,name) );
}
- void SearchPath::replace ( const string& path, size_t index )
+ void SearchPath::replace ( const string& path, const std::string& name, size_t index )
{
_index = index;
if ( index < _paths.size() )
- _paths[index] = path;
+ _paths[index] = Element(path,name);
}
void SearchPath::select ( const string& path )
{
for ( size_t ipath=0 ; ipath < _paths.size() ; ++ipath ) {
- if ( _paths[ipath] == path ) {
- _selected = _paths[ipath];
+ if ( _paths[ipath].getPath() == path ) {
+ _selected = _paths[ipath].getPath();
_index = ipath;
return;
}
@@ -113,17 +138,17 @@ namespace CRL {
size_t SearchPath::hasPath ( const string& path ) const
{
for ( size_t i=0 ; i < _paths.size() ; i++ )
- if ( _paths[i] == path ) return i;
+ if ( _paths[i].getPath() == path ) return i;
return npos;
}
- const string& SearchPath::operator[] ( size_t index ) const
+ const SearchPath::Element& SearchPath::operator[] ( size_t index ) const
{
- static const string OutOfBound = "";
+ static Element nullElement;
if ( index < _paths.size() ) return _paths[index];
- return OutOfBound;
+ return nullElement;
}
diff --git a/crlcore/src/ccore/Utilities.cpp b/crlcore/src/ccore/Utilities.cpp
index 4f4a6eab..62f1b8e3 100644
--- a/crlcore/src/ccore/Utilities.cpp
+++ b/crlcore/src/ccore/Utilities.cpp
@@ -99,7 +99,8 @@ namespace {
std::string environmentMapper ( std::string environmentName )
{
- if ( environmentName == "CORIOLIS_TOP" ) return "coriolis_top";
+ if ( environmentName == "HOME" ) return "home";
+ else if ( environmentName == "CORIOLIS_TOP" ) return "coriolis_top";
else if ( environmentName == "STRATUS_MAPPING_NAME" ) return "stratus_mapping_name";
return "";
}
@@ -236,6 +237,8 @@ namespace CRL {
// Environment variables reading.
boptions::options_description options ("Environment Variables");
options.add_options()
+ ( "home" , boptions::value()
+ , "User's home directory." )
( "coriolis_top" , boptions::value()->default_value(CORIOLIS_TOP)
, "The root directory of the Coriolis installation tree." )
( "stratus_mapping_name", boptions::value()
@@ -260,7 +263,7 @@ namespace CRL {
bfs::path sysConfDir ( SYS_CONF_DIR );
if ( not sysConfDir.has_root_path() ) {
if ( arguments.count("coriolis_top") ) {
- const boptions::variable_value& value = arguments["coriolis_top"];
+ // const boptions::variable_value& value = arguments["coriolis_top"];
// cerr << "value:"
// << " empty:" << boolalpha << value.empty()
// << " defaulted:" << boolalpha << value.defaulted()
@@ -320,6 +323,14 @@ namespace CRL {
,systemConfFile.string().c_str()) << endl;
}
+ bool homeConfFound = false;
+ bfs::path homeConfFile = arguments["home"].as();
+ homeConfFile /= ".coriolis2.configuration.xml";
+ if ( bfs::exists(homeConfFile) ) {
+ homeConfFound = true;
+ conf->readFromFile ( homeConfFile.string() );
+ }
+
bool dotConfFound = false;
bfs::path dotConfFile = "./.coriolis2.configuration.xml";
if ( bfs::exists(dotConfFile) ) {
@@ -340,6 +351,7 @@ namespace CRL {
if ( cmess1.enabled() ) {
cmess1 << " o Reading Configuration. " << endl;
if (systemConfFound) cmess1 << " - <" << systemConfFile.string() << ">." << endl;
+ if (homeConfFound) cmess1 << " - <" << homeConfFile.string() << ">." << endl;
if (dotConfFound) cmess1 << " - <" << dotConfFile.string() << ">." << endl;
}
}
diff --git a/crlcore/src/ccore/alliance/vst/VstParserGrammar.yy b/crlcore/src/ccore/alliance/vst/VstParserGrammar.yy
index 5c1c1cf6..26184743 100644
--- a/crlcore/src/ccore/alliance/vst/VstParserGrammar.yy
+++ b/crlcore/src/ccore/alliance/vst/VstParserGrammar.yy
@@ -1282,7 +1282,7 @@ void vstParser ( const string cellPath, Cell *cell )
, Catalog::State::Views
, __ys->_state->getDepth()-1) ) {
throw Error ( "CParsVst():\n"
- " Unable to find cell \"%s\", please check your CRL_CATA_LIB.\n"
+ " Unable to find cell \"%s\", please check your <.environment.alliance.xml>.\n"
, getString(__ys->_cellQueue.front()).c_str()
);
}
diff --git a/crlcore/src/ccore/crlcore/AllianceFramework.h b/crlcore/src/ccore/crlcore/AllianceFramework.h
index 49aa4112..8d54f911 100644
--- a/crlcore/src/ccore/crlcore/AllianceFramework.h
+++ b/crlcore/src/ccore/crlcore/AllianceFramework.h
@@ -79,9 +79,9 @@ namespace CRL {
inline Library* getParentLibrary ();
Library* getLibrary ( unsigned int index );
AllianceLibrary* getAllianceLibrary ( unsigned int index );
- AllianceLibrary* getAllianceLibrary ( const Name& path, unsigned int& flags );
+ AllianceLibrary* getAllianceLibrary ( const Name& libName, unsigned int& flags );
AllianceLibrary* getAllianceLibrary ( Library* );
- AllianceLibrary* createLibrary ( const string& path, unsigned int& flags );
+ AllianceLibrary* createLibrary ( const string& path, unsigned int& flags, string libName="" );
void saveLibrary ( Library* );
void saveLibrary ( AllianceLibrary* );
RoutingGauge* getRoutingGauge ( const Name& name="" );
@@ -99,6 +99,10 @@ namespace CRL {
unsigned int loadLibraryCells ( Library* );
unsigned int loadLibraryCells ( const Name& );
static size_t getInstancesCount ( Cell*, unsigned int flags );
+ // Hurricane Managment.
+ inline string _getTypeName () const;
+ string _getString () const;
+ Record* _getRecord () const;
// Internals - Attributes.
protected:
@@ -154,9 +158,13 @@ namespace CRL {
// TEMPORARY.
inline const Name AllianceFramework::getDefaultCGPinLayerName
() const { return "CALU1"; }
+ inline string AllianceFramework::_getTypeName () const { return "AllianceFramework"; }
} // End of CRL namespace.
+INSPECTOR_P_SUPPORT(CRL::AllianceFramework);
+
+
#endif // __CRL_ALLIANCE_FRAMEWORK__
diff --git a/crlcore/src/ccore/crlcore/AllianceLibrary.h b/crlcore/src/ccore/crlcore/AllianceLibrary.h
index 6d8ed6db..400bfee8 100644
--- a/crlcore/src/ccore/crlcore/AllianceLibrary.h
+++ b/crlcore/src/ccore/crlcore/AllianceLibrary.h
@@ -118,4 +118,7 @@ namespace CRL {
} // End of CRL namespace.
+INSPECTOR_P_SUPPORT(CRL::AllianceLibrary);
+
+
#endif
diff --git a/crlcore/src/ccore/crlcore/Catalog.h b/crlcore/src/ccore/crlcore/Catalog.h
index 4bfd072f..78a41249 100644
--- a/crlcore/src/ccore/crlcore/Catalog.h
+++ b/crlcore/src/ccore/crlcore/Catalog.h
@@ -123,8 +123,8 @@ namespace CRL {
inline void setDepth ( unsigned int depth );
// Hurricane Management.
inline string _getTypeName () const;
- inline string _getString () const;
- inline Record* _getRecord () const;
+ string _getString () const;
+ Record* _getRecord () const;
private:
// Internal - Attributes.
@@ -389,5 +389,8 @@ namespace CRL {
inline std::string getPrint ( const CRL::Catalog &CATAL ) { return CATAL._getPrint(); }
+INSPECTOR_P_SUPPORT(CRL::Catalog);
+INSPECTOR_P_SUPPORT(CRL::Catalog::State);
+
#endif
diff --git a/crlcore/src/ccore/crlcore/Environment.h b/crlcore/src/ccore/crlcore/Environment.h
index 01012d64..ced3f042 100644
--- a/crlcore/src/ccore/crlcore/Environment.h
+++ b/crlcore/src/ccore/crlcore/Environment.h
@@ -29,7 +29,6 @@
#include
#include
-
#include
@@ -92,10 +91,13 @@ namespace CRL {
void setPad ( const char* value );
inline void setCATALOG ( const char* value );
inline void setWORKING_LIBRARY ( const char* value );
- void addSYSTEM_LIBRARY ( const char* value, unsigned int mode=Append );
+ void addSYSTEM_LIBRARY ( const char* value, const char* libName, unsigned int mode=Append );
// Methods.
std::string getPrint () const;
+ inline std::string _getTypeName () const;
+ std::string _getString () const;
+ Record* _getRecord () const;
protected:
// Internal: Attributes.
@@ -126,7 +128,6 @@ namespace CRL {
private:
void _setRegex ( regex_t* regex, const std::string& pattern, const char* name );
void _check () const;
- static std::string _getLibraryName ( const std::string& path );
};
@@ -159,10 +160,14 @@ namespace CRL {
inline void Environment::setOUT_LO ( const char* value ) { _OUT_LO = value; }
inline void Environment::setOUT_PH ( const char* value ) { _OUT_PH = value; }
inline void Environment::setCATALOG ( const char* value ) { _CATALOG = value; }
- inline void Environment::setWORKING_LIBRARY ( const char* value ) { _LIBRARIES.replace(value,0); }
+ inline void Environment::setWORKING_LIBRARY ( const char* value ) { _LIBRARIES.replace(value,"working",0); }
+ inline std::string Environment::_getTypeName () const { return "Environment"; }
} // End of CRL namespace.
+INSPECTOR_P_SUPPORT(CRL::Environment);
+
+
# endif
diff --git a/crlcore/src/ccore/crlcore/SearchPath.h b/crlcore/src/ccore/crlcore/SearchPath.h
index f4bc8f37..a6833a7e 100644
--- a/crlcore/src/ccore/crlcore/SearchPath.h
+++ b/crlcore/src/ccore/crlcore/SearchPath.h
@@ -43,32 +43,47 @@ namespace CRL {
class SearchPath {
public:
- static const size_t npos;
- SearchPath ();
+ class Element {
+ public:
+ inline Element ( const std::string& path="", const std::string& name="" );
+ inline bool empty () const;
+ inline const std::string& getPath () const;
+ inline const std::string& getName () const;
+ inline std::string _getTypeName () const;
+ std::string _getString () const;
+ Record* _getRecord () const;
+ private:
+ std::string _path;
+ std::string _name;
+ };
public:
- inline void reset ();
- inline void append ( const std::string& path );
- void prepend ( const std::string& path );
- void replace ( const std::string& path, size_t index );
- size_t locate ( const std::string& file
- , std::ios::openmode mode =std::ios::in
- , int first=0
- , int last =64 );
- void select ( const std::string& );
- inline size_t getSize () const;
- inline const std::string& getSelected () const;
- inline size_t getIndex () const;
- inline bool hasSelected () const;
- size_t hasPath ( const std::string& path ) const;
- const std::string& operator[] ( size_t index ) const;
+ static const size_t npos;
+ static std::string extractLibName ( const std::string& );
+ SearchPath ();
+ public:
+ inline void reset ();
+ inline void append ( const std::string& path, const std::string& name="" );
+ void prepend ( const std::string& path, const std::string& name="");
+ void replace ( const std::string& path, const std::string&, size_t index );
+ size_t locate ( const std::string& file
+ , std::ios::openmode mode =std::ios::in
+ , int first=0
+ , int last =64 );
+ void select ( const std::string& );
+ inline size_t getSize () const;
+ inline const std::string& getSelected () const;
+ inline size_t getIndex () const;
+ inline bool hasSelected () const;
+ size_t hasPath ( const std::string& path ) const;
+ const Element& operator[] ( size_t index ) const;
private:
static const std::string _selectFailed;
- std::vector _paths;
+ std::vector _paths;
size_t _index;
std::string _selected;
private:
SearchPath ( const SearchPath& );
- bool _canOpen ( const std::string& directory
+ bool _canOpen ( const Element& directory
, const std::string& file
, std::ios::openmode mode
);
@@ -81,16 +96,32 @@ namespace CRL {
// Inline Functions.
inline void SearchPath::reset () { _paths.resize(1); }
- inline void SearchPath::append ( const std::string& path ) { _paths.push_back(path); }
inline size_t SearchPath::getSize () const { return _paths.size(); }
inline const std::string& SearchPath::getSelected () const { return _selected; }
inline size_t SearchPath::getIndex () const { return _index; }
inline bool SearchPath::hasSelected () const { return _index != npos; }
inline std::string SearchPath::_getTypeName () const { return _TName("SearchPath"); }
+ inline void SearchPath::append ( const std::string& path, const std::string& name ) {
+ _paths.push_back ( Element ( path, name.empty()?extractLibName(path):name ) );
+ }
+
+ inline SearchPath::Element::Element ( const std::string& path, const std::string& name )
+ : _path(path)
+ , _name(name.empty()?SearchPath::extractLibName(path):name)
+ { }
+
+ inline bool SearchPath::Element::empty () const { return _path.empty() and _name.empty(); }
+ inline const std::string& SearchPath::Element::getPath () const { return _path; }
+ inline const std::string& SearchPath::Element::getName () const { return _name; }
+ inline std::string SearchPath::Element::_getTypeName () const { return "SearchPath::Element"; }
} // End of CRL namespace.
+INSPECTOR_P_SUPPORT(CRL::SearchPath);
+INSPECTOR_V_SUPPORT(CRL::SearchPath::Element);
+
+
# endif