String Class Reference

#include <sql_string.h>

Collaboration diagram for String:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 String ()
 String (uint32 length_arg)
 String (const char *str, CHARSET_INFO *cs)
 String (const char *str, uint32 len, CHARSET_INFO *cs)
 String (char *str, uint32 len, CHARSET_INFO *cs)
 String (const String &str)
 ~String ()
void set_charset (CHARSET_INFO *charset)
CHARSET_INFOcharset () const
uint32 length () const
uint32 alloced_length () const
char & operator[] (uint32 i) const
void length (uint32 len)
bool is_empty ()
const char * ptr () const
char * c_ptr ()
char * c_ptr_quick ()
char * c_ptr_safe ()
void set (String &str, uint32 offset, uint32 arg_length)
void set (char *str, uint32 arg_length, CHARSET_INFO *cs)
void set (const char *str, uint32 arg_length, CHARSET_INFO *cs)
void set_quick (char *str, uint32 arg_length, CHARSET_INFO *cs)
bool set (longlong num, CHARSET_INFO *cs)
bool set (ulonglong num, CHARSET_INFO *cs)
bool set (double num, uint decimals, CHARSET_INFO *cs)
void free ()
bool alloc (uint32 arg_length)
bool real_alloc (uint32 arg_length)
bool realloc (uint32 arg_length)
void shrink (uint32 arg_length)
bool is_alloced ()
Stringoperator= (const String &s)
bool copy ()
bool copy (const String &s)
bool copy (const char *s, uint32 arg_length, CHARSET_INFO *cs)
bool copy (const char *s, uint32 arg_length, CHARSET_INFO *csfrom, CHARSET_INFO *csto)
bool append (const String &s)
bool append (const char *s, uint32 arg_length=0)
bool append (IO_CACHE *file, uint32 arg_length)
int strstr (const String &search, uint32 offset=0)
int strstr_case (const String &s, uint32 offset=0)
int strrstr (const String &search, uint32 offset=0)
bool replace (uint32 offset, uint32 arg_length, const String &to)
bool append (char chr)
bool fill (uint32 max_length, char fill)
void strip_sp ()
void caseup ()
void casedn ()
uint32 numchars ()
int charpos (int i, uint32 offset=0)
int reserve (uint32 space_needed)
int reserve (uint32 space_needed, uint32 grow_by)
void q_append (const char &c)
void q_append (const uint32 &n)
void q_append (double d)
void q_append (double *d)
void q_append (const char *data, uint32 data_len)
void WriteAtPosition (int position, uint32 value)
void qs_append (const char *str)
void qs_append (double d)
void qs_append (double *d)
void qs_append (const char &c)
 String ()
 String (uint32 length_arg)
 String (const char *str, CHARSET_INFO *cs)
 String (const char *str, uint32 len, CHARSET_INFO *cs)
 String (char *str, uint32 len, CHARSET_INFO *cs)
 String (const String &str)
 ~String ()
