aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde/cxx/qname.ixx
blob: 6772556ef0208540eefa19599b5054dce7059e43 (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
115
116
117
118
119
120
121
122
123
124
125
// file      : xsde/cxx/qname.ixx
// author    : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC
// license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

#include <string.h> // strcmp

namespace xsde
{
  namespace cxx
  {
    // c-tors, d-tor and swap
    //
    inline qname::
    ~qname ()
    {
      delete[] prefix_;
      delete[] name_;
    }

    inline qname::
    qname ()
        : prefix_ (0), name_ (0)
    {
    }

    inline qname::
    qname (char* n)
        : prefix_ (0), name_ (n)
    {
    }

    inline qname::
    qname (char* p, char* n)
        : prefix_ (p), name_ (n)
    {
    }

    inline void qname::
    swap (qname& x)
    {
      char* p = prefix_;
      char* n = name_;

      prefix_ = x.prefix_;
      name_ = x.name_;

      x.prefix_ = p;
      x.name_ = n;
    }

    // preix
    //
    inline char* qname::
    prefix ()
    {
      return prefix_;
    }

    inline const char* qname::
    prefix () const
    {
      return prefix_;
    }

    inline void qname::
    prefix (char* prefix)
    {
      delete[] prefix_;
      prefix_ = prefix;
    }

    inline char* qname::
    prefix_detach ()
    {
      char* r = prefix_;
      prefix_ = 0;
      return r;
    }

    // name
    //
    inline char* qname::
    name ()
    {
      return name_;
    }

    inline const char* qname::
    name () const
    {
      return name_;
    }

    inline void qname::
    name (char* name)
    {
      delete[] name_;
      name_ = name;
    }

    inline char* qname::
    name_detach ()
    {
      char* r = name_;
      name_ = 0;
      return r;
    }

    //
    //
    inline bool
    operator== (const qname& x, const qname& y)
    {
      return strcmp (x.name (), y.name ()) == 0 &&
        strcmp (x.prefix (), y.prefix ()) == 0;
    }

    inline bool
    operator!= (const qname& x, const qname& y)
    {
      return !(x == y);
    }
  }
}