Skip to content

Commit 5e4b175

Browse files
committed
Added bc_convert_vector_to_char() and bc_convert_vector_to_char_with_skip()
1 parent 0865562 commit 5e4b175

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

ext/bcmath/libbcmath/src/convert.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,30 @@ static inline void bc_convert_vector_to_char(const BC_VECTOR *vector, char *nptr
111111
}
112112
}
113113

114+
static inline void bc_convert_vector_to_char_with_skip(const BC_VECTOR *vector, char *nptr, char *nend, size_t arr_size, size_t skip)
115+
{
116+
/* bulk skip */
117+
size_t array_skip = skip / BC_VECTOR_SIZE;
118+
arr_size -= array_skip;
119+
vector += array_skip;
120+
121+
/* skip */
122+
skip %= BC_VECTOR_SIZE;
123+
if (skip > 0) {
124+
BC_VECTOR current_vector = *vector;
125+
current_vector /= BC_POW_10_LUT[skip];
126+
size_t write_size = MIN(nend - nptr + 1, BC_VECTOR_SIZE - skip);
127+
for (size_t i = 0; i < write_size; i++) {
128+
*nend-- = current_vector % BASE;
129+
current_vector /= BASE;
130+
}
131+
vector++;
132+
arr_size--;
133+
}
134+
135+
if (arr_size > 0) {
136+
bc_convert_vector_to_char(vector, nptr, nend, arr_size);
137+
}
138+
}
139+
114140
#endif

0 commit comments

Comments
 (0)