Lines Matching refs:p
46 static void decimal_clear(Decimal *p){ in decimal_clear() argument
47 sqlite3_free(p->a); in decimal_clear()
53 static void decimal_free(Decimal *p){ in decimal_free() argument
54 if( p ){ in decimal_free()
55 decimal_clear(p); in decimal_free()
56 sqlite3_free(p); in decimal_free()
70 Decimal *p; in decimal_new() local
74 p = sqlite3_malloc( sizeof(*p) ); in decimal_new()
75 if( p==0 ) goto new_no_mem; in decimal_new()
76 p->sign = 0; in decimal_new()
77 p->oom = 0; in decimal_new()
78 p->isInit = 1; in decimal_new()
79 p->isNull = 0; in decimal_new()
80 p->nDigit = 0; in decimal_new()
81 p->nFrac = 0; in decimal_new()
87 p->a = 0; in decimal_new()
88 p->isNull = 1; in decimal_new()
89 return p; in decimal_new()
94 p->a = sqlite3_malloc64( n+1 ); in decimal_new()
95 if( p->a==0 ) goto new_no_mem; in decimal_new()
98 p->sign = 1; in decimal_new()
107 p->a[p->nDigit++] = c - '0'; in decimal_new()
109 p->nFrac = p->nDigit + 1; in decimal_new()
131 if( p->nFrac ){ in decimal_new()
132 p->nFrac = p->nDigit - (p->nFrac - 1); in decimal_new()
135 if( p->nFrac>0 ){ in decimal_new()
136 if( iExp<=p->nFrac ){ in decimal_new()
137 p->nFrac -= iExp; in decimal_new()
140 iExp -= p->nFrac; in decimal_new()
141 p->nFrac = 0; in decimal_new()
145 p->a = sqlite3_realloc64(p->a, p->nDigit + iExp + 1 ); in decimal_new()
146 if( p->a==0 ) goto new_no_mem; in decimal_new()
147 memset(p->a+p->nDigit, 0, iExp); in decimal_new()
148 p->nDigit += iExp; in decimal_new()
153 nExtra = p->nDigit - p->nFrac - 1; in decimal_new()
156 p->nFrac += iExp; in decimal_new()
160 p->nFrac = p->nDigit - 1; in decimal_new()
164 p->a = sqlite3_realloc64(p->a, p->nDigit + iExp + 1 ); in decimal_new()
165 if( p->a==0 ) goto new_no_mem; in decimal_new()
166 memmove(p->a+iExp, p->a, p->nDigit); in decimal_new()
167 memset(p->a, 0, iExp); in decimal_new()
168 p->nDigit += iExp; in decimal_new()
169 p->nFrac += iExp; in decimal_new()
172 return p; in decimal_new()
176 sqlite3_free(p); in decimal_new()
183 static void decimal_result(sqlite3_context *pCtx, Decimal *p){ in decimal_result() argument
187 if( p==0 || p->oom ){ in decimal_result()
191 if( p->isNull ){ in decimal_result()
195 z = sqlite3_malloc( p->nDigit+4 ); in decimal_result()
201 if( p->nDigit==0 || (p->nDigit==1 && p->a[0]==0) ){ in decimal_result()
202 p->sign = 0; in decimal_result()
204 if( p->sign ){ in decimal_result()
208 n = p->nDigit - p->nFrac; in decimal_result()
213 while( n>1 && p->a[j]==0 ){ in decimal_result()
218 z[i++] = p->a[j] + '0'; in decimal_result()
222 if( p->nFrac ){ in decimal_result()
225 z[i++] = p->a[j] + '0'; in decimal_result()
227 }while( j<p->nDigit ); in decimal_result()
243 Decimal *p = decimal_new(context, argv[0], 0, 0); in decimalFunc() local
245 decimal_result(context, p); in decimalFunc()
246 decimal_free(p); in decimalFunc()
316 static void decimal_expand(Decimal *p, int nDigit, int nFrac){ in decimal_expand() argument
319 if( p==0 ) return; in decimal_expand()
320 nAddFrac = nFrac - p->nFrac; in decimal_expand()
321 nAddSig = (nDigit - p->nDigit) - nAddFrac; in decimal_expand()
323 p->a = sqlite3_realloc64(p->a, nDigit+1); in decimal_expand()
324 if( p->a==0 ){ in decimal_expand()
325 p->oom = 1; in decimal_expand()
329 memmove(p->a+nAddSig, p->a, p->nDigit); in decimal_expand()
330 memset(p->a, 0, nAddSig); in decimal_expand()
331 p->nDigit += nAddSig; in decimal_expand()
334 memset(p->a+p->nDigit, 0, nAddFrac); in decimal_expand()
335 p->nDigit += nAddFrac; in decimal_expand()
336 p->nFrac += nAddFrac; in decimal_expand()
481 Decimal *p; in decimalSumStep() local
484 p = sqlite3_aggregate_context(context, sizeof(*p)); in decimalSumStep()
485 if( p==0 ) return; in decimalSumStep()
486 if( !p->isInit ){ in decimalSumStep()
487 p->isInit = 1; in decimalSumStep()
488 p->a = sqlite3_malloc(2); in decimalSumStep()
489 if( p->a==0 ){ in decimalSumStep()
490 p->oom = 1; in decimalSumStep()
492 p->a[0] = 0; in decimalSumStep()
494 p->nDigit = 1; in decimalSumStep()
495 p->nFrac = 0; in decimalSumStep()
499 decimal_add(p, pArg); in decimalSumStep()
507 Decimal *p; in decimalSumInverse() local
510 p = sqlite3_aggregate_context(context, sizeof(*p)); in decimalSumInverse()
511 if( p==0 ) return; in decimalSumInverse()
515 decimal_add(p, pArg); in decimalSumInverse()
519 Decimal *p = sqlite3_aggregate_context(context, 0); in decimalSumValue() local
520 if( p==0 ) return; in decimalSumValue()
521 decimal_result(context, p); in decimalSumValue()
524 Decimal *p = sqlite3_aggregate_context(context, 0); in decimalSumFinalize() local
525 if( p==0 ) return; in decimalSumFinalize()
526 decimal_result(context, p); in decimalSumFinalize()
527 decimal_clear(p); in decimalSumFinalize()