Listing 1
template
template< typename C // Character type
, typename T = std::char_traits<C> // Traits
, typename A = std::allocator<C> // Allocator
>
class basic_string_view
: private A
{
public: // Types
typedef C value_type;
typedef basic_string_view<C, T, A> class_type;
. . .
typedef value_type const &const_reference;
public: // Construction
basic_string_view();
basic_string_view(class_type const &rhs);
basic_string_view(class_type const &s, size_type pos);
basic_string_view(class_type const &s, size_type pos, size_type cch);
basic_string_view(char_type const *s);
basic_string_view(char_type const *s, size_type cch);
basic_string_view(char_type const *first, char_type const *last);
~basic_string_view() throw();
class_type &operator =(class_type const &rhs);
public: // Operations
void swap(class_type &other) throw();
void clear() throw();
void refresh() throw();
public: // Attributes
size_type size() const throw();
size_type length() const throw();
static size_type max_size() throw();
allocator_type get_allocator() const;
. . .
public: // Comparison
bool equal(class_type const &rhs) const throw();
bool equal(value_type const *rhs, size_type cchRhs) const throw();
int compare(size_type pos, size_type cch
, value_type const *s, size_type cchRhs) const throw();
int compare(size_type pos, size_type cch
, value_type const *s) const throw();
int compare(value_type const *s) const throw();
int compare(size_type pos, size_type cch, class_type const &rhs
, size_type posRhs, size_type cchRhs) const throw();
int compare(size_type pos, size_type cch
, class_type const &rhs) const throw();
int compare(class_type const &rhs) const throw();
public: // Accessors
const_reference operator [](size_type index) const;
value_type const *c_str() const;
value_type const *data() const throw();
value_type const *base() const throw();
const_reference front() const;
const_reference back() const;
size_type copy( value_type *dest, size_type cch
, size_type pos = 0) const throw();
public: // Iteration
const_iterator begin() const;
const_iterator end() const;
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
private: // Invariant
bool is_valid() const;
private: // Implementation
static char_type const *empty_string_() throw();
static int compare_(char_type const *lhs, size_type lhs_len
, char_type const *rhs, size_type rhs_len);
private: // Members
size_type m_length;
char_type const *m_base;
mutable char_type *m_cstr;
};
// and comparison operators ==, !=, <, <=, >, >=
template< typename C
, typename T
, typename A
>
bool operator ==(basic_string_view<C, T, A> const &lhs , basic_string_view<C, T, A> const &rhs);
// ... and overloads for C const *.