Main Page | Class List | Directories | File List | Class Members | File Members

stralloc.c File Reference

#include "global.h"
#include "stralloc.h"
#include "pike_macros.h"
#include "dynamic_buffer.h"
#include "pike_memory.h"
#include "pike_error.h"
#include "gc.h"
#include "stuff.h"
#include "bignum.h"
#include "interpret.h"
#include "block_alloc.h"
#include "operators.h"
#include "pike_float.h"
#include "port.h"
#include <errno.h>
#include <float.h>
#include <ctype.h>
#include <math.h>

Classes

struct  short_pike_string0
struct  short_pike_string1
struct  short_pike_string2

Defines

#define SET_HSIZE(X)   htable_mask=(htable_size=(1<<(X)))-1
#define HMODULO(X)   ((X) & (htable_mask))
#define LOCK_BUCKET(HVAL)
#define UNLOCK_BUCKET(HVAL)
#define BEGIN_HASH_SIZE   997
#define MAX_AVG_LINK_LENGTH   3
#define StrHash(s, len)   low_do_hash(s,len,0)
#define CONVERT(FROM, TO)
#define TWO_SIZES(X, Y)   (((X)<<2)+(Y))
#define locate_problem(X)
#define SHORT_STRING_BLOCK   256
#define SHORT_STRING_THRESHOLD   15
#define really_free_short_pike_string(s)
#define really_free_pike_string(s)
#define VA_LIST_PTR   va_list *
#define VA_LIST_ADDR(X)   (&(X))
#define VA_LIST_DEREF(X)   (*(X))
#define STATE_MIN_WIDTH   1
#define STATE_PRECISION   2
#define DIGIT(x)
#define MBASE   ('z' - 'a' + 1 + 10)

Typedefs

typedef char *(* replace_searchfunc )(void *, void *, size_t)

Functions

