123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467 |
- /*
- * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
- * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
- *
- * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- #ifndef __PJPP_STRING_HPP__
- #define __PJPP_STRING_HPP__
- #include <pj/string.h>
- #include <pj++/pool.hpp>
- #include <pj/assert.h>
- //
- // String wrapper class for pj_str_t.
- //
- class Pj_String : public pj_str_t
- {
- public:
- //
- // Default constructor.
- //
- Pj_String()
- {
- pj_assert(sizeof(Pj_String) == sizeof(pj_str_t));
- ptr=NULL;
- slen=0;
- }
- //
- // Construct the buffer from a char* (use with care)
- //
- Pj_String(char *str)
- {
- set(str);
- }
- //
- // Construct from a const char*.
- //
- Pj_String(Pj_Pool &pool, const char *src)
- {
- set(pool, src);
- }
- //
- // Construct from pj_str_t&.
- //
- explicit Pj_String(pj_str_t &s)
- {
- ptr = s.ptr;
- slen = s.slen;
- }
- //
- // Construct from const pj_str_t& (use with care!).
- //
- explicit Pj_String(const pj_str_t &s)
- {
- ptr = (char*)s.ptr;
- slen = s.slen;
- }
- //
- // Construct by copying from const pj_str_t*.
- //
- Pj_String(Pj_Pool &pool, const pj_str_t *s)
- {
- set(pool, s);
- }
- //
- // Construct by copying from Pj_String
- //
- Pj_String(Pj_Pool &pool, const Pj_String &rhs)
- {
- set(pool, rhs);
- }
- //
- // Construct from another Pj_String, use with care!
- //
- explicit Pj_String(const Pj_String &rhs)
- {
- ptr = rhs.ptr;
- slen = rhs.slen;
- }
- //
- // Construct from a char* and a length.
- //
- Pj_String(char *str, pj_size_t len)
- {
- set(str, len);
- }
- //
- // Construct from pair of pointer.
- //
- Pj_String(char *begin, char *end)
- {
- pj_strset3(this, begin, end);
- }
- //
- // You can cast Pj_String to pj_str_t*
- //
- operator pj_str_t*()
- {
- return this;
- }
- //
- // You can cast const Pj_String to const pj_str_t*
- //
- operator const pj_str_t*() const
- {
- return this;
- }
- //
- // Get the length of the string.
- //
- pj_size_t length() const
- {
- return pj_strlen(this);
- }
- //
- // Get the length of the string.
- //
- pj_size_t size() const
- {
- return length();
- }
- //
- // Get the string buffer.
- //
- const char *buf() const
- {
- return ptr;
- }
- //
- // Initialize buffer from char*.
- //
- void set(char *str)
- {
- pj_strset2(this, str);
- }
- //
- // Initialize by copying from a const char*.
- //
- void set(Pj_Pool &pool, const char *s)
- {
- pj_strdup2(pool, this, s);
- }
- //
- // Initialize from pj_str_t*.
- //
- void set(pj_str_t *s)
- {
- pj_strassign(this, s);
- }
- //
- // Initialize by copying from const pj_str_t*.
- //
- void set(Pj_Pool &pool, const pj_str_t *s)
- {
- pj_strdup(pool, this, s);
- }
- //
- // Initialize from char* and length.
- //
- void set(char *str, pj_size_t len)
- {
- pj_strset(this, str, len);
- }
- //
- // Initialize from pair of pointers.
- //
- void set(char *begin, char *end)
- {
- pj_strset3(this, begin, end);
- }
- //
- // Initialize from other Pj_String.
- //
- void set(Pj_String &rhs)
- {
- pj_strassign(this, &rhs);
- }
- //
- // Initialize by copying from a Pj_String*.
- //
- void set(Pj_Pool &pool, const Pj_String *s)
- {
- pj_strdup(pool, this, s);
- }
- //
- // Initialize by copying from other Pj_String.
- //
- void set(Pj_Pool &pool, const Pj_String &s)
- {
- pj_strdup(pool, this, &s);
- }
- //
- // Copy the contents of other string.
- //
- void strcpy(const pj_str_t *s)
- {
- pj_strcpy(this, s);
- }
- //
- // Copy the contents of other string.
- //
- void strcpy(const Pj_String &rhs)
- {
- pj_strcpy(this, &rhs);
- }
- //
- // Copy the contents of other string.
- //
- void strcpy(const char *s)
- {
- pj_strcpy2(this, s);
- }
- //
- // Compare string.
- //
- int strcmp(const char *s) const
- {
- return pj_strcmp2(this, s);
- }
- //
- // Compare string.
- //
- int strcmp(const pj_str_t *s) const
- {
- return pj_strcmp(this, s);
- }
- //
- // Compare string.
- //
- int strcmp(const Pj_String &rhs) const
- {
- return pj_strcmp(this, &rhs);
- }
- //
- // Compare string.
- //
- int strncmp(const char *s, pj_size_t len) const
- {
- return pj_strncmp2(this, s, len);
- }
- //
- // Compare string.
- //
- int strncmp(const pj_str_t *s, pj_size_t len) const
- {
- return pj_strncmp(this, s, len);
- }
- //
- // Compare string.
- //
- int strncmp(const Pj_String &rhs, pj_size_t len) const
- {
- return pj_strncmp(this, &rhs, len);
- }
- //
- // Compare string.
- //
- int stricmp(const char *s) const
- {
- return pj_stricmp2(this, s);
- }
- //
- // Compare string.
- //
- int stricmp(const pj_str_t *s) const
- {
- return pj_stricmp(this, s);
- }
- //
- // Compare string.
- //
- int stricmp(const Pj_String &rhs) const
- {
- return stricmp(&rhs);
- }
- //
- // Compare string.
- //
- int strnicmp(const char *s, pj_size_t len) const
- {
- return pj_strnicmp2(this, s, len);
- }
- //
- // Compare string.
- //
- int strnicmp(const pj_str_t *s, pj_size_t len) const
- {
- return pj_strnicmp(this, s, len);
- }
- //
- // Compare string.
- //
- int strnicmp(const Pj_String &rhs, pj_size_t len) const
- {
- return strnicmp(&rhs, len);
- }
- //
- // Compare contents for equality.
- //
- bool operator==(const char *s) const
- {
- return strcmp(s) == 0;
- }
- //
- // Compare contents for equality.
- //
- bool operator==(const pj_str_t *s) const
- {
- return strcmp(s) == 0;
- }
- //
- // Compare contents for equality.
- //
- bool operator==(const Pj_String &rhs) const
- {
- return pj_strcmp(this, &rhs) == 0;
- }
- //
- // Assign from char*
- //
- Pj_String& operator=(char *s)
- {
- set(s);
- return *this;
- }
- ///
- // Assign from another Pj_String, use with care!
- //
- Pj_String& operator=(const Pj_String &rhs)
- {
- ptr = rhs.ptr;
- slen = rhs.slen;
- return *this;
- }
- //
- // Find a character in the string.
- //
- char *strchr(int chr)
- {
- return pj_strchr(this, chr);
- }
- //
- // Find a character in the string.
- //
- char *find(int chr)
- {
- return strchr(chr);
- }
- //
- // Concatenate string.
- //
- void strcat(const Pj_String &rhs)
- {
- pj_strcat(this, &rhs);
- }
- //
- // Left trim.
- //
- void ltrim()
- {
- pj_strltrim(this);
- }
- //
- // Right trim.
- //
- void rtrim()
- {
- pj_strrtrim(this);
- }
- //
- // Left and right trim.
- //
- void trim()
- {
- pj_strtrim(this);
- }
- //
- // Convert to unsigned long.
- //
- unsigned long to_ulong() const
- {
- return pj_strtoul(this);
- }
- //
- // Convert from unsigned long.
- //
- void from_ulong(unsigned long value)
- {
- slen = pj_utoa(value, ptr);
- }
- //
- // Convert from unsigned long with padding.
- //
- void from_ulong_with_pad(unsigned long value, int min_dig=0, int pad=' ')
- {
- slen = pj_utoa_pad(value, ptr, min_dig, pad);
- }
- };
- #endif /* __PJPP_STRING_HPP__ */
|