CMS 3D CMS Logo

SearchPath.h

Go to the documentation of this file.
00001 #ifndef CLASSLIB_SEARCH_PATH_H
00002 # define CLASSLIB_SEARCH_PATH_H
00003 
00004 //<<<<<< INCLUDES                                                       >>>>>>
00005 
00006 # include "classlib/iobase/Filename.h"
00007 # include <string>
00008 # include <list>
00009 # undef SearchPath // Ugh, defined by windows to SearchPath[UA]
00010 
00011 namespace lat {
00012 //<<<<<< PUBLIC DEFINES                                                 >>>>>>
00013 //<<<<<< PUBLIC CONSTANTS                                               >>>>>>
00014 //<<<<<< PUBLIC TYPES                                                   >>>>>>
00015 
00016 class SearchPath;
00017 class logstream;
00018 
00019 //<<<<<< PUBLIC VARIABLES                                               >>>>>>
00020 //<<<<<< PUBLIC FUNCTIONS                                               >>>>>>
00021 
00022 logstream &operator<< (logstream &out, const SearchPath &path);
00023 
00024 //<<<<<< CLASS DECLARATIONS                                             >>>>>>
00025 
00027 class SearchPath
00028 {
00029     typedef std::list<Filename>                 DirList;
00030 public:
00031     typedef DirList::iterator                   iterator;
00032     typedef DirList::const_iterator             const_iterator;
00033     typedef DirList::reverse_iterator           reverse_iterator;
00034     typedef DirList::const_reverse_iterator     const_reverse_iterator;
00035 
00036     typedef DirList::size_type                  size_type;
00037     typedef DirList::reference                  reference;
00038     typedef DirList::const_reference            const_reference;
00039 
00040     SearchPath (void);
00041     explicit SearchPath (const std::string &path);
00042 # if HAVE_MEMBER_TEMPLATES
00043     template <class I> SearchPath (I first, I last);
00044 # else
00045     SearchPath (const_iterator first, const_iterator last);
00046 # endif
00047     // default copy constructor
00048     // default destructor
00049     // default assignment operator
00050 
00051     // general queries
00052     bool                        operator== (const SearchPath &x);
00053     bool                        empty (void) const;
00054     size_type                   size (void) const;
00055 
00056     // member access
00057     iterator                    begin (void);
00058     const_iterator              begin (void) const;
00059     iterator                    end (void);
00060     const_iterator              end (void) const;
00061 
00062     reverse_iterator            rbegin (void);
00063     const_reverse_iterator      rbegin (void) const;
00064     reverse_iterator            rend (void);
00065     const_reverse_iterator      rend (void) const;
00066 
00067     reference                   front (void);
00068     const_reference             front (void) const;
00069     reference                   back (void);
00070     const_reference             back (void) const;
00071 
00072     // alterations
00073     void                        swap (SearchPath &x);
00074 
00075     void                        push_front (const Filename &dir);
00076     void                        push_back (const Filename &dir);
00077     iterator                    insert (iterator pos, const Filename &dir);
00078     void                        insert (iterator pos, const_iterator first,
00079                                         const_iterator last);
00080 
00081     void                        pop_front (void);
00082     void                        pop_back (void);
00083     iterator                    erase (iterator pos);
00084     iterator                    erase (iterator first, iterator last);
00085     void                        clear (void);
00086 
00087     void                        splice (iterator pos, SearchPath &x);
00088     void                        splice (iterator pos, SearchPath &x,
00089                                         iterator i);
00090     void                        splice (iterator pos, SearchPath &x,
00091                                         iterator first, iterator last);
00092 
00093     void                        remove (const Filename &dir);
00094     void                        reverse (void);
00095 
00096     // file search services (FIXME: should these accept mode to
00097     // describe what one should search for: existence, read, write,
00098     // execute, combinations?)
00099     Filename                    expand (const Filename &name) const;
00100     const_iterator              search (const Filename &name) const;
00101     const_iterator              search (const_iterator from,
00102                                         const Filename &name) const;
00103 
00104     // system information
00105     static const char *         separator (void);
00106 
00107 private:
00108     DirList                     m_list;
00109 };
00110 
00111 //<<<<<< INLINE PUBLIC FUNCTIONS                                        >>>>>>
00112 //<<<<<< INLINE MEMBER FUNCTIONS                                        >>>>>>
00113 
00115 inline
00116 SearchPath::SearchPath (void)
00117 {}
00118 
00119 # if HAVE_MEMBER_TEMPLATES
00120 
00121 template <class I> inline
00122 SearchPath::SearchPath (I first, I last)
00123     : m_list (first, last)
00124 {}
00125 # else // ! HAVE_MEMBER_TEMPLATES
00126 
00127 inline
00128 SearchPath::SearchPath (const_iterator first, const_iterator last)
00129     : m_list (first, last)
00130 {}
00131 # endif // HAVE_MEMBER_TEMPLATES
00132 
00136 inline bool
00137 SearchPath::operator== (const SearchPath &x)
00138 { return m_list == x.m_list; }
00139 
00141 inline bool
00142 SearchPath::empty (void) const
00143 { return m_list.empty (); }
00144 
00146 inline SearchPath::size_type
00147 SearchPath::size (void) const
00148 { return m_list.size (); }
00149 
00151 inline SearchPath::iterator
00152 SearchPath::begin (void)
00153 { return m_list.begin (); }
00154 
00156 inline SearchPath::const_iterator
00157 SearchPath::begin (void) const
00158 { return m_list.begin (); }
00159 
00161 inline SearchPath::iterator
00162 SearchPath::end (void)
00163 { return m_list.end (); }
00164 
00166 inline SearchPath::const_iterator
00167 SearchPath::end (void) const
00168 { return m_list.end (); }
00169 
00171 inline SearchPath::reverse_iterator
00172 SearchPath::rbegin (void)
00173 { return m_list.rbegin (); }
00174 
00176 inline SearchPath::const_reverse_iterator
00177 SearchPath::rbegin (void) const
00178 { return m_list.rbegin (); }
00179 
00181 inline SearchPath::reverse_iterator
00182 SearchPath::rend (void)
00183 { return m_list.rend (); }
00184 
00186 inline SearchPath::const_reverse_iterator
00187 SearchPath::rend (void) const
00188 { return m_list.rend (); }
00189 
00192 inline SearchPath::reference
00193 SearchPath::front (void)
00194 { return m_list.front (); }
00195 
00198 inline SearchPath::const_reference
00199 SearchPath::front (void) const
00200 { return m_list.front (); }
00201 
00204 inline SearchPath::reference
00205 SearchPath::back (void)
00206 { return m_list.back (); }
00207 
00210 inline SearchPath::const_reference
00211 SearchPath::back (void) const
00212 { return m_list.back (); }
00213 
00215 inline void
00216 SearchPath::swap (SearchPath &x)
00217 { m_list.swap (x.m_list); }
00218 
00220 inline void
00221 SearchPath::push_front (const Filename &dir)
00222 { m_list.push_front (dir); }
00223 
00225 inline void
00226 SearchPath::push_back (const Filename &dir)
00227 { m_list.push_back (dir); }
00228 
00231 inline SearchPath::iterator
00232 SearchPath::insert (iterator pos, const Filename &dir)
00233 { return m_list.insert (pos, dir); }
00234 
00238 inline void
00239 SearchPath::insert (iterator pos, const_iterator first, const_iterator last)
00240 { m_list.insert (pos, first, last); }
00241 
00244 inline void
00245 SearchPath::pop_front (void)
00246 { m_list.pop_front (); }
00247 
00250 inline void
00251 SearchPath::pop_back (void)
00252 { m_list.pop_back (); }
00253 
00256 inline SearchPath::iterator
00257 SearchPath::erase (iterator pos)
00258 { return m_list.erase (pos); }
00259 
00262 inline SearchPath::iterator
00263 SearchPath::erase (iterator first, iterator last)
00264 { return m_list.erase (first, last); }
00265 
00267 inline void
00268 SearchPath::clear (void)
00269 { m_list.clear (); }
00270 
00273 inline void
00274 SearchPath::splice (iterator pos, SearchPath &x)
00275 { m_list.splice (pos, x.m_list); }
00276 
00281 inline void
00282 SearchPath::splice (iterator pos, SearchPath &x, iterator i)
00283 { m_list.splice (pos, x.m_list, i); }
00284 
00290 inline void
00291 SearchPath::splice (iterator pos, SearchPath &x, iterator first, iterator last)
00292 { m_list.splice (pos, x.m_list, first, last); }
00293 
00295 inline void
00296 SearchPath::remove (const Filename &dir)
00297 { m_list.remove (dir); }
00298 
00300 inline void
00301 SearchPath::reverse (void)
00302 { m_list.reverse (); }
00303 
00311 inline SearchPath::const_iterator
00312 SearchPath::search (const Filename &name) const
00313 { return search (begin (), name); }
00314 
00315 } // namespace lat
00316 #endif // CLASSLIB_SEARCH_PATH_H

Generated on Tue Jun 9 17:38:55 2009 for CMSSW by  doxygen 1.5.4