void set_charset (CHARSET_INFO *charset)
CHARSET_INFOcharset () const
uint32 length () const
uint32 alloced_length () const
char & operator[] (uint32 i) const
void length (uint32 len)
bool is_empty ()
const char * ptr () const
char * c_ptr ()
char * c_ptr_quick ()
char * c_ptr_safe ()
void set (String &str, uint32 offset, uint32 arg_length)
void set (char *str, uint32 arg_length, CHARSET_INFO *cs)
void set (const char *str, uint32 arg_length, CHARSET_INFO *cs)
void set_quick (char *str, uint32 arg_length, CHARSET_INFO *cs)
bool set (longlong num, CHARSET_INFO *cs)
bool set (ulonglong num, CHARSET_INFO *cs)
bool set (double num, uint decimals, CHARSET_INFO *cs)
void free ()
bool alloc (uint32 arg_length)
bool real_alloc (uint32 arg_length)
bool realloc (uint32 arg_length)
void shrink (uint32 arg_length)
bool is_alloced ()
Stringoperator= (const String &s)
bool copy ()
bool copy (const String &s)
bool copy (const char *s, uint32 arg_length, CHARSET_INFO *cs)
bool copy (const char *s, uint32 arg_length, CHARSET_INFO *csfrom, CHARSET_INFO *csto)
bool append (const String &s)
bool append (const char *s, uint32 arg_length=0)
bool append (IO_CACHE *file, uint32 arg_length)
int strstr (const String &search, uint32 offset=0)
int strstr_case (const String &s, uint32 offset=0)
int strrstr (const String &search, uint32 offset=0)
bool replace (uint32 offset, uint32 arg_length, const String &to)
bool append (char chr)
bool fill (uint32 max_length, char fill)
void strip_sp ()
void caseup ()
void casedn ()
uint32 numchars ()
int charpos (int i, uint32 offset=0)
int reserve (uint32 space_needed)
int reserve (uint32 space_needed, uint32 grow_by)
void q_append (const char &c)
void q_append (const uint32 &n)
void q_append (double d)
void q_append (double *d)
void q_append (const char *data, uint32 data_len)
void WriteAtPosition (int position, uint32 value)
void qs_append (const char *str)
void qs_append (double d)
void qs_append (double *d)
void qs_append (const char &c)
 String ()
 String (uint32 length_arg)
 String (const char *str, CHARSET_INFO *cs)
 String (const char *str, uint32 len, CHARSET_INFO *cs)
 String (char *str, uint32 len, CHARSET_INFO *cs)
 String (const String &str)
 ~String ()
void set_charset (CHARSET_INFO *charset)
CHARSET_INFOcharset () const
uint32 length () const
uint32 alloced_length () const
char & operator[] (uint32 i) const
void length (uint32 len)
bool is_empty ()
const char * ptr () const
char * c_ptr ()
char * c_ptr_quick ()
char * c_ptr_safe ()
void set (String &str, uint32 offset, uint32 arg_length)
void set (char *str, uint32 arg_length, CHARSET_INFO *cs)
void set (const char *str, uint32 arg_length, CHARSET_INFO *cs)
bool set_ascii (const char *str, uint32 arg_length)
void set_quick (char *str, uint32 arg_length, CHARSET_INFO *cs)
bool set (longlong num, CHARSET_INFO *cs)
bool set (ulonglong num, CHARSET_INFO *cs)
bool set (double num, uint decimals, CHARSET_INFO *cs)
void chop ()
void free ()
bool alloc (uint32 arg_length)
bool real_alloc (uint32 arg_length)
bool realloc (uint32 arg_length)
void shrink (uint32 arg_length)
bool is_alloced ()
Stringoperator= (const String &s)
bool copy ()
bool copy (const String &s)
bool copy (const char *s, uint32 arg_length, CHARSET_INFO *cs)
bool copy_aligned (const char *s, uint32 arg_length, uint32 offset, CHARSET_INFO *cs)
bool set_or_copy_aligned (const char *s, uint32 arg_length, CHARSET_INFO *cs)
bool copy (const char *s, uint32 arg_length, CHARSET_INFO *csfrom, CHARSET_INFO *csto, uint *errors)
bool append (const String &s)
bool append (const char *s)
bool append (const char *s, uint32 arg_length)
bool append (const char *s, uint32 arg_length, CHARSET_INFO *cs)
bool append (IO_CACHE *file, uint32 arg_length)
bool append_with_prefill (const char *s, uint32 arg_length, uint32 full_length, char fill_char)
int strstr (const String &search, uint32 offset=0)
int strrstr (const String &search, uint32 offset=0)
bool replace (uint32 offset, uint32 arg_length, const char *to, uint32 length)
bool replace (uint32 offset, uint32 arg_length, const String &to)
bool append (char chr)
bool fill (uint32 max_length, char fill)
void strip_sp ()
void caseup ()
void casedn ()
uint32 numchars ()
int charpos (int i, uint32 offset=0)
int reserve (uint32 space_needed)
int reserve (uint32 space_needed, uint32 grow_by)
void q_append (const char c)
void q_append (const uint32 n)
void q_append (double d)
void q_append (double *d)
void q_append (const char *data, uint32 data_len)
void write_at_position (int position, uint32 value)
void qs_append (const char *str, uint32 len)
void qs_append (double d)
void qs_append (double *d)
void qs_append (const char c)
void qs_append (int i)
void qs_append (uint i)
char * prep_append (uint32 arg_length, uint32 step_alloc)
bool append (const char *s, uint32 arg_length, uint32 step_alloc)
void print (String *print)
void swap (String &s)

