readonly_cstring.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //
  2. // $Id$
  3. //
  4. #include<__vic/readonly_cstring.h>
  5. #include<cstring>
  6. namespace __vic {
  7. const char readonly_cstring::empty_str[1] = { '\x0' };
  8. //----------------------------------------------------------------------------
  9. readonly_cstring::~readonly_cstring() noexcept
  10. {
  11. delete [] st;
  12. }
  13. //----------------------------------------------------------------------------
  14. char *readonly_cstring::reserve(size_t n)
  15. {
  16. char *p = new char[n];
  17. *p = '\x0'; // empty string
  18. delete [] st;
  19. st = p;
  20. return p;
  21. }
  22. //----------------------------------------------------------------------------
  23. readonly_cstring &readonly_cstring::assign(const char *s, size_t n)
  24. {
  25. const char *p = dup(s, n);
  26. delete [] st;
  27. st = p;
  28. return *this;
  29. }
  30. //----------------------------------------------------------------------------
  31. const char *readonly_cstring::dup(const char *s, size_t n)
  32. {
  33. if(!s || n==0) return nullptr;
  34. if(n == size_t(-1)) n = std::strlen(s);
  35. char *st = new char[n+1];
  36. std::memcpy(st, s, n);
  37. st[n] = '\x0';
  38. return st;
  39. }
  40. //----------------------------------------------------------------------------
  41. } // namespace