⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 const_string.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
字号:
//  (C) Copyright Gennadiy Rozental 2001-2008.//  Distributed under the Boost Software License, Version 1.0.//  (See accompanying file LICENSE_1_0.txt or copy at //  http://www.boost.org/LICENSE_1_0.txt)//  See http://www.boost.org/libs/test for the library home page.////  File        : $RCSfile$////  Version     : $Revision: 49313 $////  Description : simple string class definition// ***************************************************************************#ifndef  CONST_STRING_HPP#define  CONST_STRING_HPP// STL#include <iterator>#include <string>#include <cstring>using std::string;namespace common_layer {// ************************************************************************** //// **************                 const_string                 ************** //// ************************************************************************** //class const_string {public:    // Subtypes    typedef     char const*                     iterator;    typedef     char const*                     const_iterator;    typedef     std::reverse_iterator<iterator> reverse_iterator;    typedef     reverse_iterator                const_reverse_iterator;    // Constructor    const_string()    : m_begin( "" ), m_end( m_begin )                      {}    // Copy constructor is generated by compiler    const_string( const std::string& s )    : m_begin( s.c_str() ),      m_end( m_begin + s.length() )                        {}    const_string( char const* s )    : m_begin( s ? s : "" )    , m_end( s ? m_begin + std::strlen( s ) : m_begin )    {}    const_string( char const* s, size_t length )    : m_begin( s ), m_end( m_begin + length )              { if( length == 0 ) erase(); }    const_string( char const* first, char const* last )    : m_begin( first ), m_end( last )                      {}    // data access methods    char            operator[]( size_t index ) const        { return m_begin[index]; }    char            at( size_t index ) const                { return m_begin[index]; }    char const*     data() const                            { return m_begin; }    // length operators    size_t          length() const                          { return m_end - m_begin; }    bool            is_empty() const                        { return m_end == m_begin; }    void            erase()                                 { m_begin = m_end = ""; }    void            resize( size_t new_len )                { if( m_begin + new_len < m_end ) m_end = m_begin + new_len; }    void            rshorten( size_t shift = 1 )            { m_end  -= shift; if( m_end <= m_begin ) erase(); }    void            lshorten( size_t shift = 1 )            { m_begin += shift; if( m_end <= m_begin ) erase(); }    // Assignment operators    const_string&   operator=( const_string const& s );    const_string&   operator=( string const& s )            { return *this = const_string( s ); }    const_string&   operator=( char const* s )              { return *this = const_string( s ); }    const_string&   assign( const_string const& s )         { return *this = s; }    const_string&   assign( string const& s, size_t len )   { return *this = const_string( s.data(), len ); }    const_string&   assign( string const& s )               { return *this = const_string( s ); }    const_string&   assign( char const* s )                 { return *this = const_string( s ); }    const_string&   assign( char const* s, size_t len )     { return *this = const_string( s, len ); }    const_string&   assign( char const* f, char const* l )  { return *this = const_string( f, l ); }    void            swap( const_string& s )                 {       // do not want to include alogrithm        char const* tmp1 = m_begin;        char const* tmp2 = m_end;        m_begin     = s.m_begin;        m_end       = s.m_end;        s.m_begin   = tmp1;        s.m_end     = tmp2;    }    // Comparison operators    friend bool     operator==( const_string const& s1, const_string const& s2 )    {         return s1.length() == s2.length() && std::strncmp( s1.data(), s2.data(), s1.length() ) == 0;    }    friend bool     operator==( const_string const& s1, char const* s2 )            { return s1 == const_string( s2 ); }    friend bool     operator==( const_string const& s1, const string& s2 )          { return s1 == const_string( s2 ); }    friend bool     operator!=( const_string const& s1, const_string const& s2 )    { return !(s1 == s2); }    friend bool     operator!=( const_string const& s1, char const* s2 )            { return !(s1 == s2); }    friend bool     operator!=( const_string const& s1, const string& s2 )          { return !(s1 == s2); }    friend bool     operator==( char const* s2,         const_string const& s1 )    { return s1 == s2; }    friend bool     operator==( const string& s2,       const_string const& s1 )    { return s1 == s2; }    friend bool     operator!=( char const* s2,         const_string const& s1 )    { return !(s1 == s2); }    friend bool     operator!=( const string& s2,       const_string const& s1 )    { return !(s1 == s2); }    // Iterators    iterator        begin() const                           { return m_begin; }    iterator        end() const                             { return m_end;   }    reverse_iterator rbegin() const                         { return reverse_iterator( m_end );   }    reverse_iterator rend() const                           { return reverse_iterator( m_begin ); }private:    // Data members    char const*     m_begin;    char const*     m_end;};//____________________________________________________________________________//// first characterclass first_char {public:    char operator()( const_string source, char default_char = '\0' ) const {        return source.is_empty() ? default_char : *source.data();    }};//____________________________________________________________________________//// last characterclass last_char {public:    char operator()( const_string source, char default_char = '\0' ) const {        return source.is_empty() ? default_char : *source.rbegin();    }};//____________________________________________________________________________//inline const_string&const_string::operator=( const_string const& s ) {    if( &s != this ) {        m_begin = s.m_begin;        m_end  = s.m_end;    }    return *this;}//____________________________________________________________________________//typedef const_string const literal;//____________________________________________________________________________//inline std::ostream&operator<<( std::ostream& os, const_string const& str ){    os << std::string( str.begin(), str.length() );    return os;}//____________________________________________________________________________//}; // namespace common_layer#endif // CONST_STRING_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -