forked from mcneel/opennurbs
-
Notifications
You must be signed in to change notification settings - Fork 3
/
opennurbs_base32.h
126 lines (112 loc) · 4.33 KB
/
opennurbs_base32.h
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/* $NoKeywords: $ */
/*
//
// Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
// McNeel & Associates.
//
// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
// MERCHANTABILITY ARE HEREBY DISCLAIMED.
//
// For complete openNURBS copyright information see <http://www.opennurbs.org>.
//
////////////////////////////////////////////////////////////////
*/
#if !defined(ON_BASE32_INC_)
#define ON_BASE32_INC_
/*
Description:
Convert a number into base32 digits.
Parameters:
x - [in]
x_count - [in]
x[] is an array of length x_count and represents the value
x[0]*2^(8*(x_count-1)) + ... + x[x_count-2]*256 + x[x_count-1].
base32_digits - [out]
When base32_digits is not a dynamic array, base32_digits[]
must a be an array of length at least
((8*x_count)/5) + (((8*x_count)%5)?1:0) or 1,
whichever is greater.
The base32_digits[] array will be filled in with base32 digit
values (0 to 31) so that the value
b[0]*32^(b_count-1) + ... + b[b_count-2]*32 + b[b_count-1]
is the same as that defined by the x[] array.
Returns
The number of base 32 digits in the base32_digits[] array.
If 0 is returned, the input is not valid.
*/
ON_DECL
int ON_GetBase32Digits( const ON_SimpleArray<unsigned char>& x, ON_SimpleArray<unsigned char>& base32_digits );
ON_DECL
int ON_GetBase32Digits( const unsigned char* x, int x_count, unsigned char* base32_digits );
/*
Description:
Convert a list of base32 digits into a string form.
Parameters:
base32_digits - [in]
base32_digit_count - [in]
base32_digits[] is an array of length base32_digit_count.
Each element is in the range 0 to 31.
sBase32 - [out]
sBase32[] must be an array of length base32_digit_count+1 or 2,
whichever is greater. The string representation of the base 32
number will be put in this string. A hash mark symbol (#) is
used to indicate an error in the input value. The returned
string is null terminated.
Returns
True if the input is valid. False if the input is not valid,
in which case hash marks indicate the invalid entries.
*/
ON_DECL
bool ON_Base32ToString( const ON_SimpleArray<unsigned char>& base32_digits, ON_String& sBase32 );
ON_DECL
bool ON_Base32ToString( const ON_SimpleArray<unsigned char>& base32_digits, ON_wString& sBase32 );
ON_DECL
bool ON_Base32ToString( const unsigned char* base32_digits, int base32_digit_count, char* sBase32 );
/*
Description:
Fixt a common typos in sBase32 string. Lower case letters are
converted to upper case. The letters 'I', 'L', 'O' and 'S' are
converted to '1' (one), '1' (one) '0' zero and '5' (five).
Parameters:
sBase32 - [in]
sBase32clean - [out]
(can be the same string as sBase32)
Returns:
If the input is valid, the length of the converted string is returned.
If the input is not valid, 0 is returned.
*/
ON_DECL
int ON_CorrectBase32StringTypos( const wchar_t* sBase32, ON_wString& sBase32clean );
ON_DECL
int ON_CorrectBase32StringTypos( const char* sBase32, ON_String& sBase32clean );
ON_DECL
int ON_CorrectBase32StringTypos( const char* sBase32, char* sBase32clean );
/*
Description:
Convert a null terminate string containing the 32 symbols
0 1 2 3 4 5 6 7 8 9 A B C D E F G H J K M N P Q R T U V W X Y Z
(I,L,O and S are missing) into a list of base 32 digits.
Parameters:
sBase32 - [in]
String with base 32 digits
base32_digits - [out]
base32_digits[] is an array of length strlen(sBase32).
The returned array, element will be in the range 0 to 31.
sBase32[] must be an array of length base32_digit_count+1 or 2,
whichever is greater. The string representation of the base 32
number will be put in this string. A hash mark symbol (#) is
used to indicate an error in the input value. The returned
string is null terminated.
Returns
True if the input is valid. False if the input is not valid,
in which case hash marks indicate the invalid entries.
*/
ON_DECL
int ON_StringToBase32(const ON_wString& sBase32, ON_SimpleArray<unsigned char>& base32_digits );
ON_DECL
int ON_StringToBase32(const ON_String& sBase32, ON_SimpleArray<unsigned char>& base32_digits );
ON_DECL
int ON_StringToBase32(const char* sBase32, unsigned char* base32_digits );
#endif