
 // -*- C++ -*-


 namespace CRL {

 /*! \class        SearchPath
  *  \brief        An ordered list of search pathes.
  *
  *                The SearchPath is an AllianceFramework owned object, and as such
  *                it's constructors & destructors are made inaccessible by the
  *                outside world.
  */

   
 /*! \function     std::string  SearchPath::extractLibName(const std::string&);
  *  \return       the library name guessed from a directory path. This is the
  *                last component of the, stripped of any extention.
  */
 /*! \function     size_t  SearchPath::getSize() const;
  *  \return       the number of search path elements (directories).
  */
 /*! \function     const std::string& SearchPath::getSelected() const;
  *  \return       the search path element selected through the last locate request.
  */
 /*! \function     size_t  SearchPath::getIndex() const;
  *  \return       the index of search path element selected through the last locate request.
  */
 /*! \function     bool  SearchPath::hasSelected() const;
  *  \return       \true if an element is currently selected (a locate has been performed).
  */
 /*! \function     bool  SearchPath::hasPath(const std::string& path) const;
  *  \return       \true if the path is present in the search path (at any position).
  */
 /*! \function     const Element& SearchPath::operator[](size_t index) const;
  *  \return       The search path element at position \c index. If \c index is out of
  *                bounds, an empty Element is returned.
  */

   
 /*! \function     void  SearchPath::reset();
  *                Clear all the search path. Only the first, corresponding to the
  *                working library is kept.
  */
 /*! \function     void  SearchPath::append(const std::string& path, const std::string& name="");
  *                Append a search path. The \c name gives the library name.
  */
 /*! \function     void  SearchPath::prepend(const std::string& path, const std::string& name="");
  *                Prepend a search path. The \c name gives the library name.
  */
 /*! \function     void  SearchPath::replace(const std::string& path, const std::string& name, size_t index);
  *                Replace the search path element at index \c index.
  */
 /*! \function     size_t  SearchPath::locate(const std::string& file, std::ios::openmode mode =std::ios::in, int first=0, int last =64);
  *  \param        file      the requested file.
  *  \param        mode      the wanted opening mode.
  *  \param        first     the lower bound in the search path elements.
  *  \param        last      the upper bound in the search path elements.
  *  \Return       the index of the search path element in which the file has been found.
  *
  *                Try to locate a file named \c file (without leading path, but with extention)
  *                and check if it can be opened in the desired \c mode. The file is not left
  *                opened, but the memory of the search is kept for further operations. 
  */


 /*! \class        SearchPath::Element
  *  \brief        An element of the search path (mapping a directory).
  *
  */

   
 /*! \function     SearchPath::Element::Element(const std::string& path="", const std::string& name="");
  *                A new element bound to \c path, with library \c name.
  */

   
 /*! \function     size_t  SearchPath::Element::empty() const;
  *  \return       \true if the element is empty (no path).
  */
 /*! \function     const std::string& SearchPath::Element::getPath() const;
  *  \return       the \c path (directory) of the element.
  */
 /*! \function     const std::string& SearchPath::Element::getName() const;
  *  \return       the \c name (of the library) of the element.
  */

 }