Static Public Member Functions

void * operator new (size_t size)
void operator delete (void *ptr_arg, size_t size)
void * operator new (size_t size)
void operator delete (void *ptr_arg, size_t size)
void * operator new (size_t size, MEM_ROOT *mem_root)
void operator delete (void *ptr_arg, size_t size)
void operator delete (void *ptr_arg, size_t size, MEM_ROOT *mem_root)
bool needs_conversion (uint32 arg_length, CHARSET_INFO *cs_from, CHARSET_INFO *cs_to, uint32 *offset)

Private Attributes

char * Ptr
uint32 str_length
uint32 Alloced_length
bool alloced
CHARSET_INFOstr_charset
char * Ptr
CHARSET_INFOstr_charset
char * Ptr
CHARSET_INFOstr_charset

Friends

int sortcmp (const String *a, const String *b)
int stringcmp (const String *a, const String *b)
Stringcopy_if_not_alloced (String *a, String *b, uint32 arg_length)
int sortcmp (const String *a, const String *b)
int stringcmp (const String *a, const String *b)
Stringcopy_if_not_alloced (String *a, String *b, uint32 arg_length)
int sortcmp (const String *a, const String *b, CHARSET_INFO *cs)
int stringcmp (const String *a, const String *b)
Stringcopy_if_not_alloced (String *a, String *b, uint32 arg_length)

Constructor & Destructor Documentation

String::String  )  [inline]
 

00040   { 
00041     Ptr=0; str_length=Alloced_length=0; alloced=0; 
00042     str_charset= &my_charset_latin1;
00043   }

String::String uint32  length_arg  )  [inline]
 

00045   { 
00046     alloced=0; Alloced_length=0; (void) real_alloc(length_arg); 
00047     str_charset= &my_charset_latin1;
00048   }

String::String const char *  str,
CHARSET_INFO cs
[inline]
 

00050   { 
00051     Ptr=(char*) str; str_length=(uint) strlen(str); Alloced_length=0; alloced=0;
00052     str_charset=cs;
00053   }

String::String const char *  str,
uint32  len,
CHARSET_INFO cs
[inline]
 

00055   { 
00056     Ptr=(char*) str; str_length=len; Alloced_length=0; alloced=0;
00057     str_charset=cs;
00058   }

String::String char *  str,
uint32  len,
CHARSET_INFO cs
[inline]
 

00060   { 
00061     Ptr=(char*) str; Alloced_length=str_length=len; alloced=0;
00062     str_charset=cs;
00063   }

String::String const String str  )  [inline]
 

00065   { 
00066     Ptr=str.Ptr ; str_length=str.str_length ;
00067     Alloced_length=str.Alloced_length; alloced=0; 
00068     str_charset=str.str_charset;
00069   }

String::~String  )  [inline]
 

00073 { free(); }

String::String  )  [inline]
 

00040   { 
00041     Ptr=0; str_length=Alloced_length=0; alloced=0; 
00042     str_charset= &my_charset_latin1;
00043   }

String::String uint32  length_arg  )  [inline]
 

00045   { 
00046     alloced=0; Alloced_length=0; (void) real_alloc(length_arg); 
00047     str_charset= &my_charset_latin1;
00048   }

String::String const char *  str,
CHARSET_INFO cs
[inline]
 

