NEURON
string.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 1991 Stanford University
3  * Copyright (c) 1991 Silicon Graphics, Inc.
4  *
5  * Permission to use, copy, modify, distribute, and sell this software and
6  * its documentation for any purpose is hereby granted without fee, provided
7  * that (i) the above copyright notices and this permission notice appear in
8  * all copies of the software and related documentation, and (ii) the names of
9  * Stanford and Silicon Graphics may not be used in any advertising or
10  * publicity relating to the software without the specific, prior written
11  * permission of Stanford and Silicon Graphics.
12  *
13  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
14  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  * IN NO EVENT SHALL STANFORD OR SILICON GRAPHICS BE LIABLE FOR
18  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
21  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
22  * OF THIS SOFTWARE.
23  */
24 
25 #ifndef os_string_h
26 #define os_string_h
27 
28 /*
29  * String - simple (non-copying) string class
30  */
31 
32 #include <OS/enter-scope.h>
33 
34 class String {
35 public:
36 #ifdef _DELTA_EXTENSIONS
37 #pragma __static_class
38 #endif
39  String();
40  String(const char*);
41  String(const char*, int length);
42  String(const String&);
43  virtual ~String();
44 
45  const char* string() const;
46  int length() const;
47 
48  virtual unsigned long hash() const;
49  virtual String& operator =(const String&);
50  virtual String& operator =(const char*);
51  virtual bool operator ==(const String&) const;
52  virtual bool operator ==(const char*) const;
53  virtual bool operator !=(const String&) const;
54  virtual bool operator !=(const char*) const;
55  virtual bool operator >(const String&) const;
56  virtual bool operator >(const char*) const;
57  virtual bool operator >=(const String&) const;
58  virtual bool operator >=(const char*) const;
59  virtual bool operator <(const String&) const;
60  virtual bool operator <(const char*) const;
61  virtual bool operator <=(const String&) const;
62  virtual bool operator <=(const char*) const;
63 
64  virtual bool case_insensitive_equal(const String&) const;
65  virtual bool case_insensitive_equal(const char*) const;
66 
67  u_char operator [](int index) const;
68  virtual String substr(int start, int length) const;
69  String left(int length) const;
70  String right(int start) const;
71 
72  virtual void set_to_substr(int start, int length);
73  void set_to_left(int length);
74  void set_to_right(int start);
75 
76  virtual int search(int start, u_char) const;
77  int index(u_char) const;
78  int rindex(u_char) const;
79 
80  virtual bool convert(int&) const;
81  virtual bool convert(long&) const;
82  virtual bool convert(float&) const;
83  virtual bool convert(double&) const;
84 
85  virtual bool null_terminated() const;
86 protected:
87  virtual void set_value(const char*);
88  virtual void set_value(const char*, int);
89 private:
90  const char* data_;
91  int length_;
92 };
93 
94 class CopyString : public String {
95 public:
96 #ifdef _DELTA_EXTENSIONS
97 #pragma __static_class
98 #endif
99  CopyString();
100  CopyString(const char*);
101  CopyString(const char*, int length);
102  CopyString(const String&);
103  CopyString(const CopyString&);
104  virtual ~CopyString();
105 
106  virtual String& operator =(const CopyString&);
107  virtual String& operator =(const String&);
108  virtual String& operator =(const char*);
109 
110  virtual bool null_terminated() const;
111 protected:
112  virtual void set_value(const char*);
113  virtual void set_value(const char*, int);
114 private:
115  void strfree();
116 };
117 
118 class NullTerminatedString : public String {
119 public:
120 #ifdef _DELTA_EXTENSIONS
121 #pragma __static_class
122 #endif
126  virtual ~NullTerminatedString();
127 
128  virtual String& operator =(const String&);
129  virtual String& operator =(const char*);
130 
131  virtual bool null_terminated() const;
132 private:
134 
135  void assign(const String&);
136  void strfree();
137 };
138 
139 inline const char* String::string() const { return data_; }
140 inline int String::length() const { return length_; }
141 inline u_char String::operator [](int index) const {
142  return ((u_char*)data_)[index];
143 }
144 
145 inline String String::left(int length) const { return substr(0, length); }
146 inline String String::right(int start) const { return substr(start, -1); }
147 
148 inline void String::set_to_left(int length) { set_to_substr(0, length); }
149 inline void String::set_to_right(int start) { set_to_substr(start, -1); }
150 
151 inline int String::index(u_char c) const { return search(0, c); }
152 inline int String::rindex(u_char c) const { return search(-1, c); }
153 
154 #endif
unsigned char u_char
Definition: enter-scope.h:42
short index
Definition: cabvars.h:10
virtual String & operator=(const CopyString &)
Definition: string.cpp:309
virtual ~CopyString()
Definition: string.cpp:305
CopyString()
Definition: string.cpp:287
virtual bool null_terminated() const
Definition: string.cpp:327
virtual void set_value(const char *)
Definition: string.cpp:329
void strfree()
Definition: string.cpp:343
virtual String & operator=(const String &)
Definition: string.cpp:371
virtual ~NullTerminatedString()
Definition: string.cpp:367
void assign(const String &)
Definition: string.cpp:386
virtual bool null_terminated() const
Definition: string.cpp:384
Definition: string.h:34
virtual unsigned long hash() const
Definition: string.cpp:74
String left(int length) const
Definition: string.h:145
u_char operator[](int index) const
Definition: string.h:141
virtual int search(int start, u_char) const
Definition: string.cpp:227
const char * string() const
Definition: string.h:139
virtual bool null_terminated() const
Definition: string.cpp:210
virtual String substr(int start, int length) const
Definition: string.cpp:181
virtual bool operator==(const String &) const
Definition: string.cpp:106
int index(u_char) const
Definition: string.h:151
virtual bool operator>=(const String &) const
Definition: string.cpp:130
String right(int start) const
Definition: string.h:146
virtual bool convert(int &) const
Definition: string.cpp:253
virtual bool operator>(const String &) const
Definition: string.cpp:122
int length() const
Definition: string.h:140
const char * data_
Definition: string.h:90
String()
Definition: string.cpp:52
virtual bool operator!=(const String &) const
Definition: string.cpp:114
virtual String & operator=(const String &)
Definition: string.cpp:94
int rindex(u_char) const
Definition: string.h:152
virtual bool operator<(const String &) const
Definition: string.cpp:138
virtual void set_value(const char *)
Definition: string.cpp:212
int length_
Definition: string.h:91
void set_to_left(int length)
Definition: string.h:148
void set_to_right(int start)
Definition: string.h:149
virtual bool operator<=(const String &) const
Definition: string.cpp:146
virtual ~String()
Definition: string.cpp:72
virtual void set_to_substr(int start, int length)
Definition: string.cpp:195
virtual bool case_insensitive_equal(const String &) const
Definition: string.cpp:154
#define c
void start()
Definition: hel2mos.cpp:204