Advertisement
Guest User

Delphi String C++ Representation

a guest
Dec 17th, 2013
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1.         // String[n]  n+1, первый байт резервируется для хранения длины строки, поэтому
  2.         //                 максимальная длина строки не больше 255 символов
  3.         template<size_t S> struct String
  4.         {
  5.             enum {CAPACITY = S + 1}; // +1 - length byte
  6.             char value[CAPACITY];
  7.  
  8.             static String<S> make(const char* s) {
  9.                 String<S> tmp = {0};
  10.                 tmp = s;
  11.                 return tmp;
  12.             }
  13.             String& operator=(const char* s) {
  14.                 size_t l = strlen(s);
  15.                 size_t c = min(l, S);
  16.                 std::copy(s, s + c, value+1);
  17.                 value[0] = c;
  18.                 return *this;
  19.             }
  20.             // WARING! data() is not null terminated string
  21.             // to iterate use begin() and end() iterator
  22.             const char* data() const {
  23.                 return value+1;
  24.             }
  25.             size_t length() const {
  26.                 return static_cast<unsigned char>(value[0]);
  27.             }
  28.             const char* begin() const {
  29.                 return data();
  30.             }
  31.             const char* end() const {
  32.                 return begin() + length();
  33.             }
  34.             bool operator == (const String<S> &other) const {
  35.                 if( length() != other.length() )
  36.                     return false;
  37.                 return strncmp(data(), other.data(), length()) == 0;
  38.             }
  39.             std::string str() const {
  40.                 return std::string(begin(), end());
  41.             }
  42.         }; // template<size_t S> struct String..
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement