STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Types | Public Member Functions | Public Attributes | List of all members
tr2::sys::basic_path< _String, _Traits > Class Template Reference

Public Types

typedef basic_path< _String, _Traits > path_type
 
typedef _String string_type
 
typedef _Traits traits_type
 
typedef _String::value_type value_type
 
typedef _Traits::external_string_type external_string_type
 
typedef _Path_iterator< path_typeiterator
 
typedef iterator const_iterator
 

Public Member Functions

 basic_path ()
 
 basic_path (const string_type &_Str)
 
 basic_path (const value_type *_Ptr)
 
template<class _InIt >
 basic_path (_InIt _First, _InIt _Last)
 
 basic_path (const basic_path &_Right)
 
basic_pathoperator= (const basic_path &_Right)
 
 ~basic_path () _NOEXCEPT
 
 basic_path (basic_path &&_Right)
 
basic_pathoperator= (basic_path &&_Right)
 
basic_pathoperator= (const string_type &_Str)
 
basic_pathoperator= (const value_type *_Ptr)
 
template<class _InIt >
basic_pathassign (_InIt _First, _InIt _Last)
 
basic_pathoperator/= (const basic_path &_Pval)
 
basic_pathoperator/= (const string_type &_Str)
 
basic_pathoperator/= (const value_type *_Ptr)
 
template<class _InIt >
basic_pathappend (_InIt _First, _InIt _Last)
 
void clear ()
 
void swap (basic_path &_Right)
 
basic_pathremove_leaf ()
 
basic_pathremove_filename ()
 
basic_pathreplace_extension (const string_type &_Newext=string_type())
 
string_type string () const
 
string_type file_string () const
 
 operator string_type () const
 
string_type directory_string () const
 
external_string_type external_file_string () const
 
external_string_type external_directory_string () const
 
string_type root_name () const
 
string_type root_directory () const
 
string_type leaf () const
 
string_type filename () const
 
basic_path root_path () const
 
basic_path relative_path () const
 
basic_path branch_path () const
 
basic_path parent_path () const
 
string_type basename () const
 
string_type stem () const
 
string_type extension () const
 
bool empty () const
 
bool is_complete () const
 
bool has_root_name () const
 
bool has_root_directory () const
 
bool has_leaf () const
 
bool has_filename () const
 
bool has_root_path () const
 
bool has_relative_path () const
 
bool has_branch_path () const
 
bool has_parent_path () const
 
iterator begin () const
 
iterator end () const
 
size_t _Prefix_end () const
 
size_t _Root_end () const
 
const value_type_Ptr () const
 

Public Attributes

string_type _Mystr
 

Member Typedef Documentation

template<class _String , class _Traits >
typedef iterator tr2::sys::basic_path< _String, _Traits >::const_iterator
template<class _String , class _Traits >
typedef _Traits::external_string_type tr2::sys::basic_path< _String, _Traits >::external_string_type
template<class _String , class _Traits >
typedef _Path_iterator<path_type> tr2::sys::basic_path< _String, _Traits >::iterator
template<class _String , class _Traits >
typedef basic_path<_String, _Traits> tr2::sys::basic_path< _String, _Traits >::path_type
template<class _String , class _Traits >
typedef _String tr2::sys::basic_path< _String, _Traits >::string_type
template<class _String , class _Traits >
typedef _Traits tr2::sys::basic_path< _String, _Traits >::traits_type
template<class _String , class _Traits >
typedef _String::value_type tr2::sys::basic_path< _String, _Traits >::value_type

Constructor & Destructor Documentation

