aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/archetype/string.h
blob: f85ed37d1a8182136872fa718d680dd616b218ef (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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef ARCHETYPE_STRING
#define ARCHETYPE_STRING

#include "common/str.h"

namespace Glk {
namespace Archetype {

class String : public Common::String {
public:
	String() : Common::String() {}
	String(const char *str) : Common::String(str) {}
	String(const char *str, uint32 len) : Common::String(str, len) {}
	String(const char *beginP, const char *endP) : Common::String(beginP, endP) {}
	String(const Common::String &str) : Common::String(str) {}
	explicit String(char c) : Common::String(c) {}

	String &operator=(const char *str) {
		Common::String::operator=(str);
		return *this;
	}
	String &operator=(const Common::String &str) {
		Common::String::operator=(str);
		return *this;
	}
	String &operator=(char c) {
		Common::String::operator=(c);
		return *this;
	}
	String &operator+=(const char *str) {
		Common::String::operator+=(str);
		return *this;
	}
	String &operator+=(const Common::String &str) {
		Common::String::operator+=(str);
		return *this;
	}
	String &operator+=(char c) {
		Common::String::operator+=(c);
		return *this;
	}

	static String format(const char *fmt, ...) GCC_PRINTF(1, 2);

	static String vformat(const char *fmt, va_list args);

	/**
	 * Returns the index of a character within this string
	 */
	int indexOf(char c) const;

	/**
	 * Returns the index of a substring within this string
	 */
	int indexOf(const String &substr) const;

	/**
	 * Returns the last index of a character in a string, or -1 if it isn't present
	 */
	int lastIndexOf(char c) const;

	/**
	 * Trims spaces(and tabs and newlines) off the ends of a given string
	 */
	void trim();

	/**
	 * Gets a substring of the string
	 */
	String substring(int index, int count) const {
		return String(c_str() + index, c_str() + index + count);
	}

	/**
	 * Converts a string to a value
	 * @param code		Optional returns non-value of character index 		
	 */
	int val(int *code);

	/**
	 * Returns a given number of chracters from the start of a string
	 */
	String left(size_t count) const;

	/**
	 * Returns a given number of characters from the end of a string
	 */
	String right(size_t count) const;

	/**
	 * Returns a substring of another string
	 */
	String mid(size_t start) const;
	String mid(size_t start, size_t count) const;

	/**
	 * Delete a range within a string
	 */
	void del(size_t start, size_t count);
};

// Append two strings to form a new (temp) string
String operator+(const String &x, const String &y);

String operator+(const char *x, const String &y);
String operator+(const String &x, const char *y);

String operator+(const String &x, char y);
String operator+(char x, const String &y);

// Some useful additional comparison operators for Strings
bool operator==(const char *x, const String &y);
bool operator!=(const char *x, const String &y);

typedef String *StringPtr;
typedef String ShortStringType;

} // End of namespace Archetype
} // End of namespace Glk

#endif