PMOD_EXPORT unsigned INT32 index_shared_string (struct pike_string *s, ptrdiff_t pos)
PMOD_EXPORT void low_set_index (struct pike_string *s, ptrdiff_t pos, int value)
PMOD_EXPORT int generic_compare_strings (const void *a, ptrdiff_t alen, int asize, const void *b, ptrdiff_t blen, int bsize)
PMOD_EXPORT void generic_memcpy (PCHARP to, PCHARP from, ptrdiff_t len)
PMOD_EXPORT void pike_string_cpy (PCHARP to, struct pike_string *from)
PMOD_EXPORT struct pike_stringbinary_findstring (const char *foo, ptrdiff_t l)
PMOD_EXPORT struct pike_stringfindstring (const char *foo)
PMOD_EXPORT struct pike_stringdebug_begin_shared_string (size_t len)
PMOD_EXPORT struct pike_stringdebug_begin_wide_shared_string (size_t len, int shift)
PMOD_EXPORT struct pike_stringlow_end_shared_string (struct pike_string *s)
PMOD_EXPORT struct pike_stringend_shared_string (struct pike_string *s)
PMOD_EXPORT struct pike_stringend_and_resize_shared_string (struct pike_string *str, ptrdiff_t len)
PMOD_EXPORT struct pike_stringdebug_make_shared_binary_string (const char *str, size_t len)
PMOD_EXPORT struct pike_stringdebug_make_shared_binary_pcharp (const PCHARP str, size_t len)
PMOD_EXPORT struct pike_stringdebug_make_shared_pcharp (const PCHARP str)
PMOD_EXPORT struct pike_stringdebug_make_shared_binary_string0 (const p_wchar0 *str, size_t len)
PMOD_EXPORT struct pike_stringdebug_make_shared_binary_string1 (const p_wchar1 *str, size_t len)
PMOD_EXPORT struct pike_stringdebug_make_shared_binary_string2 (const p_wchar2 *str, size_t len)
PMOD_EXPORT struct pike_stringdebug_make_shared_string (const char *str)
PMOD_EXPORT struct pike_stringdebug_make_shared_string0 (const p_wchar0 *str)
PMOD_EXPORT struct pike_stringdebug_make_shared_string1 (const p_wchar1 *str)
PMOD_EXPORT struct pike_stringdebug_make_shared_string2 (const p_wchar2 *str)
PMOD_EXPORT void unlink_pike_string (struct pike_string *s)
PMOD_EXPORT void do_free_string (struct pike_string *s)
PMOD_EXPORT void do_really_free_string (struct pike_string *s)
PMOD_EXPORT void do_really_free_pike_string (struct pike_string *s)
PMOD_EXPORT void really_free_string (struct pike_string *s)
PMOD_EXPORT void debug_free_string (struct pike_string *s)
pike_stringadd_string_status (int verbose)
PMOD_EXPORT int low_quick_binary_strcmp (char *a, ptrdiff_t alen, char *b, ptrdiff_t blen)
PMOD_EXPORT ptrdiff_t generic_quick_binary_strcmp (const char *a, ptrdiff_t alen, int asize, const char *b, ptrdiff_t blen, int bsize)
PMOD_EXPORT int c_compare_string (struct pike_string *s, char *foo, int len)
PMOD_EXPORT ptrdiff_t my_quick_strcmp (struct pike_string *a, struct pike_string *b)
PMOD_EXPORT ptrdiff_t my_strcmp (struct pike_string *a, struct pike_string *b)
PMOD_EXPORT struct pike_stringrealloc_unlinked_string (struct pike_string *a, ptrdiff_t size)
PMOD_EXPORT struct pike_stringrealloc_shared_string (struct pike_string *a, ptrdiff_t size)
PMOD_EXPORT struct pike_stringnew_realloc_shared_string (struct pike_string *a, INT32 size, int shift)
PMOD_EXPORT struct pike_stringmodify_shared_string (struct pike_string *a, INT32 index, INT32 c)
PMOD_EXPORT struct pike_stringadd_shared_strings (struct pike_string *a, struct pike_string *b)
PMOD_EXPORT struct pike_stringadd_and_free_shared_strings (struct pike_string *a, struct pike_string *b)
PMOD_EXPORT ptrdiff_t string_search (struct pike_string *haystack, struct pike_string *needle, ptrdiff_t start)
PMOD_EXPORT struct pike_stringstring_slice (struct pike_string *s, ptrdiff_t start, ptrdiff_t len)
PMOD_EXPORT struct pike_stringstring_replace (struct pike_string *str, struct pike_string *del, struct pike_string *to)
void init_shared_string_table (void)
void cleanup_shared_string_table (void)
void count_memory_in_strings (INT32 *num, INT32 *size)
pike_stringnext_pike_string (struct pike_string *s)
PMOD_EXPORT void init_string_builder (struct string_builder *s, int mag)
PMOD_EXPORT void init_string_builder_alloc (struct string_builder *s, ptrdiff_t length, int mag)
PMOD_EXPORT void init_string_builder_copy (struct string_builder *to, struct string_builder *from)
PMOD_EXPORT int init_string_builder_with_string (struct string_builder *s, struct pike_string *str)
PMOD_EXPORT void string_build_mkspace (struct string_builder *s, ptrdiff_t chars, int mag)
PMOD_EXPORT void * string_builder_allocate (struct string_builder *s, ptrdiff_t chars, int mag)
PMOD_EXPORT void string_builder_putchar (struct string_builder *s, int ch)
PMOD_EXPORT void string_builder_binary_strcat0 (struct string_builder *s, const p_wchar0 *str, ptrdiff_t len)
PMOD_EXPORT void string_builder_binary_strcat1 (struct string_builder *s, const p_wchar1 *str, ptrdiff_t len)
PMOD_EXPORT void string_builder_binary_strcat2 (struct string_builder *s, const p_wchar2 *str, ptrdiff_t len)
PMOD_EXPORT void string_builder_append (struct string_builder *s, PCHARP from, ptrdiff_t len)
PMOD_EXPORT void string_builder_fill (struct string_builder *s, ptrdiff_t howmany, PCHARP from, ptrdiff_t len, ptrdiff_t offset)
PMOD_EXPORT void string_builder_strcat (struct string_builder *s, char *str)
PMOD_EXPORT void string_builder_shared_strcat (struct string_builder *s, struct pike_string *str)
PMOD_EXPORT void string_builder_append_integer (struct string_builder *s, LONGEST val, unsigned int base, int flags, size_t min_width, size_t precision)
PMOD_EXPORT void string_builder_vsprintf (struct string_builder *s, const char *fmt, va_list args)
PMOD_EXPORT void string_builder_sprintf (struct string_builder *s, const char *fmt,...)
PMOD_EXPORT void reset_string_builder (struct string_builder *s)
PMOD_EXPORT void free_string_builder (struct string_builder *s)
PMOD_EXPORT struct pike_stringfinish_string_builder (struct string_builder *s)
PMOD_EXPORT PCHARP MEMCHR_PCHARP (PCHARP ptr, int chr, ptrdiff_t len)
PMOD_EXPORT long STRTOL_PCHARP (PCHARP str, PCHARP *ptr, int base)
PMOD_EXPORT int string_to_svalue_inumber (struct svalue *r, char *str, char **ptr, int base, int maxlength)
PMOD_EXPORT int wide_string_to_svalue_inumber (struct svalue *r, void *str, void *ptr, int base, ptrdiff_t maxlength, int shift)
PMOD_EXPORT int pcharp_to_svalue_inumber (struct svalue *r, PCHARP str, PCHARP *ptr, int base, ptrdiff_t maxlength)
PMOD_EXPORT int convert_stack_top_string_to_inumber (int base)
PMOD_EXPORT double STRTOD_PCHARP (PCHARP nptr, PCHARP *endptr)
PMOD_EXPORT p_wchar0require_wstring0 (struct pike_string *s, char **to_free)
PMOD_EXPORT p_wchar1require_wstring1 (struct pike_string *s, char **to_free)
PMOD_EXPORT p_wchar2require_wstring2 (struct pike_string *s, char **to_free)

