469 lines
7.8 KiB
C++
469 lines
7.8 KiB
C++
|
/* $Id$ */
|
||
|
/*
|
||
|
* 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__ */
|
||
|
|