const_string1.hh
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #ifndef __const_string1_hh__
  2. #define __const_string1_hh__
  3. #include <stdexcept>
  4. #include <string>
  5. #include <iostream>
  6. using namespace std ;
  7. //: A special string that is created from a existing const char *
  8. // It contains a small subset of the standard string class.  When an
  9. // object is created only a link to the const char * is created.  The
  10. // data is NOT copied.  thus the const char * needs to stick around
  11. // for the life of the class.
  12. class const_string
  13. {
  14. private:
  15.   const char *str_data;
  16. public:
  17.   typedef const char   value_type;      //:
  18.   typedef unsigned int size_type;       //:
  19.   typedef          int difference_type; //:
  20.   typedef const char&     const_reference; //:
  21.   typedef const_reference reference;       //:
  22.   typedef const char*     const_pointer;   //:
  23.   typedef const_pointer   pointer;         //:
  24.   typedef const char*    const_iterator;   //:
  25.   typedef const_iterator iterator;         
  26.   //: The same as const_iterator because the data can not be changed.
  27.   
  28.   const_string() : str_data("") {}                  //:
  29.   const_string(const char *str) : str_data(str) {}  //:
  30.   const_string& operator = (const char *str)        //:
  31.     {str_data = str; return *this;}
  32.  
  33.   size_type size() const //: 
  34.   { register int i = 0;
  35.     while (str_data[i]) i++;
  36.     return i;
  37.   }
  38.   const_iterator  begin() const {return str_data;}          //:
  39.   const_iterator  end()   const {return str_data + size();} //:
  40.   size_type length() const {return size();}   //:
  41.   size_type max_size() const {return size();} //:
  42.   
  43.   const_reference operator[](size_type pos) const {return str_data[pos];} //:
  44.   const_reference at(size_type pos) const //: 
  45.   {
  46.     if (pos >= size()) throw out_of_range("");
  47.     else return str_data[pos];
  48.   }
  49.   
  50.   const char* c_str() const {return str_data;} //:
  51.   const char* data()  const {return str_data;} //:
  52.   
  53.   int compare(const const_string& str) const //:
  54.   {
  55.     const char* str1 = str_data;
  56.     const char* str2 = str.str_data;
  57.     while (*str1 == *str2 && (*str1 || *str2)) {str1++; str2++;}
  58.     return *str1-*str2;
  59.   }
  60. };
  61. //------------------------------------------------------------------
  62. // ??? forgot inline directive. added to avoid linker errors
  63. inline ostream& operator << (ostream &o, const const_string &str)
  64. {
  65.   return o << str.c_str();
  66. }
  67. //---------------------------------------------------------------------
  68. inline int compare (const const_string &lhs, const const_string &rhs)
  69. {
  70.   return lhs.compare(rhs);
  71. }
  72. //--------------------------------------------------------------------
  73. inline bool operator == (const_string &lhs, const_string &rhs)
  74. {
  75.   return compare(lhs,rhs) == 0;
  76. }
  77. //--------------------------------------------------------------------
  78. inline bool operator != (const_string &lhs, const_string &rhs)
  79. {
  80.   return compare(lhs,rhs) != 0;
  81. }
  82. //--------------------------------------------------------------------
  83. inline bool operator < (const_string &lhs, const_string &rhs)
  84. {
  85.   return compare(lhs,rhs) < 0;
  86. }
  87. //-------------------------------------------------------------------
  88. inline bool operator <= (const_string &lhs, const_string &rhs)
  89. {
  90.   return compare(lhs,rhs) <= 0;
  91. }
  92. //-------------------------------------------------------------------
  93. inline bool operator > (const_string &lhs, const_string &rhs)
  94. {
  95.   return compare(lhs,rhs) > 0;
  96. }
  97. //--------------------------------------------------------------------
  98. inline bool operator >= (const_string &lhs, const_string &rhs)
  99. {
  100.   return compare(lhs,rhs) >= 0;
  101. }
  102. //--------------------------------------------------------------------
  103. #endif
  104.   
  105.  
  106.   
  107.   
  108.