00050   { 
00051     Ptr=(char*) str; str_length=(uint) strlen(str); Alloced_length=0; alloced=0;
00052     str_charset=cs;
00053   }

String::String const char *  str,
uint32  len,
CHARSET_INFO cs
[inline]
 

00055   { 
00056     Ptr=(char*) str; str_length=len; Alloced_length=0; alloced=0;
00057     str_charset=cs;
00058   }

String::String char *  str,
uint32  len,
CHARSET_INFO cs
[inline]
 

00060   { 
00061     Ptr=(char*) str; Alloced_length=str_length=len; alloced=0;
00062     str_charset=cs;
00063   }

String::String const String str  )  [inline]
 

00065   { 
00066     Ptr=str.Ptr ; str_length=str.str_length ;
00067     Alloced_length=str.Alloced_length; alloced=0; 
00068     str_charset=str.str_charset;
00069   }

String::~String  )  [inline]
 

00073 { free(); }

String::String  )  [inline]
 

00042   { 
00043     Ptr=0; str_length=Alloced_length=0; alloced=0; 
00044     str_charset= &my_charset_bin; 
00045   }

String::String uint32  length_arg  )  [inline]
 

00047   { 
00048     alloced=0; Alloced_length=0; (void) real_alloc(length_arg); 
00049     str_charset= &my_charset_bin;
00050   }

String::String const char *  str,
CHARSET_INFO cs
[inline]
 

00052   { 
00053     Ptr=(char*) str; str_length=(uint) strlen(str); Alloced_length=0; alloced=0;
00054     str_charset=cs;
00055   }

String::String const char *  str,
uint32  len,
CHARSET_INFO cs
[inline]
 

00057   { 
00058     Ptr=(char*) str; str_length=len; Alloced_length=0; alloced=0;
00059     str_charset=cs;
00060   }

String::String char *  str,
uint32  len,
CHARSET_INFO cs
[inline]
 

00062   { 
00063     Ptr=(char*) str; Alloced_length=str_length=len; alloced=0;
00064     str_charset=cs;
00065   }

String::String const String str  )  [inline]
 

00067   { 
00068     Ptr=str.Ptr ; str_length=str.str_length ;
00069     Alloced_length=str.Alloced_length; alloced=0; 
00070     str_charset=str.str_charset;
00071   }

String::~String  )  [inline]
 

00078 { free(); }


Member Function Documentation

bool String::alloc uint32  arg_length  )  [inline]
 

00184   {
00185     if (arg_length < Alloced_length)
00186       return 0;
00187     return real_alloc(arg_length);
00188   }

bool String::alloc uint32  arg_length  )  [inline]
 

00149   {
00150     if (arg_length < Alloced_length)
00151       return 0;
00152     return real_alloc(arg_length);
00153   }

bool String::alloc uint32  arg_length  )  [inline]
 

00149   {
00150     if (arg_length < Alloced_length)
00151       return 0;
00152     return real_alloc(arg_length);
00153   }

uint32 String::alloced_length  )  const [inline]
 

00083 { return Alloced_length;}

uint32 String::alloced_length  )  const [inline]
 

00078 { return Alloced_length;}

uint32 String::alloced_length  )  const [inline]
 

00078 { return Alloced_length;}

bool String::append const char *  s,
uint32  arg_length,
uint32  step_alloc
[inline]
 

00334   {
00335     uint32 new_length= arg_length + str_length;
00336     if (new_length > Alloced_length && realloc(new_length + step_alloc))
00337       return TRUE;
00338     memcpy(Ptr+str_length, s, arg_length);
00339     str_length+= arg_length;
00340     return FALSE;
00341   }

bool String::append char  chr  )  [inline]
 

00243   {
00244     if (str_length < Alloced_length)
00245     {
00246       Ptr[str_length++]=chr;
00247     }
00248     else
00249     {
00250       if (realloc(str_length+1))
00251         return 1;
00252       Ptr[str_length++]=chr;
00253     }
00254     return 0;
00255   }

