-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstring2.h
101 lines (94 loc) · 2.97 KB
/
string2.h
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
// -*- C++ -*-
//
// String class interface.
//
// Copyright 1992-2021 Deven T. Corzine <[email protected]>
//
// SPDX-License-Identifier: MIT
//
// Check if previously included.
#ifndef _STRING2_H
#define _STRING2_H 1
#include "object.h"
extern "C" {
#include <string.h>
};
class String {
private:
static const size_t Extra = 128;
static const size_t NumberLength = 32;
char *str;
size_t len;
size_t extra;
public:
String() {
str = new char[Extra + 1];
len = 0;
extra = Extra;
str[len] = 0;
}
String(const String &s);
String(String &s);
String(const char *s);
String(const char *s, size_t n);
String(int n);
String(unsigned int n);
String(long n);
String(unsigned long n);
~String() { delete [] str; }
String &operator =(const String &s);
String &operator =(String &s);
String &operator =(const char *s);
String &operator =(int n);
String &operator =(unsigned int n);
String &operator =(long n);
String &operator =(unsigned long n);
String &assign (const char *s, size_t n);
String &append (const String &s);
String &append (String &s);
String &append (const char *s);
String &append (const char *s, size_t n);
String &append (char c);
String &prepend (const String &s);
String &prepend (String &s);
String &prepend (const char *s);
String &prepend (const char *s, size_t n);
String &prepend (char c);
void trim ();
String &vsprintf(const char *format, va_list ap);
String &sprintf (const char *format, ...);
int operator ==(const String &s) {
return len == s.len && !strncmp(str, s.str, len);
}
int operator ==(String &s) {
return len == s.len && !strncmp(str, s.str, len);
}
int operator ==(const char *s) { return !strcmp(str, s ? s : ""); }
int operator ==(char *s) { return !strcmp(str, s ? s : ""); }
int operator !=(const String &s) {
return len != s.len || strncmp(str, s.str, len) != 0;
}
int operator !=(String &s) {
return len != s.len || strncmp(str, s.str, len) != 0;
}
int operator !=(const char *s) { return strcmp(str, s ? s : "") != 0; }
int operator !=(char *s) { return strcmp(str, s ? s : "") != 0; }
const char *operator ~() const { return str; }
char *operator ~() { return str; }
operator const char *() const { return str; }
operator const char *() { return str; }
operator char *() { return str; }
operator int() { return len; }
#ifdef HAVE_BOOL
operator bool() { return len != 0; }
#endif
size_t length() { return len; }
};
class StringObj: public Object, public String {
public:
StringObj(const String &s): Object(), String(s) { }
StringObj(String &s): Object(), String(s) { }
StringObj(const char *s): Object(), String(s) { }
StringObj(const char *s, size_t n): Object(), String(s, n) { }
};
#endif // string2.h