1#ifndef _DEPOOLSTRING_HPP
2#define _DEPOOLSTRING_HPP
3/*-------------------------------------------------------------------------
4 * drawElements C++ Base Library
5 * -----------------------------
6 *
7 * Copyright 2014 The Android Open Source Project
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 *
21 *//*!
22 * \file
23 * \brief Memory pool -backed string.
24 *//*--------------------------------------------------------------------*/
25
26#include "deDefs.hpp"
27#include "deMemPool.hpp"
28#include "dePoolArray.hpp"
29
30#include <ostream>
31#include <string>
32
33namespace de
34{
35
36/*--------------------------------------------------------------------*//*!
37 * \brief String template backed by memory pool
38 *
39 * \note Memory in PoolString is not contiguous so pointer arithmetic
40 *       to access next element(s) doesn't work.
41 *//*--------------------------------------------------------------------*/
42class PoolString : public PoolArray<char>
43{
44public:
45	explicit		PoolString			(MemPool* pool);
46					PoolString			(MemPool* pool, const PoolString& other);
47					~PoolString			(void);
48
49	void			toString			(std::string& str) const;
50	std::string		toString			(void) const;
51
52	void			append				(const char* str);
53	void			append				(const std::string& str);
54	void			append				(const PoolString& str);
55
56	PoolString&		operator=			(const char* str)			{ clear();	append(str);	return *this;	}
57	PoolString&		operator=			(const std::string& str)	{ clear();	append(str);	return *this;	}
58	PoolString&		operator=			(const PoolString& str);
59
60	PoolString&		operator+=			(const char* str)			{ append(str);	return *this;	}
61	PoolString&		operator+=			(const std::string& str)	{ append(str);	return *this;	}
62	PoolString&		operator+=			(const PoolString& str)		{ append(str);	return *this;	}
63
64private:
65					PoolString			(const PoolString& other);
66};
67
68// Operators.
69std::ostream&	operator<<	(std::ostream& stream, const PoolString& string);
70
71// PoolString inline implementations.
72
73inline PoolString::PoolString (MemPool* pool)
74	: PoolArray<char>(pool)
75{
76}
77
78inline PoolString::~PoolString (void)
79{
80}
81
82inline std::string PoolString::toString (void) const
83{
84	std::string str;
85	toString(str);
86	return str;
87}
88
89inline PoolString& PoolString::operator= (const PoolString& str)
90{
91	if (this == &str)
92		return *this;
93
94	clear();
95	append(str);
96	return *this;
97}
98
99} // de
100
101#endif // _DEPOOLSTRING_HPP
102