bool String::append IO_CACHE file,
uint32  arg_length
 

bool String::append const char *  s,
uint32  arg_length,
CHARSET_INFO cs
 

00477 {
00478   uint32 dummy_offset;
00479   
00480   if (needs_conversion(arg_length, cs, str_charset, &dummy_offset))
00481   {
00482     uint32 add_length= arg_length / cs->mbminlen * str_charset->mbmaxlen;
00483     uint dummy_errors;
00484     if (realloc(str_length + add_length)) 
00485       return TRUE;
00486     str_length+= copy_and_convert(Ptr+str_length, add_length, str_charset,
00487                                   s, arg_length, cs, &dummy_errors);
00488   }
00489   else
00490   {
00491     if (realloc(str_length + arg_length)) 
00492       return TRUE;
00493     memcpy(Ptr + str_length, s, arg_length);
00494     str_length+= arg_length;
00495   }
00496   return FALSE;
00497 }

bool String::append const char *  s,
uint32  arg_length
 

bool String::append const char *  s  ) 
 

00466 {
00467   return append(s, strlen(s));
00468 }

bool String::append const String s  ) 
 

bool String::append char  chr  )  [inline]
 

00197   {
00198     if (str_length < Alloced_length)
00199     {
00200       Ptr[str_length++]=chr;
00201     }
00202     else
00203     {
00204       if (realloc(str_length+1))
00205         return 1;
00206       Ptr[str_length++]=chr;
00207     }
00208     return 0;
00209   }

bool String::append IO_CACHE file,
uint32  arg_length
 

bool String::append const char *  s,
uint32  arg_length = 0
 

bool String::append const String s  ) 
 

bool String::append char  chr  )  [inline]
 

00197   {
00198     if (str_length < Alloced_length)
00199     {
00200       Ptr[str_length++]=chr;
00201     }
00202     else
00203     {
00204       if (realloc(str_length+1))
00205         return 1;
00206       Ptr[str_length++]=chr;
00207     }
00208     return 0;
00209   }

bool String::append IO_CACHE file,
uint32  arg_length
 

00351 {
00352   if (realloc(str_length+arg_length))
00353     return TRUE;
00354   if (my_b_read(file, (byte*) Ptr + str_length, arg_length))
00355   {
00356     shrink(str_length);
00357     return TRUE;
00358   }
00359   str_length+=arg_length;
00360   return FALSE;
00361 }

bool String::append const char *  s,
uint32  arg_length = 0
 

00324 {
00325   if (!arg_length)                              // Default argument
00326     if (!(arg_length= (uint32) strlen(s)))
00327       return FALSE;
00328   if (realloc(str_length+arg_length))
00329     return TRUE;
00330   memcpy(Ptr+str_length,s,arg_length);
00331   str_length+=arg_length;
00332   return FALSE;
00333 }

bool String::append const String s  ) 
 

00312 {
00313   if (s.length())
00314   {
00315     if (realloc(str_length+s.length()))
00316       return TRUE;
00317     memcpy(Ptr+str_length,s.ptr(),s.length());
00318     str_length+=s.length();
00319   }
00320   return FALSE;
00321 }

bool String::append_with_prefill const char *  s,
uint32  arg_length,
uint32  full_length,
char  fill_char
 

00530 {
00531   int t_length= arg_length > full_length ? arg_length : full_length;
00532 
00533   if (realloc(str_length + t_length))
00534     return TRUE;
00535   t_length= full_length - arg_length;
00536   if (t_length > 0)
00537   {
00538     bfill(Ptr+str_length, t_length, fill_char);
00539     str_length=str_length + t_length;
00540   }
00541   append(s, arg_length);
00542   return FALSE;
00543 }

char* String::c_ptr  )  [inline]
 

00089   {
00090     if (!Ptr || Ptr[str_length])                /* Should be safe */
00091       (void) realloc(str_length);
00092     return Ptr;
00093   }

char* String::c_ptr