Variables

unsigned INT32 htable_mask
PMOD_EXPORT struct pike_stringempty_pike_string = 0

Define Documentation

#define BEGIN_HASH_SIZE   997
 

#define CONVERT FROM,
TO   ) 
 

Value:

void PIKE_CONCAT4(convert_,FROM,_to_,TO) (PIKE_CONCAT(p_wchar,TO) *to, \
                                            const PIKE_CONCAT(p_wchar,FROM) *from, \
                                            ptrdiff_t len)              \
  {                                                                     \
    while(--len>=0) *(to++)=*(from++);                                  \
  }                                                                     \
  INT32 PIKE_CONCAT4(compare_,FROM,_to_,TO) (const PIKE_CONCAT(p_wchar,TO) *to, \
                                             const PIKE_CONCAT(p_wchar,FROM) *from, \
                                             ptrdiff_t len)             \
  {                                                                     \
    int tmp;                                                            \
    while(--len>=0)                                                     \
      if((tmp=*(to++)-*(from++)))                                       \
        return tmp;                                                     \
    return 0;                                                           \
  }

#define DIGIT  ) 
 

Value:

(WIDE_ISDIGIT(x) ? (x) - '0' : \
                         WIDE_ISLOWER(x) ? (x) + 10 - 'a' : (x) + 10 - 'A')

#define HMODULO  )     ((X) & (htable_mask))
 

#define locate_problem  ) 
 

#define LOCK_BUCKET HVAL   ) 
 

#define MAX_AVG_LINK_LENGTH   3
 

#define MBASE   ('z' - 'a' + 1 + 10)
 

#define really_free_pike_string  ) 
 

Value:

do { \
    if (s->len <= SHORT_STRING_THRESHOLD) { \
      really_free_short_pike_string(s); \
    } else { \
      debug_free((char *)s, DMALLOC_LOCATION(), 1); \
    } \
  } while(0)

#define really_free_short_pike_string  ) 
 

Value:

do { \
     if (!s->size_shift) { \
       really_free_short_pike_string0((struct short_pike_string0 *)s); \
     } else if (s->size_shift == 1) { \
       really_free_short_pike_string1((struct short_pike_string1 *)s); \
     DO_IF_DEBUG( \
     } else if (s->size_shift != 2) { \
       Pike_fatal("Unsupported string shift: %d\n", s->size_shift); \
     ) \
     } else { \
       really_free_short_pike_string2((struct short_pike_string2 *)s); \
     } \
   } while(0)

#define SET_HSIZE  )     htable_mask=(htable_size=(1<<(X)))-1
 

#define SHORT_STRING_BLOCK   256
 

#define SHORT_STRING_THRESHOLD   15
 

#define STATE_MIN_WIDTH   1
 

#define STATE_PRECISION   2
 

#define StrHash s,
len   )     low_do_hash(s,len,0)
 

#define TWO_SIZES X,
 )     (((X)<<2)+(Y))
 

#define UNLOCK_BUCKET HVAL   ) 
 

#define VA_LIST_ADDR  )     (&(X))
 

#define VA_LIST_DEREF  )     (*(X))
 

#define VA_LIST_PTR   va_list *
 


Typedef Documentation

typedef char*(* replace_searchfunc)(void *, void *, size_t)
 


Function Documentation

