-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathUtility.java
More file actions
145 lines (125 loc) · 4.42 KB
/
Utility.java
File metadata and controls
145 lines (125 loc) · 4.42 KB
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*************************************************************************************************
* Utility interface
*
* Copyright 2020 Google LLC
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License at
* https://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*************************************************************************************************/
package tkrzw;
import java.util.HashMap;
import java.util.Map;
/**
* Library utilities.
*/
public class Utility {
static {
loadLibrary();
}
/** The package version numbers. */
static final String VERSION = getVersion();
/** The recognized OS name. */
static final String OS_NAME = getOSName();
/** The size of a memory page on the OS. */
static final int PAGE_SIZE = getPageSize();
/**
* Load the native library.
*/
static synchronized void loadLibrary() {
if(loaded) return;
System.loadLibrary("jtkrzw");
loaded = true;
}
/**
* Gets the package version numbers.
*/
private static native String getVersion();
/**
* Gets the recognized OS name.
*/
private static native String getOSName();
/**
* Gets the size of a memory page on the OS.
*/
private static native int getPageSize();
/**
* Parses a string of parameters in "key=value,key=value" format.
* @param str The string of parameters.
* @return A map of key-value records.
*/
public static HashMap<String, String> parseParams(String str) {
HashMap<String, String> params = new HashMap<String, String>();
String[] fields = str.split(",");
for (String field : fields) {
String[] columns = field.split("=", 2);
if (columns.length == 2) {
params.put(columns[0], columns[1]);
}
}
return params;
}
/**
* Gets the memory capacity of the platform.
* @return The memory capacity of the platform in bytes, or -1 on failure.
*/
public static native long getMemoryCapacity();
/**
* Gets the current memory usage of the process.
* @return The current memory usage of the process in bytes, or -1 on failure.
*/
public static native long getMemoryUsage();
/**
* Primary hash function for the hash database.
* @param data The data to calculate the hash value for.
* @param num_buckets The number of buckets of the hash table. If it is 0 or less, the range
* of the hash value is from Long.MIN_VALUE to Long.MAX_VALUE.
* @return The hash value.
*/
public static native long primaryHash(byte[] data, long num_buckets);
/**
* Secondaryy hash function for sharding.
* @param data The data to calculate the hash value for.
* @param num_shards The number of shards. If it is 0 or less, the range of the hash value is
* from Long.MIN_VALUE to Long.MAX_VALUE.
* @return The hash value.
*/
public static native long secondaryHash(byte[] data, long num_shards);
/**
* Gets the Levenshtein edit distance of two strings.
* @param a A string.
* @param b The other string.
* @return The Levenshtein edit distance of the two strings.
*/
public static native int editDistanceLev(String a, String b);
/**
* Serializes an integer into a big-endian binary sequence.
* @param num an integer.
* @return The result binary sequence.
*/
public static native byte[] serializeInt(long num);
/**
* Deserializes a big-endian binary sequence into an integer.
* @param data a binary sequence.
* @return The result integer.
*/
public static native long deserializeInt(byte[] data);
/**
* Serializes a floating-point number into a big-endian binary sequence.
* @param num a floating-point number.
* @return The result binary sequence.
*/
public static native byte[] serializeFloat(double num);
/**
* Deserializes a big-endian binary sequence into a floating-point number.
* @param data a binary sequence.
* @return The result floating-point number.
*/
public static native double deserializeFloat(byte[] data);
/** The flag whether loaded. */
static private boolean loaded = false;
}
// END OF FILE