template<class _String , class _Traits >
tr2::sys::basic_path< _String, _Traits >::basic_path ( )
inline
283  { // default construct
284  }
template<class _String , class _Traits >
tr2::sys::basic_path< _String, _Traits >::basic_path ( const string_type _Str)
inline
287  { // construct from string
288  *this /= _Str;
289  }
template<class _String , class _Traits >
tr2::sys::basic_path< _String, _Traits >::basic_path ( const value_type _Ptr)
inline
292  { // construct from NTBS
293  *this /= _Ptr;
294  }
const value_type * _Ptr() const
Definition: filesystem:648
template<class _String , class _Traits >
template<class _InIt >
tr2::sys::basic_path< _String, _Traits >::basic_path ( _InIt  _First,
_InIt  _Last 
)
inline
298  { // construct from [_First, _Last)
299  append(_First, _Last);
300  }
basic_path & append(_InIt _First, _InIt _Last)
Definition: filesystem:373
_FwdIt _Last
Definition: algorithm:1936
template<class _String , class _Traits >
tr2::sys::basic_path< _String, _Traits >::basic_path ( const basic_path< _String, _Traits > &  _Right)
inline
303  : _Mystr(_Right._Mystr)
304  { // copy construct
305  }
string_type _Mystr
Definition: filesystem:653
const _Ty & _Right
Definition: algorithm:4087
template<class _String , class _Traits >
tr2::sys::basic_path< _String, _Traits >::~basic_path ( )
inline
314  { // destroy the object
315  }
template<class _String , class _Traits >
tr2::sys::basic_path< _String, _Traits >::basic_path ( basic_path< _String, _Traits > &&  _Right)
inline
318  : _Mystr(_STD move(_Right._Mystr))
319  { // move construct
320  }
_OutIt move(_InIt _First, _InIt _Last, _OutIt _Dest)
Definition: xutility:2447
string_type _Mystr
Definition: filesystem:653
const _Ty & _Right
Definition: algorithm:4087

Member Function Documentation