PMOD_EXPORT struct pike_string* add_and_free_shared_strings struct pike_string a,
struct pike_string b
 

PMOD_EXPORT struct pike_string* add_shared_strings struct pike_string a,
struct pike_string b
 

struct pike_string* add_string_status int  verbose  ) 
 

PMOD_EXPORT struct pike_string* binary_findstring const char *  foo,
ptrdiff_t  l
 

PMOD_EXPORT int c_compare_string struct pike_string s,
char *  foo,
int  len
 

void cleanup_shared_string_table void   ) 
 

PMOD_EXPORT int convert_stack_top_string_to_inumber int  base  ) 
 

void count_memory_in_strings INT32 *  num,
INT32 *  size
 

PMOD_EXPORT struct pike_string* debug_begin_shared_string size_t  len  ) 
 

PMOD_EXPORT struct pike_string* debug_begin_wide_shared_string size_t  len,
int  shift
 

PMOD_EXPORT void debug_free_string struct pike_string s  ) 
 

PMOD_EXPORT struct pike_string* debug_make_shared_binary_pcharp const PCHARP  str,
size_t  len
 

PMOD_EXPORT struct pike_string* debug_make_shared_binary_string const char *  str,
size_t  len
 

PMOD_EXPORT struct pike_string* debug_make_shared_binary_string0 const p_wchar0 str,
size_t  len
 

PMOD_EXPORT struct pike_string* debug_make_shared_binary_string1 const p_wchar1 str,
size_t  len
 

PMOD_EXPORT struct pike_string* debug_make_shared_binary_string2 const p_wchar2 str,
size_t  len
 

PMOD_EXPORT struct pike_string* debug_make_shared_pcharp const PCHARP  str  ) 
 

PMOD_EXPORT struct pike_string* debug_make_shared_string const char *  str  ) 
 

PMOD_EXPORT struct pike_string* debug_make_shared_string0 const p_wchar0 str  ) 
 

PMOD_EXPORT struct pike_string* debug_make_shared_string1 const p_wchar1 str  ) 
 

PMOD_EXPORT struct pike_string* debug_make_shared_string2 const p_wchar2 str  ) 
 

PMOD_EXPORT void do_free_string struct pike_string s  ) 
 

PMOD_EXPORT void do_really_free_pike_string struct pike_string s  ) 
 

PMOD_EXPORT void do_really_free_string struct pike_string s  ) 
 

PMOD_EXPORT struct pike_string* end_and_resize_shared_string struct pike_string str,
ptrdiff_t  len
 

PMOD_EXPORT struct pike_string* end_shared_string struct pike_string s  ) 
 

PMOD_EXPORT struct pike_string* findstring const char *  foo  ) 
 

PMOD_EXPORT struct pike_string* finish_string_builder struct string_builder s  ) 
 

PMOD_EXPORT void free_string_builder struct string_builder s  ) 
 

PMOD_EXPORT int generic_compare_strings const void *  a,
ptrdiff_t  alen,
int  asize,
const void *  b,
ptrdiff_t  blen,
int  bsize
 

PMOD_EXPORT void generic_memcpy PCHARP  to,
PCHARP  from,
ptrdiff_t  len
 

PMOD_EXPORT ptrdiff_t generic_quick_binary_strcmp const char *  a,
ptrdiff_t  alen,
int  asize,
const char *  b,
ptrdiff_t  blen,
int  bsize
 

PMOD_EXPORT unsigned INT32 index_shared_string struct pike_string s,
ptrdiff_t  pos
 

void init_shared_string_table void   ) 
 

PMOD_EXPORT void init_string_builder struct string_builder s,
int  mag
 

PMOD_EXPORT void init_string_builder_alloc struct string_builder s,
ptrdiff_t  length,
int  mag
 

PMOD_EXPORT void init_string_builder_copy struct string_builder to,
struct string_builder from
 

PMOD_EXPORT int init_string_builder_with_string struct string_builder s,
struct pike_string str
 

PMOD_EXPORT struct pike_string* low_end_shared_string struct pike_string s  ) 
 

PMOD_EXPORT int low_quick_binary_strcmp char *  a,
ptrdiff_t  alen,
char *  b,
ptrdiff_t  blen
 

PMOD_EXPORT void low_set_index struct pike_string s,
ptrdiff_t  pos,
int  value
 

PMOD_EXPORT PCHARP MEMCHR_PCHARP PCHARP  ptr,
int  chr,
ptrdiff_t  len
 

