~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_string.h

  • Committer: Andrey Hristov
  • Date: 2008-08-06 00:04:45 UTC
  • mto: (264.1.5 codestyle)
  • mto: This revision was merged to the branch mainline in revision 266.
  • Revision ID: ahristov@mysql.com-20080806000445-84urmltikgwk9v5d
Constify the usage of CHARSET_INFO almost to the last place in the code.
99% of the parameters are const CHARSET_INFO * const cs.
Wherever possible stack variables are also double consted.

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
#endif
28
28
 
29
29
class String;
30
 
int sortcmp(const String *a,const String *b, CHARSET_INFO *cs);
 
30
int sortcmp(const String *a,const String *b, const CHARSET_INFO * const cs);
31
31
String *copy_if_not_alloced(String *a,String *b,uint32_t arg_length);
32
 
uint32_t copy_and_convert(char *to, uint32_t to_length, CHARSET_INFO *to_cs,
 
32
uint32_t copy_and_convert(char *to, uint32_t to_length, const CHARSET_INFO * const to_cs,
33
33
                        const char *from, uint32_t from_length,
34
 
                        CHARSET_INFO *from_cs, uint *errors);
35
 
uint32_t well_formed_copy_nchars(CHARSET_INFO *to_cs,
 
34
                        const CHARSET_INFO * const from_cs, uint *errors);
 
35
uint32_t well_formed_copy_nchars(const CHARSET_INFO * const to_cs,
36
36
                               char *to, uint to_length,
37
 
                               CHARSET_INFO *from_cs,
 
37
                               const CHARSET_INFO * const from_cs,
38
38
                               const char *from, uint from_length,
39
39
                               uint nchars,
40
40
                               const char **well_formed_error_pos,
41
41
                               const char **cannot_convert_error_pos,
42
42
                               const char **from_end_pos);
43
 
size_t my_copy_with_hex_escaping(CHARSET_INFO *cs,
 
43
size_t my_copy_with_hex_escaping(const CHARSET_INFO * const cs,
44
44
                                 char *dst, size_t dstlen,
45
45
                                 const char *src, size_t srclen);
46
46
 
49
49
  char *Ptr;
50
50
  uint32_t str_length,Alloced_length;
51
51
  bool alloced;
52
 
  CHARSET_INFO *str_charset;
 
52
  const CHARSET_INFO *str_charset;
53
53
public:
54
54
  String()
55
55
  { 
61
61
    alloced=0; Alloced_length=0; (void) real_alloc(length_arg); 
62
62
    str_charset= &my_charset_bin;
63
63
  }
64
 
  String(const char *str, CHARSET_INFO *cs)
 
64
  String(const char *str, const CHARSET_INFO * const cs)
65
65
  { 
66
66
    Ptr=(char*) str; str_length=(uint) strlen(str); Alloced_length=0; alloced=0;
67
67
    str_charset=cs;
68
68
  }
69
 
  String(const char *str,uint32_t len, CHARSET_INFO *cs)
 
69
  String(const char *str,uint32_t len, const CHARSET_INFO * const cs)
70
70
  { 
71
71
    Ptr=(char*) str; str_length=len; Alloced_length=0; alloced=0;
72
72
    str_charset=cs;
73
73
  }
74
 
  String(char *str,uint32_t len, CHARSET_INFO *cs)
 
74
  String(char *str,uint32_t len, const CHARSET_INFO * const cs)
75
75
  { 
76
76
    Ptr=(char*) str; Alloced_length=str_length=len; alloced=0;
77
77
    str_charset=cs;
92
92
  { /* never called */ }
93
93
  ~String() { free(); }
94
94
 
95
 
  inline void set_charset(CHARSET_INFO *charset_arg)
 
95
  inline void set_charset(const CHARSET_INFO * const charset_arg)
96
96
  { str_charset= charset_arg; }
97
 
  inline CHARSET_INFO *charset() const { return str_charset; }
 
97
  inline const CHARSET_INFO *charset() const { return str_charset; }
98
98
  inline uint32_t length() const { return str_length;}
99
99
  inline uint32_t alloced_length() const { return Alloced_length;}
100
100
  inline char& operator [] (uint32_t i) const { return Ptr[i]; }
135
135
      Alloced_length=0;
136
136
    str_charset=str.str_charset;
137
137
  }
138
 
  inline void set(char *str,uint32_t arg_length, CHARSET_INFO *cs)
 
138
  inline void set(char *str,uint32_t arg_length, const CHARSET_INFO * const cs)
139
139
  {
140
140
    free();
141
141
    Ptr=(char*) str; str_length=Alloced_length=arg_length ; alloced=0;
142
142
    str_charset=cs;
143
143
  }
144
 
  inline void set(const char *str,uint32_t arg_length, CHARSET_INFO *cs)
 
144
  inline void set(const char *str,uint32_t arg_length, const CHARSET_INFO * const cs)
145
145
  {
146
146
    free();
147
147
    Ptr=(char*) str; str_length=arg_length; Alloced_length=0 ; alloced=0;
148
148
    str_charset=cs;
149
149
  }
150
150
  bool set_ascii(const char *str, uint32_t arg_length);
151
 
  inline void set_quick(char *str,uint32_t arg_length, CHARSET_INFO *cs)
 
151
  inline void set_quick(char *str,uint32_t arg_length, const CHARSET_INFO * const cs)
152
152
  {
153
153
    if (!alloced)
154
154
    {
156
156
    }
157
157
    str_charset=cs;
158
158
  }
159
 
  bool set_int(int64_t num, bool unsigned_flag, CHARSET_INFO *cs);
160
 
  bool set(int64_t num, CHARSET_INFO *cs)
 
159
  bool set_int(int64_t num, bool unsigned_flag, const CHARSET_INFO * const cs);
 
160
  bool set(int64_t num, const CHARSET_INFO * const cs)
161
161
  { return set_int(num, false, cs); }
162
 
  bool set(uint64_t num, CHARSET_INFO *cs)
 
162
  bool set(uint64_t num, const CHARSET_INFO * const cs)
163
163
  { return set_int((int64_t)num, true, cs); }
164
 
  bool set_real(double num,uint decimals, CHARSET_INFO *cs);
 
164
  bool set_real(double num,uint decimals, const CHARSET_INFO * const cs);
165
165
 
166
166
  /*
167
167
    PMG 2004.11.12
245
245
 
246
246
  bool copy();                                  // Alloc string if not alloced
247
247
  bool copy(const String &s);                   // Allocate new string
248
 
  bool copy(const char *s,uint32_t arg_length, CHARSET_INFO *cs);       // Allocate new string
 
248
  bool copy(const char *s,uint32_t arg_length, const CHARSET_INFO * const cs);  // Allocate new string
249
249
  static bool needs_conversion(uint32_t arg_length,
250
 
                               CHARSET_INFO *cs_from, CHARSET_INFO *cs_to,
 
250
                               const CHARSET_INFO * const cs_from, const CHARSET_INFO * const cs_to,
251
251
                               uint32_t *offset);
252
252
  bool copy_aligned(const char *s, uint32_t arg_length, uint32_t offset,
253
 
                    CHARSET_INFO *cs);
254
 
  bool set_or_copy_aligned(const char *s, uint32_t arg_length, CHARSET_INFO *cs);
255
 
  bool copy(const char*s,uint32_t arg_length, CHARSET_INFO *csfrom,
256
 
            CHARSET_INFO *csto, uint *errors);
 
253
                    const CHARSET_INFO * const cs);
 
254
  bool set_or_copy_aligned(const char *s, uint32_t arg_length, const CHARSET_INFO * const cs);
 
255
  bool copy(const char*s,uint32_t arg_length, const CHARSET_INFO * const csfrom,
 
256
            const CHARSET_INFO * const csto, uint *errors);
257
257
  bool append(const String &s);
258
258
  bool append(const char *s);
259
259
  bool append(const char *s,uint32_t arg_length);
260
 
  bool append(const char *s,uint32_t arg_length, CHARSET_INFO *cs);
 
260
  bool append(const char *s,uint32_t arg_length, const CHARSET_INFO * const cs);
261
261
  bool append(IO_CACHE* file, uint32_t arg_length);
262
262
  bool append_with_prefill(const char *s, uint32_t arg_length, 
263
263
                           uint32_t full_length, char fill_char);
281
281
  }
282
282
  bool fill(uint32_t max_length,char fill);
283
283
  void strip_sp();
284
 
  friend int sortcmp(const String *a,const String *b, CHARSET_INFO *cs);
 
284
  friend int sortcmp(const String *a,const String *b, const CHARSET_INFO * const cs);
285
285
  friend int stringcmp(const String *a,const String *b);
286
286
  friend String *copy_if_not_alloced(String *a,String *b,uint32_t arg_length);
287
287
  uint32_t numchars();
374
374
  }
375
375
};
376
376
 
377
 
static inline bool check_if_only_end_space(CHARSET_INFO *cs, char *str, 
 
377
static inline bool check_if_only_end_space(const CHARSET_INFO * const cs, char *str, 
378
378
                                           char *end)
379
379
{
380
380
  return str+ cs->cset->scan(cs, str, end, MY_SEQ_SPACES) == end;