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