PMOD_EXPORT struct pike_string* modify_shared_string struct pike_string a,
INT32  index,
INT32  c
 

PMOD_EXPORT ptrdiff_t my_quick_strcmp struct pike_string a,
struct pike_string b
 

PMOD_EXPORT ptrdiff_t my_strcmp struct pike_string a,
struct pike_string b
 

PMOD_EXPORT struct pike_string* new_realloc_shared_string struct pike_string a,
INT32  size,
int  shift
 

struct pike_string* next_pike_string struct pike_string s  ) 
 

PMOD_EXPORT int pcharp_to_svalue_inumber struct svalue r,
PCHARP  str,
PCHARP ptr,
int  base,
ptrdiff_t  maxlength
 

PMOD_EXPORT void pike_string_cpy PCHARP  to,
struct pike_string from
 

PMOD_EXPORT struct pike_string* realloc_shared_string struct pike_string a,
ptrdiff_t  size
 

PMOD_EXPORT struct pike_string* realloc_unlinked_string struct pike_string a,
ptrdiff_t  size
 

PMOD_EXPORT void really_free_string struct pike_string s  ) 
 

PMOD_EXPORT p_wchar0* require_wstring0 struct pike_string s,
char **  to_free
 

PMOD_EXPORT p_wchar1* require_wstring1 struct pike_string s,
char **  to_free
 

PMOD_EXPORT p_wchar2* require_wstring2 struct pike_string s,
char **  to_free
 

PMOD_EXPORT void reset_string_builder struct string_builder s  ) 
 

PMOD_EXPORT void string_build_mkspace struct string_builder s,
ptrdiff_t  chars,
int  mag
 

PMOD_EXPORT void* string_builder_allocate struct string_builder s,
ptrdiff_t  chars,
int  mag
 

PMOD_EXPORT void string_builder_append struct string_builder s,
PCHARP  from,
ptrdiff_t  len
 

PMOD_EXPORT void string_builder_append_integer struct string_builder s,
LONGEST  val,
unsigned int  base,
int  flags,
size_t  min_width,
size_t  precision
 

PMOD_EXPORT void string_builder_binary_strcat0 struct string_builder s,
const p_wchar0 str,
ptrdiff_t  len
 

PMOD_EXPORT void string_builder_binary_strcat1 struct string_builder s,
const p_wchar1 str,
ptrdiff_t  len
 

PMOD_EXPORT void string_builder_binary_strcat2 struct string_builder s,
const p_wchar2 str,
ptrdiff_t  len
 

PMOD_EXPORT void string_builder_fill struct string_builder s,
ptrdiff_t  howmany,
PCHARP  from,
ptrdiff_t  len,
ptrdiff_t  offset
 

PMOD_EXPORT void string_builder_putchar struct string_builder s,
int  ch
 

PMOD_EXPORT void string_builder_shared_strcat struct string_builder s,
struct pike_string str
 

PMOD_EXPORT void string_builder_sprintf struct string_builder s,
const char *  fmt,
  ...
 

PMOD_EXPORT void string_builder_strcat struct string_builder s,
char *  str
 

PMOD_EXPORT void string_builder_vsprintf struct string_builder s,
const char *  fmt,
va_list  args
 

PMOD_EXPORT struct pike_string* string_replace struct pike_string str,
struct pike_string del,
struct pike_string to
 

PMOD_EXPORT ptrdiff_t string_search struct pike_string haystack,
struct pike_string needle,
ptrdiff_t  start
 

PMOD_EXPORT struct pike_string* string_slice struct pike_string s,
ptrdiff_t  start,
ptrdiff_t  len
 

PMOD_EXPORT int string_to_svalue_inumber struct svalue r,
char *  str,
char **  ptr,
int  base,
int  maxlength
 

PMOD_EXPORT double STRTOD_PCHARP PCHARP  nptr,
PCHARP endptr
 

PMOD_EXPORT long STRTOL_PCHARP PCHARP  str,
PCHARP ptr,
int  base
 

PMOD_EXPORT void unlink_pike_string struct pike_string s  ) 
 

PMOD_EXPORT int wide_string_to_svalue_inumber struct svalue r,
void *  str,
void *  ptr,
int  base,
ptrdiff_t  maxlength,
int  shift
 


Variable Documentation

PMOD_EXPORT struct pike_string* empty_pike_string = 0
 

unsigned INT32 htable_mask
 


Generated on Fri Jul 22 23:44:30 2005 for Pike by  doxygen 1.3.9.1