aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde/cxx/string.hxx
blob: 2d1945884d07e1f191468755a551ad05ecc462e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// file      : xsde/cxx/string.hxx
// copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
// license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

#ifndef XSDE_CXX_STRING_HXX
#define XSDE_CXX_STRING_HXX

#include <stddef.h> // size_t

namespace xsde
{
  namespace cxx
  {
    // Simple string for situations where std::string is not available.
    //
    struct string
    {
      enum error
      {
        error_none,
        error_no_memory
      };

      typedef size_t size_type;

      ~string ();

      // The default c-tor creates an uninitialized string, not an
      // empty string. Use assign() to initialize it.
      //
      string ();

      error
      assign (const char*);

      error
      assign (const char*, size_t);

      error
      append (const char*);

      error
      append (const char*, size_t);

      char&
      operator[] (size_t);

      const char&
      operator[] (size_t) const;

      size_t
      size () const;

      char*
      data ();

      const char*
      data () const;

      bool
      empty () const;

      void
      swap (string&);

    public:
      size_t
      capacity () const;

      void
      truncate (size_t);

      char*
      detach ();

      void
      attach (char*);

      void
      attach (char*, size_t);

    private:
      string (const string&);

      string&
      operator= (const string&);

    private:
      error
      resize (size_t capacity, bool copy);

    private:
      char* data_;
      size_t size_;
      size_t capacity_;
    };

    bool
    operator== (const string&, const char*);

    bool
    operator== (const char*, const string&);

    bool
    operator!= (const string&, const char*);

    bool
    operator!= (const char*, const string&);
  }
}

#include <xsde/cxx/string.ixx>

#endif  // XSDE_CXX_STRING_HXX