template<class _String , class _Traits >
size_t tr2::sys::basic_path< _String, _Traits >::_Prefix_end ( ) const
inline
630  { // get end of prefix
631  size_t _Idx = _Mystr.find(colon<path_type>::value, 0);
632  if (_Idx == _Mystr.npos)
633  _Idx = 0;
634  else
635  ++_Idx;
636  return (_Idx);
637  }
string_type _Mystr
Definition: filesystem:653
template<class _String , class _Traits >
const value_type* tr2::sys::basic_path< _String, _Traits >::_Ptr ( ) const
inline
649  { // get the stored string NTBS
650  return (_Mystr.c_str());
651  }
string_type _Mystr
Definition: filesystem:653
template<class _String , class _Traits >
size_t tr2::sys::basic_path< _String, _Traits >::_Root_end ( ) const
inline
640  { // get end of root
641  size_t _Idx = _Prefix_end();
642  if (_Idx < _Mystr.size()
643  && _Mystr[_Idx] == slash<path_type>::value)
644  ++_Idx;
645  return (_Idx);
646  }
size_t _Prefix_end() const
Definition: filesystem:629
string_type _Mystr
Definition: filesystem:653
template<class _String , class _Traits >
template<class _InIt >
basic_path& tr2::sys::basic_path< _String, _Traits >::append ( _InIt  _First,
_InIt  _Last 
)
inline
374  { // append [_First, _Last)
375  string_type _Str = _Mystr; // avoid overlap
376  size_t _Oldsize = _Str.size();
377  for (; _First != _Last && *_First != value_type(0); ++_First)
378  _Str.push_back(*_First);
379 
380  if (_Oldsize + 3 <= _Str.size()
381  && _Str[_Oldsize] == slash<path_type>::value
382  && _Str[_Oldsize + 1] == slash<path_type>::value
383  && _Str[_Oldsize + 2] == colon<path_type>::value)
384  _Str.erase(_Oldsize, 3); // drop leading escape sequence
385 
386  for (size_t _Idx = _Oldsize; _Idx < _Str.size(); ++_Idx)
387  if (_Str[_Idx] == _Altslash<path_type>::value)
388  _Str[_Idx] = slash<path_type>::value; // convert '\' to '/'
389 
390  if (0 < _Oldsize && _Oldsize < _Str.size()
391  && _Str[_Oldsize - 1] != colon<path_type>::value
392  && _Str[_Oldsize - 1] != slash<path_type>::value
393  && _Str[_Oldsize] != slash<path_type>::value)
394  _Str.insert(_Oldsize, 1, slash<path_type>::value); // add '/'
395 
396  _Mystr = _Str; // copy back new filename
397  return (*this);
398  }
_String string_type
Definition: filesystem:277
string_type _Mystr
Definition: filesystem:653
_String::value_type value_type
Definition: filesystem:279
_FwdIt _Last
Definition: algorithm:1936
template<class _String , class _Traits >
template<class _InIt >
basic_path& tr2::sys::basic_path< _String, _Traits >::assign ( _InIt  _First,
_InIt  _Last 
)
inline
347  { // assign from [_First, _Last)
348  clear();
349  return (append(_First, _Last));
350  }
void clear()
Definition: filesystem:400
basic_path & append(_InIt _First, _InIt _Last)
Definition: filesystem:373
_FwdIt _Last
Definition: algorithm:1936
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::basename ( ) const
inline
547  { // pick off base name in leaf before dot
548  string_type _Str = leaf();
549  size_t _Idx = _Str.rfind(dot<path_type>::value);
550  return (_Str.substr(0, _Idx));
551  }
_String string_type
Definition: filesystem:277
string_type leaf() const
Definition: filesystem:502
template<class _String , class _Traits >
iterator tr2::sys::basic_path< _String, _Traits >::begin ( ) const
inline
620  { // get beginning of path
621  return (iterator(*this, (size_t)0));
622  }
_Path_iterator< path_type > iterator
Definition: filesystem:616
template<class _String , class _Traits >
basic_path tr2::sys::basic_path< _String, _Traits >::branch_path ( ) const
inline
530  { // get branch path
531  basic_path _Ans;
532  if (!empty())
533  { // append all but last element
534  iterator _End = --end();
535  for (iterator _Next = begin(); _Next != _End; ++_Next)
536  _Ans /= *_Next;
537  }
538  return (_Ans);
539  }
Definition: xutility:337
iterator begin() const
Definition: filesystem:619
basic_path()
Definition: filesystem:282
bool empty() const
Definition: filesystem:566
iterator end() const
Definition: filesystem:624
template<class _String , class _Traits >
void tr2::sys::basic_path< _String, _Traits >::clear ( )
inline
401  { // clear the stored string
402  _Mystr.clear();
403  }
string_type _Mystr
Definition: filesystem:653
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::directory_string ( ) const
inline
473  { // get the stored string, directory form
474  return (file_string());
475  }
string_type file_string() const
Definition: filesystem:449
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::empty ( ) const
inline
567  { // test if stored string is empty
568  return (_Mystr.empty());
569  }
string_type _Mystr
Definition: filesystem:653
template<class _String , class _Traits >
iterator tr2::sys::basic_path< _String, _Traits >::end ( ) const
inline
625  { // get end of path
626  return (iterator(*this, _Mystr.size()));
627  }
string_type _Mystr
Definition: filesystem:653
_Path_iterator< path_type > iterator
Definition: filesystem:616
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::extension ( ) const
inline
559  { // pick off .extension in leaf, including dot
560  string_type _Str = leaf();
561  size_t _Idx = _Str.rfind(dot<path_type>::value);
562  return (_Idx == string_type::npos
563  ? string_type() : _Str.substr(_Idx));
564  }
_String string_type
Definition: filesystem:277
string_type leaf() const
Definition: filesystem:502
template<class _String , class _Traits >
external_string_type tr2::sys::basic_path< _String, _Traits >::external_directory_string ( ) const
inline
483  { // get external form of directory string
484  return (_Traits::to_external(*this, directory_string()));
485  }
string_type directory_string() const
Definition: filesystem:472
template<class _String , class _Traits >
external_string_type tr2::sys::basic_path< _String, _Traits >::external_file_string ( ) const
inline
478  { // get external form of file string
479  return (_Traits::to_external(*this, file_string()));
480  }
string_type file_string() const
Definition: filesystem:449
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::file_string ( ) const
inline
450  { // get the stored string, native form
451  string_type _Ans;
452  size_t _Idx = 0;
453  size_t _Size = _Mystr.size();
454 
455  if (2 <= _Size && _Mystr[0] == slash<path_type>::value)
456  while (_Idx < _Size - 1
457  && _Mystr[_Idx + 1] == slash<path_type>::value)
458  ++_Idx; // compress leading slashes
459  for (; _Idx < _Size; ++_Idx)
460  if (_Mystr[_Idx] == slash<path_type>::value)
461  _Ans.append(1, _Altslash<path_type>::value); // convert '/' to '\'
462  else
463  _Ans.append(1, _Mystr[_Idx]);
464  return (_Ans);
465  }
_String string_type
Definition: filesystem:277
string_type _Mystr
Definition: filesystem:653
_Check_return_ _In_ long _Size
Definition: io.h:325
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::filename ( ) const
inline
508  { // get leaf
509  return (leaf());
510  }
string_type leaf() const
Definition: filesystem:502
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::has_branch_path ( ) const
inline
607  { // test if branch path is nonempty
608  return (!branch_path().empty());
609  }
bool empty() const
Definition: filesystem:566
basic_path branch_path() const
Definition: filesystem:529
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::has_filename ( ) const
inline
592  { // test if leaf is nonempty
593  return (has_leaf());
594  }
bool has_leaf() const
Definition: filesystem:586
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::has_leaf ( ) const
inline
587  { // test if leaf is nonempty
588  return (!leaf().empty());
589  }
string_type leaf() const
Definition: filesystem:502
bool empty() const
Definition: filesystem:566
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::has_parent_path ( ) const
inline
612  { // test if branch path is nonempty
613  return (has_branch_path());
614  }
bool has_branch_path() const
Definition: filesystem:606
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::has_relative_path ( ) const
inline
602  { // test if relative path is nonempty
603  return (!relative_path().empty());
604  }
bool empty() const
Definition: filesystem:566
basic_path relative_path() const
Definition: filesystem:518
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::has_root_directory ( ) const
inline
582  { // test if root directory is nonempty
583  return (!root_directory().empty());
584  }
string_type root_directory() const
Definition: filesystem:492
bool empty() const
Definition: filesystem:566
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::has_root_name ( ) const
inline
577  { // test if root name is nonempty
578  return (!root_name().empty());
579  }
string_type root_name() const
Definition: filesystem:487
bool empty() const
Definition: filesystem:566
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::has_root_path ( ) const
inline
597  { // test if root path is nonempty
598  return (!root_path().empty());
599  }
basic_path root_path() const
Definition: filesystem:512
bool empty() const
Definition: filesystem:566
template<class _String , class _Traits >
bool tr2::sys::basic_path< _String, _Traits >::is_complete ( ) const
inline
572  { // test if root name is complete
573  return (has_root_name() && has_root_directory());
574  }
bool has_root_name() const
Definition: filesystem:576
bool has_root_directory() const
Definition: filesystem:581
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::leaf ( ) const
inline
503  { // get leaf
504  return (empty() ? string_type() : *--end());
505  }
_String string_type
Definition: filesystem:277
bool empty() const
Definition: filesystem:566
iterator end() const
Definition: filesystem:624
template<class _String , class _Traits >
tr2::sys::basic_path< _String, _Traits >::operator string_type ( ) const
inline
468  { // convert to file string
469  return (file_string());
470  }
string_type file_string() const
Definition: filesystem:449
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::operator/= ( const basic_path< _String, _Traits > &  _Pval)
inline
353  { // append copy
354  return (append(_Pval._Mystr.c_str(),
355  _Pval._Mystr.c_str() + _Pval._Mystr.size()));
356  }
basic_path & append(_InIt _First, _InIt _Last)
Definition: filesystem:373
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::operator/= ( const string_type _Str)
inline
359  { // append string
360  return (append(_Str.c_str(),
361  _Str.c_str() + _Str.size()));
362  }
basic_path & append(_InIt _First, _InIt _Last)
Definition: filesystem:373
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::operator/= ( const value_type _Ptr)
inline
365  { // append NTBS
366  const value_type *_Ptr2 = _Ptr;
367  for (; *_Ptr2 != 0; ++_Ptr2)
368  ;
369  return (append(_Ptr, _Ptr2));
370  }
basic_path & append(_InIt _First, _InIt _Last)
Definition: filesystem:373
const value_type * _Ptr() const
Definition: filesystem:648
_String::value_type value_type
Definition: filesystem:279
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::operator= ( const basic_path< _String, _Traits > &  _Right)
inline
308  { // copy assign
309  _Mystr = _Right._Mystr;
310  return (*this);
311  }
string_type _Mystr
Definition: filesystem:653
const _Ty & _Right
Definition: algorithm:4087
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::operator= ( basic_path< _String, _Traits > &&  _Right)
inline
323  { // move assign
324  _Mystr = _STD move(_Right._Mystr);
325  return (*this);
326  }
_OutIt move(_InIt _First, _InIt _Last, _OutIt _Dest)
Definition: xutility:2447
string_type _Mystr
Definition: filesystem:653
const _Ty & _Right
Definition: algorithm:4087
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::operator= ( const string_type _Str)
inline
329  { // assign from string
330  if (&_Mystr == &_Str)
331  return (*this); // self assignment
332  else
333  { // strings differ, clear and append
334  clear();
335  return (*this /= _Str);
336  }
337  }
void clear()
Definition: filesystem:400
string_type _Mystr
Definition: filesystem:653
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::operator= ( const value_type _Ptr)
inline
340  { // assign from NTBS
341  clear();
342  return (*this /= _Ptr);
343  }
void clear()
Definition: filesystem:400
const value_type * _Ptr() const
Definition: filesystem:648
template<class _String , class _Traits >
basic_path tr2::sys::basic_path< _String, _Traits >::parent_path ( ) const
inline
542  { // get branch path
543  return (branch_path());
544  }
basic_path branch_path() const
Definition: filesystem:529
template<class _String , class _Traits >
basic_path tr2::sys::basic_path< _String, _Traits >::relative_path ( ) const
inline
519  { // get relative path
520  size_t _Idx = _Root_end();
521  while (_Idx < _Mystr.size()
522  && _Mystr[_Idx] == slash<path_type>::value)
523  ++_Idx; // skip extra '/' after root
524 
525  return (basic_path(_Mystr.c_str() + _Idx,
526  _Mystr.c_str() + _Mystr.size()));
527  }
size_t _Root_end() const
Definition: filesystem:639
string_type _Mystr
Definition: filesystem:653
basic_path()
Definition: filesystem:282
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::remove_filename ( )
inline
429  { // remove leaf
430  return (remove_leaf());
431  }
basic_path & remove_leaf()
Definition: filesystem:410
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::remove_leaf ( )
inline
411  { // remove leaf
412  if (!empty() && begin() != --end())
413  { // leaf to remove, back up over it
414  size_t _Rend = _Root_end();
415  size_t _Idx = _Mystr.size();
416 
417  for (; _Rend < _Idx; --_Idx)
418  if (_Mystr[_Idx - 1] == slash<path_type>::value)
419  break; // back up over stuff at end
420  for (; _Rend < _Idx; --_Idx)
421  if (_Mystr[_Idx - 1] != slash<path_type>::value)
422  break; // back up over trailing non-root slashes
423  _Mystr.erase(_Idx);
424  }
425  return (*this);
426  }
size_t _Root_end() const
Definition: filesystem:639
string_type _Mystr
Definition: filesystem:653
iterator begin() const
Definition: filesystem:619
bool empty() const
Definition: filesystem:566
iterator end() const
Definition: filesystem:624
template<class _String , class _Traits >
basic_path& tr2::sys::basic_path< _String, _Traits >::replace_extension ( const string_type _Newext = string_type())
inline
434  { // replace extension with _Newext
435  if (_Newext.empty() || _Newext[0] == dot<path_type>::value)
436  *this = branch_path()
437  / basic_path((stem() + _Newext));
438  else
439  *this = branch_path()
440  / basic_path((stem() + dot<path_type>::value + _Newext));
441  return (*this);
442  }
basic_path()
Definition: filesystem:282
string_type stem() const
Definition: filesystem:553
basic_path branch_path() const
Definition: filesystem:529
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::root_directory ( ) const
inline
493  { // get root directory
494  size_t _Idx = _Prefix_end();
495  if (_Idx < _Mystr.size()
496  && _Mystr[_Idx] == slash<path_type>::value)
497  return (string_type(1, slash<path_type>::value));
498  else
499  return (string_type());
500  }
size_t _Prefix_end() const
Definition: filesystem:629
_String string_type
Definition: filesystem:277
string_type _Mystr
Definition: filesystem:653
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::root_name ( ) const
inline
488  { // get root name
489  return (_Mystr.substr(0, _Prefix_end()));
490  }
size_t _Prefix_end() const
Definition: filesystem:629
string_type _Mystr
Definition: filesystem:653
template<class _String , class _Traits >
basic_path tr2::sys::basic_path< _String, _Traits >::root_path ( ) const
inline
513  { // get root path
514  return (basic_path(_Mystr.c_str(),
515  _Mystr.c_str() + _Root_end()));
516  }
size_t _Root_end() const
Definition: filesystem:639
string_type _Mystr
Definition: filesystem:653
basic_path()
Definition: filesystem:282
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::stem ( ) const
inline
554  { // pick off base name in leaf before dot
555  return (basename());
556  }
string_type basename() const
Definition: filesystem:546
template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::string ( ) const
inline
445  { // get the stored string
446  return (_Mystr);
447  }
string_type _Mystr
Definition: filesystem:653
template<class _String , class _Traits >
void tr2::sys::basic_path< _String, _Traits >::swap ( basic_path< _String, _Traits > &  _Right)
inline
406  { // swap the stored strings
407  _Swap_adl(_Mystr, _Right._Mystr);
408  }
string_type _Mystr
Definition: filesystem:653
const _Ty & _Right
Definition: algorithm:4087

Member Data Documentation

template<class _String , class _Traits >
string_type tr2::sys::basic_path< _String, _Traits >::_Mystr

The documentation for this class was generated from the following file: