summaryrefslogtreecommitdiffstats
path: root/3rdparty/clucene/src/CLucene/config/repl_lltot.cpp
blob: 05a63b887267f0ae08d2a057fcb043f9abef1bbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*------------------------------------------------------------------------------
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
* 
* Distributable under the terms of either the Apache License (Version 2.0) or 
* the GNU Lesser General Public License, as specified in the COPYING file.
------------------------------------------------------------------------------*/
#include "CLucene/StdHeader.h"

TCHAR* lucene_i64tot(
    int64_t value, /* [I] Value to be converted */
    TCHAR* str,      /* [O] Destination for the converted value */
    int radix)      /* [I] Number base for conversion */
{
    uint64_t val;
    int negative;
    TCHAR buffer[65];
    TCHAR* pos;
    int digit;

	if (value < 0 && radix == 10) {
		negative = 1;
		val = -value;
	} else {
		negative = 0;
		val = value;
	} /* if */

	pos = &buffer[64];
	*pos = '\0';

	do {
		digit = val % radix;
		val = val / radix;
		if (digit < 10) {
			*--pos = '0' + digit;
		} else {
			*--pos = 'a' + digit - 10;
		} /* if */
	} while (val != 0L);

	if (negative) {
		*--pos = '-';
	} /* if */

    _tcsncpy(str,pos,&buffer[64] - pos + 1); //needed for unicode to work
    return str;
}