Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
9c734857
Unverified
提交
9c734857
authored
7 年前
作者:
Noel Grandin
提交者:
GitHub
7 年前
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #667 from LingMan/mathutils
Updates to MathUtils
上级
ba5fccd4
7a29d484
显示空白字符变更
内嵌
并排
正在显示
20 个修改的文件
包含
64 行增加
和
160 行删除
+64
-160
SysProperties.java
h2/src/main/org/h2/engine/SysProperties.java
+9
-2
BaseIndex.java
h2/src/main/org/h2/index/BaseIndex.java
+1
-2
MultiVersionCursor.java
h2/src/main/org/h2/index/MultiVersionCursor.java
+1
-2
ConnectionInfo.java
h2/src/main/org/h2/server/web/ConnectionInfo.java
+1
-2
ConvertTraceFile.java
h2/src/main/org/h2/tools/ConvertTraceFile.java
+2
-3
CacheLRU.java
h2/src/main/org/h2/util/CacheLRU.java
+10
-4
CacheObject.java
h2/src/main/org/h2/util/CacheObject.java
+1
-1
MathUtils.java
h2/src/main/org/h2/util/MathUtils.java
+16
-46
ValueByte.java
h2/src/main/org/h2/value/ValueByte.java
+1
-2
ValueDate.java
h2/src/main/org/h2/value/ValueDate.java
+1
-2
ValueEnum.java
h2/src/main/org/h2/value/ValueEnum.java
+1
-2
ValueEnumBase.java
h2/src/main/org/h2/value/ValueEnumBase.java
+1
-2
ValueInt.java
h2/src/main/org/h2/value/ValueInt.java
+1
-2
ValueLong.java
h2/src/main/org/h2/value/ValueLong.java
+1
-2
ValueShort.java
h2/src/main/org/h2/value/ValueShort.java
+1
-2
ValueTime.java
h2/src/main/org/h2/value/ValueTime.java
+1
-2
ValueTimestamp.java
h2/src/main/org/h2/value/ValueTimestamp.java
+2
-3
ValueTimestampTimeZone.java
h2/src/main/org/h2/value/ValueTimestampTimeZone.java
+2
-3
ValueUuid.java
h2/src/main/org/h2/value/ValueUuid.java
+1
-1
TestMathUtils.java
h2/src/test/org/h2/test/unit/TestMathUtils.java
+10
-75
没有找到文件。
h2/src/main/org/h2/engine/SysProperties.java
浏览文件 @
9c734857
...
@@ -338,8 +338,15 @@ public class SysProperties {
...
@@ -338,8 +338,15 @@ public class SysProperties {
* The maximum number of objects in the cache.
* The maximum number of objects in the cache.
* This value must be a power of 2.
* This value must be a power of 2.
*/
*/
public
static
final
int
OBJECT_CACHE_SIZE
=
public
static
final
int
OBJECT_CACHE_SIZE
;
MathUtils
.
nextPowerOf2
(
Utils
.
getProperty
(
"h2.objectCacheSize"
,
1024
));
static
{
try
{
OBJECT_CACHE_SIZE
=
MathUtils
.
nextPowerOf2
(
Utils
.
getProperty
(
"h2.objectCacheSize"
,
1024
));
}
catch
(
IllegalArgumentException
e
)
{
throw
new
IllegalStateException
(
"Invalid h2.objectCacheSize"
,
e
);
}
}
/**
/**
* System property <code>h2.oldStyleOuterJoin</code>
* System property <code>h2.oldStyleOuterJoin</code>
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/index/BaseIndex.java
浏览文件 @
9c734857
...
@@ -21,7 +21,6 @@ import org.h2.table.Column;
...
@@ -21,7 +21,6 @@ import org.h2.table.Column;
import
org.h2.table.IndexColumn
;
import
org.h2.table.IndexColumn
;
import
org.h2.table.Table
;
import
org.h2.table.Table
;
import
org.h2.table.TableFilter
;
import
org.h2.table.TableFilter
;
import
org.h2.util.MathUtils
;
import
org.h2.util.StatementBuilder
;
import
org.h2.util.StatementBuilder
;
import
org.h2.util.StringUtils
;
import
org.h2.util.StringUtils
;
import
org.h2.value.Value
;
import
org.h2.value.Value
;
...
@@ -348,7 +347,7 @@ public abstract class BaseIndex extends SchemaObjectBase implements Index {
...
@@ -348,7 +347,7 @@ public abstract class BaseIndex extends SchemaObjectBase implements Index {
if
(
isMultiVersion
)
{
if
(
isMultiVersion
)
{
int
v1
=
rowData
.
getVersion
();
int
v1
=
rowData
.
getVersion
();
int
v2
=
compare
.
getVersion
();
int
v2
=
compare
.
getVersion
();
return
MathUtils
.
compareInt
(
v2
,
v1
);
return
Integer
.
compare
(
v2
,
v1
);
}
}
return
0
;
return
0
;
}
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/index/MultiVersionCursor.java
浏览文件 @
9c734857
...
@@ -10,7 +10,6 @@ import org.h2.engine.SysProperties;
...
@@ -10,7 +10,6 @@ import org.h2.engine.SysProperties;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.result.Row
;
import
org.h2.result.Row
;
import
org.h2.result.SearchRow
;
import
org.h2.result.SearchRow
;
import
org.h2.util.MathUtils
;
/**
/**
* The cursor implementation for the multi-version index.
* The cursor implementation for the multi-version index.
...
@@ -143,7 +142,7 @@ public class MultiVersionCursor implements Cursor {
...
@@ -143,7 +142,7 @@ public class MultiVersionCursor implements Cursor {
// version would be compared as well
// version would be compared as well
long
k1
=
deltaRow
.
getKey
();
long
k1
=
deltaRow
.
getKey
();
long
k2
=
baseRow
.
getKey
();
long
k2
=
baseRow
.
getKey
();
compare
=
MathUtils
.
compareLong
(
k1
,
k2
);
compare
=
Long
.
compare
(
k1
,
k2
);
}
}
if
(
compare
==
0
)
{
if
(
compare
==
0
)
{
if
(
isDeleted
)
{
if
(
isDeleted
)
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/server/web/ConnectionInfo.java
浏览文件 @
9c734857
...
@@ -5,7 +5,6 @@
...
@@ -5,7 +5,6 @@
*/
*/
package
org
.
h2
.
server
.
web
;
package
org
.
h2
.
server
.
web
;
import
org.h2.util.MathUtils
;
import
org.h2.util.StringUtils
;
import
org.h2.util.StringUtils
;
/**
/**
...
@@ -61,7 +60,7 @@ public class ConnectionInfo implements Comparable<ConnectionInfo> {
...
@@ -61,7 +60,7 @@ public class ConnectionInfo implements Comparable<ConnectionInfo> {
@Override
@Override
public
int
compareTo
(
ConnectionInfo
o
)
{
public
int
compareTo
(
ConnectionInfo
o
)
{
return
-
MathUtils
.
compareInt
(
lastAccess
,
o
.
lastAccess
);
return
-
Integer
.
compare
(
lastAccess
,
o
.
lastAccess
);
}
}
}
}
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/tools/ConvertTraceFile.java
浏览文件 @
9c734857
...
@@ -16,7 +16,6 @@ import java.util.StringTokenizer;
...
@@ -16,7 +16,6 @@ import java.util.StringTokenizer;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.store.fs.FileUtils
;
import
org.h2.store.fs.FileUtils
;
import
org.h2.util.IOUtils
;
import
org.h2.util.IOUtils
;
import
org.h2.util.MathUtils
;
import
org.h2.util.New
;
import
org.h2.util.New
;
import
org.h2.util.StringUtils
;
import
org.h2.util.StringUtils
;
import
org.h2.util.Tool
;
import
org.h2.util.Tool
;
...
@@ -46,9 +45,9 @@ public class ConvertTraceFile extends Tool {
...
@@ -46,9 +45,9 @@ public class ConvertTraceFile extends Tool {
if
(
other
==
this
)
{
if
(
other
==
this
)
{
return
0
;
return
0
;
}
}
int
c
=
MathUtils
.
compareLong
(
other
.
time
,
time
);
int
c
=
Long
.
compare
(
other
.
time
,
time
);
if
(
c
==
0
)
{
if
(
c
==
0
)
{
c
=
MathUtils
.
compareInt
(
other
.
executeCount
,
executeCount
);
c
=
Integer
.
compare
(
other
.
executeCount
,
executeCount
);
if
(
c
==
0
)
{
if
(
c
==
0
)
{
c
=
sql
.
compareTo
(
other
.
sql
);
c
=
sql
.
compareTo
(
other
.
sql
);
}
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/util/CacheLRU.java
浏览文件 @
9c734857
...
@@ -51,11 +51,17 @@ public class CacheLRU implements Cache {
...
@@ -51,11 +51,17 @@ public class CacheLRU implements Cache {
this
.
writer
=
writer
;
this
.
writer
=
writer
;
this
.
fifo
=
fifo
;
this
.
fifo
=
fifo
;
this
.
setMaxMemory
(
maxMemoryKb
);
this
.
setMaxMemory
(
maxMemoryKb
);
long
tmpLen
=
MathUtils
.
nextPowerOf2
(
maxMemory
/
64
);
try
{
// Since setMaxMemory() ensures that maxMemory is >=0,
// we don't have to worry about an underflow.
long
tmpLen
=
maxMemory
/
64
;
if
(
tmpLen
>
Integer
.
MAX_VALUE
)
{
if
(
tmpLen
>
Integer
.
MAX_VALUE
)
{
throw
new
IllegalStateException
(
"do not support this much cache memory: "
+
maxMemoryKb
+
"kb"
);
throw
new
IllegalArgumentException
();
}
this
.
len
=
MathUtils
.
nextPowerOf2
((
int
)
tmpLen
);
}
catch
(
IllegalArgumentException
e
)
{
throw
new
IllegalStateException
(
"This much cache memory is not supported: "
+
maxMemoryKb
+
"kb"
,
e
);
}
}
this
.
len
=
(
int
)
tmpLen
;
this
.
mask
=
len
-
1
;
this
.
mask
=
len
-
1
;
clear
();
clear
();
}
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/util/CacheObject.java
浏览文件 @
9c734857
...
@@ -77,7 +77,7 @@ public abstract class CacheObject implements Comparable<CacheObject> {
...
@@ -77,7 +77,7 @@ public abstract class CacheObject implements Comparable<CacheObject> {
@Override
@Override
public
int
compareTo
(
CacheObject
other
)
{
public
int
compareTo
(
CacheObject
other
)
{
return
MathUtils
.
compareInt
(
getPos
(),
other
.
getPos
());
return
Integer
.
compare
(
getPos
(),
other
.
getPos
());
}
}
public
boolean
isStream
()
{
public
boolean
isStream
()
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/util/MathUtils.java
浏览文件 @
9c734857
...
@@ -204,7 +204,7 @@ public class MathUtils {
...
@@ -204,7 +204,7 @@ public class MathUtils {
* @param s the message to print
* @param s the message to print
* @param t the stack trace
* @param t the stack trace
*/
*/
static
void
warn
(
String
s
,
Throwable
t
)
{
private
static
void
warn
(
String
s
,
Throwable
t
)
{
// not a fatal problem, but maybe reduced security
// not a fatal problem, but maybe reduced security
System
.
out
.
println
(
"Warning: "
+
s
);
System
.
out
.
println
(
"Warning: "
+
s
);
if
(
t
!=
null
)
{
if
(
t
!=
null
)
{
...
@@ -213,33 +213,27 @@ public class MathUtils {
...
@@ -213,33 +213,27 @@ public class MathUtils {
}
}
/**
/**
* Get the value that is equal or higher than this value, and that is a
* Get the value that is equal
to
or higher than this value, and that is a
* power of two.
* power of two.
*
*
* @param x the original value
* @param x the original value
* @return the next power of two value
* @return the next power of two value
* @throws IllegalArgumentException if x < 0 or x > 0x40000000
*/
*/
public
static
int
nextPowerOf2
(
int
x
)
{
public
static
int
nextPowerOf2
(
int
x
)
throws
IllegalArgumentException
{
long
i
=
1
;
if
(
x
==
0
)
{
while
(
i
<
x
&&
i
<
(
Integer
.
MAX_VALUE
/
2
))
{
return
1
;
i
+=
i
;
}
else
if
(
x
<
0
||
x
>
0x40000000
)
{
}
throw
new
IllegalArgumentException
(
"Argument out of range"
return
(
int
)
i
;
+
" [0x0-0x40000000]. Argument was: "
+
x
);
}
}
x
--;
/**
x
|=
x
>>
1
;
* Get the value that is equal or higher than this value, and that is a
x
|=
x
>>
2
;
* power of two.
x
|=
x
>>
4
;
*
x
|=
x
>>
8
;
* @param x the original value
x
|=
x
>>
16
;
* @return the next power of two value
return
++
x
;
*/
public
static
long
nextPowerOf2
(
long
x
)
{
long
i
=
1
;
while
(
i
<
x
&&
i
<
(
Long
.
MAX_VALUE
/
2
))
{
i
+=
i
;
}
return
i
;
}
}
/**
/**
...
@@ -260,30 +254,6 @@ public class MathUtils {
...
@@ -260,30 +254,6 @@ public class MathUtils {
}
}
}
}
/**
* Compare two values. Returns -1 if the first value is smaller, 1 if
* bigger, and 0 if equal.
*
* @param a the first value
* @param b the second value
* @return the result
*/
public
static
int
compareInt
(
int
a
,
int
b
)
{
return
a
==
b
?
0
:
a
<
b
?
-
1
:
1
;
}
/**
* Compare two values. Returns -1 if the first value is smaller, 1 if
* bigger, and 0 if equal.
*
* @param a the first value
* @param b the second value
* @return the result
*/
public
static
int
compareLong
(
long
a
,
long
b
)
{
return
a
==
b
?
0
:
a
<
b
?
-
1
:
1
;
}
/**
/**
* Get a cryptographically secure pseudo random long value.
* Get a cryptographically secure pseudo random long value.
*
*
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueByte.java
浏览文件 @
9c734857
...
@@ -10,7 +10,6 @@ import java.sql.SQLException;
...
@@ -10,7 +10,6 @@ import java.sql.SQLException;
import
org.h2.api.ErrorCode
;
import
org.h2.api.ErrorCode
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.util.MathUtils
;
/**
/**
* Implementation of the BYTE data type.
* Implementation of the BYTE data type.
...
@@ -106,7 +105,7 @@ public class ValueByte extends Value {
...
@@ -106,7 +105,7 @@ public class ValueByte extends Value {
@Override
@Override
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
ValueByte
v
=
(
ValueByte
)
o
;
ValueByte
v
=
(
ValueByte
)
o
;
return
MathUtils
.
compareInt
(
value
,
v
.
value
);
return
Integer
.
compare
(
value
,
v
.
value
);
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueDate.java
浏览文件 @
9c734857
...
@@ -12,7 +12,6 @@ import java.sql.SQLException;
...
@@ -12,7 +12,6 @@ import java.sql.SQLException;
import
org.h2.api.ErrorCode
;
import
org.h2.api.ErrorCode
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.util.DateTimeUtils
;
import
org.h2.util.DateTimeUtils
;
import
org.h2.util.MathUtils
;
import
org.h2.util.StringUtils
;
import
org.h2.util.StringUtils
;
/**
/**
...
@@ -121,7 +120,7 @@ public class ValueDate extends Value {
...
@@ -121,7 +120,7 @@ public class ValueDate extends Value {
@Override
@Override
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
return
MathUtils
.
compareLong
(
dateValue
,
((
ValueDate
)
o
).
dateValue
);
return
Long
.
compare
(
dateValue
,
((
ValueDate
)
o
).
dateValue
);
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueEnum.java
浏览文件 @
9c734857
...
@@ -8,7 +8,6 @@ package org.h2.value;
...
@@ -8,7 +8,6 @@ package org.h2.value;
import
java.util.Locale
;
import
java.util.Locale
;
import
org.h2.api.ErrorCode
;
import
org.h2.api.ErrorCode
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.util.MathUtils
;
public
class
ValueEnum
extends
ValueEnumBase
{
public
class
ValueEnum
extends
ValueEnumBase
{
private
static
enum
Validation
{
private
static
enum
Validation
{
...
@@ -57,7 +56,7 @@ public class ValueEnum extends ValueEnumBase {
...
@@ -57,7 +56,7 @@ public class ValueEnum extends ValueEnumBase {
@Override
@Override
protected
int
compareSecure
(
final
Value
v
,
final
CompareMode
mode
)
{
protected
int
compareSecure
(
final
Value
v
,
final
CompareMode
mode
)
{
return
MathUtils
.
compareInt
(
getInt
(),
v
.
getInt
());
return
Integer
.
compare
(
getInt
(),
v
.
getInt
());
}
}
/**
/**
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueEnumBase.java
浏览文件 @
9c734857
...
@@ -7,7 +7,6 @@ package org.h2.value;
...
@@ -7,7 +7,6 @@ package org.h2.value;
import
java.sql.PreparedStatement
;
import
java.sql.PreparedStatement
;
import
java.sql.SQLException
;
import
java.sql.SQLException
;
import
org.h2.util.MathUtils
;
/**
/**
* Base implementation of the ENUM data type.
* Base implementation of the ENUM data type.
...
@@ -35,7 +34,7 @@ public class ValueEnumBase extends Value {
...
@@ -35,7 +34,7 @@ public class ValueEnumBase extends Value {
@Override
@Override
protected
int
compareSecure
(
final
Value
v
,
final
CompareMode
mode
)
{
protected
int
compareSecure
(
final
Value
v
,
final
CompareMode
mode
)
{
return
MathUtils
.
compareInt
(
getInt
(),
v
.
getInt
());
return
Integer
.
compare
(
getInt
(),
v
.
getInt
());
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueInt.java
浏览文件 @
9c734857
...
@@ -10,7 +10,6 @@ import java.sql.SQLException;
...
@@ -10,7 +10,6 @@ import java.sql.SQLException;
import
org.h2.api.ErrorCode
;
import
org.h2.api.ErrorCode
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.util.MathUtils
;
/**
/**
* Implementation of the INT data type.
* Implementation of the INT data type.
...
@@ -140,7 +139,7 @@ public class ValueInt extends Value {
...
@@ -140,7 +139,7 @@ public class ValueInt extends Value {
@Override
@Override
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
ValueInt
v
=
(
ValueInt
)
o
;
ValueInt
v
=
(
ValueInt
)
o
;
return
MathUtils
.
compareInt
(
value
,
v
.
value
);
return
Integer
.
compare
(
value
,
v
.
value
);
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueLong.java
浏览文件 @
9c734857
...
@@ -12,7 +12,6 @@ import java.sql.SQLException;
...
@@ -12,7 +12,6 @@ import java.sql.SQLException;
import
org.h2.api.ErrorCode
;
import
org.h2.api.ErrorCode
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.util.MathUtils
;
/**
/**
* Implementation of the BIGINT data type.
* Implementation of the BIGINT data type.
...
@@ -171,7 +170,7 @@ public class ValueLong extends Value {
...
@@ -171,7 +170,7 @@ public class ValueLong extends Value {
@Override
@Override
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
ValueLong
v
=
(
ValueLong
)
o
;
ValueLong
v
=
(
ValueLong
)
o
;
return
MathUtils
.
compareLong
(
value
,
v
.
value
);
return
Long
.
compare
(
value
,
v
.
value
);
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueShort.java
浏览文件 @
9c734857
...
@@ -10,7 +10,6 @@ import java.sql.SQLException;
...
@@ -10,7 +10,6 @@ import java.sql.SQLException;
import
org.h2.api.ErrorCode
;
import
org.h2.api.ErrorCode
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.util.MathUtils
;
/**
/**
* Implementation of the SMALLINT data type.
* Implementation of the SMALLINT data type.
...
@@ -106,7 +105,7 @@ public class ValueShort extends Value {
...
@@ -106,7 +105,7 @@ public class ValueShort extends Value {
@Override
@Override
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
ValueShort
v
=
(
ValueShort
)
o
;
ValueShort
v
=
(
ValueShort
)
o
;
return
MathUtils
.
compareInt
(
value
,
v
.
value
);
return
Integer
.
compare
(
value
,
v
.
value
);
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueTime.java
浏览文件 @
9c734857
...
@@ -11,7 +11,6 @@ import java.sql.Time;
...
@@ -11,7 +11,6 @@ import java.sql.Time;
import
org.h2.api.ErrorCode
;
import
org.h2.api.ErrorCode
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.util.DateTimeUtils
;
import
org.h2.util.DateTimeUtils
;
import
org.h2.util.MathUtils
;
import
org.h2.util.StringUtils
;
import
org.h2.util.StringUtils
;
/**
/**
...
@@ -129,7 +128,7 @@ public class ValueTime extends Value {
...
@@ -129,7 +128,7 @@ public class ValueTime extends Value {
@Override
@Override
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
return
MathUtils
.
compareLong
(
nanos
,
((
ValueTime
)
o
).
nanos
);
return
Long
.
compare
(
nanos
,
((
ValueTime
)
o
).
nanos
);
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueTimestamp.java
浏览文件 @
9c734857
...
@@ -16,7 +16,6 @@ import org.h2.api.ErrorCode;
...
@@ -16,7 +16,6 @@ import org.h2.api.ErrorCode;
import
org.h2.engine.Mode
;
import
org.h2.engine.Mode
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.util.DateTimeUtils
;
import
org.h2.util.DateTimeUtils
;
import
org.h2.util.MathUtils
;
/**
/**
* Implementation of the TIMESTAMP data type.
* Implementation of the TIMESTAMP data type.
...
@@ -310,11 +309,11 @@ public class ValueTimestamp extends Value {
...
@@ -310,11 +309,11 @@ public class ValueTimestamp extends Value {
@Override
@Override
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
protected
int
compareSecure
(
Value
o
,
CompareMode
mode
)
{
ValueTimestamp
t
=
(
ValueTimestamp
)
o
;
ValueTimestamp
t
=
(
ValueTimestamp
)
o
;
int
c
=
MathUtils
.
compareLong
(
dateValue
,
t
.
dateValue
);
int
c
=
Long
.
compare
(
dateValue
,
t
.
dateValue
);
if
(
c
!=
0
)
{
if
(
c
!=
0
)
{
return
c
;
return
c
;
}
}
return
MathUtils
.
compareLong
(
timeNanos
,
t
.
timeNanos
);
return
Long
.
compare
(
timeNanos
,
t
.
timeNanos
);
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueTimestampTimeZone.java
浏览文件 @
9c734857
...
@@ -14,7 +14,6 @@ import org.h2.api.ErrorCode;
...
@@ -14,7 +14,6 @@ import org.h2.api.ErrorCode;
import
org.h2.api.TimestampWithTimeZone
;
import
org.h2.api.TimestampWithTimeZone
;
import
org.h2.message.DbException
;
import
org.h2.message.DbException
;
import
org.h2.util.DateTimeUtils
;
import
org.h2.util.DateTimeUtils
;
import
org.h2.util.MathUtils
;
import
org.h2.util.StringUtils
;
import
org.h2.util.StringUtils
;
/**
/**
...
@@ -310,14 +309,14 @@ public class ValueTimestampTimeZone extends Value {
...
@@ -310,14 +309,14 @@ public class ValueTimestampTimeZone extends Value {
b
-=
t
.
timeZoneOffsetMins
;
b
-=
t
.
timeZoneOffsetMins
;
// compare date
// compare date
int
c
=
MathUtils
.
compareLong
(
a
,
b
);
int
c
=
Long
.
compare
(
a
,
b
);
if
(
c
!=
0
)
{
if
(
c
!=
0
)
{
return
c
;
return
c
;
}
}
// compare time
// compare time
long
na
=
timeNanos
-
(
ma
*
1000L
*
1000L
*
1000L
*
60L
);
long
na
=
timeNanos
-
(
ma
*
1000L
*
1000L
*
1000L
*
60L
);
long
nb
=
t
.
timeNanos
-
(
mb
*
1000L
*
1000L
*
1000L
*
60L
);
long
nb
=
t
.
timeNanos
-
(
mb
*
1000L
*
1000L
*
1000L
*
60L
);
return
MathUtils
.
compareLong
(
na
,
nb
);
return
Long
.
compare
(
na
,
nb
);
}
}
@Override
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueUuid.java
浏览文件 @
9c734857
...
@@ -159,7 +159,7 @@ public class ValueUuid extends Value {
...
@@ -159,7 +159,7 @@ public class ValueUuid extends Value {
}
}
ValueUuid
v
=
(
ValueUuid
)
o
;
ValueUuid
v
=
(
ValueUuid
)
o
;
if
(
high
==
v
.
high
)
{
if
(
high
==
v
.
high
)
{
return
MathUtils
.
compareLong
(
low
,
v
.
low
);
return
Long
.
compare
(
low
,
v
.
low
);
}
}
return
high
>
v
.
high
?
1
:
-
1
;
return
high
>
v
.
high
?
1
:
-
1
;
}
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/unit/TestMathUtils.java
浏览文件 @
9c734857
...
@@ -5,10 +5,7 @@
...
@@ -5,10 +5,7 @@
*/
*/
package
org
.
h2
.
test
.
unit
;
package
org
.
h2
.
test
.
unit
;
import
java.math.BigInteger
;
import
java.util.Random
;
import
org.h2.test.TestBase
;
import
org.h2.test.TestBase
;
import
org.h2.test.utils.AssertThrows
;
import
org.h2.util.MathUtils
;
import
org.h2.util.MathUtils
;
/**
/**
...
@@ -28,8 +25,7 @@ public class TestMathUtils extends TestBase {
...
@@ -28,8 +25,7 @@ public class TestMathUtils extends TestBase {
@Override
@Override
public
void
test
()
{
public
void
test
()
{
testRandom
();
testRandom
();
testReverse
();
testNextPowerOf2Int
();
testFactorial
();
}
}
private
void
testRandom
()
{
private
void
testRandom
()
{
...
@@ -53,78 +49,17 @@ public class TestMathUtils extends TestBase {
...
@@ -53,78 +49,17 @@ public class TestMathUtils extends TestBase {
assertTrue
(
data
.
length
>
10
);
assertTrue
(
data
.
length
>
10
);
}
}
private
void
testReverse
()
{
private
void
testNextPowerOf2Int
()
{
assertEquals
(
Integer
.
reverse
(
0
),
Integer
.
reverse
(
0
));
// the largest power of two that fits into an integer
assertEquals
(
Integer
.
reverse
(
Integer
.
MAX_VALUE
),
final
int
LARGEST_POW2
=
0x40000000
;
Integer
.
reverse
(
Integer
.
MAX_VALUE
));
int
[]
testValues
=
{
0
,
1
,
2
,
3
,
4
,
12
,
17
,
500
,
1023
,
assertEquals
(
Integer
.
reverse
(
Integer
.
MIN_VALUE
),
LARGEST_POW2
-
500
,
LARGEST_POW2
};
Integer
.
reverse
(
Integer
.
MIN_VALUE
));
int
[]
resultValues
=
{
1
,
1
,
2
,
4
,
4
,
16
,
32
,
512
,
1024
,
assertEquals
(
Long
.
reverse
(
0
),
Long
.
reverse
(
0L
));
LARGEST_POW2
,
LARGEST_POW2
};
assertEquals
(
Long
.
reverse
(
Long
.
MAX_VALUE
),
Long
.
reverse
(
Long
.
MAX_VALUE
));
assertEquals
(
Long
.
reverse
(
Long
.
MIN_VALUE
),
Long
.
reverse
(
Long
.
MIN_VALUE
));
for
(
int
i
=
Integer
.
MIN_VALUE
;
i
<
0
;
i
+=
1019
)
{
int
x
=
Integer
.
reverse
(
i
);
assertEquals
(
Integer
.
reverse
(
i
),
x
);
}
for
(
int
i
=
0
;
i
>
0
;
i
+=
1019
)
{
int
x
=
Integer
.
reverse
(
i
);
assertEquals
(
Integer
.
reverse
(
i
),
x
);
}
for
(
long
i
=
Long
.
MIN_VALUE
;
i
<
0
;
i
+=
1018764321251L
)
{
long
x
=
Long
.
reverse
(
i
);
assertEquals
(
Long
.
reverse
(
i
),
x
);
}
for
(
long
i
=
0
;
i
>
0
;
i
+=
1018764321251L
)
{
long
x
=
Long
.
reverse
(
i
);
assertEquals
(
Long
.
reverse
(
i
),
x
);
}
Random
random
=
new
Random
(
10
);
for
(
int
i
=
0
;
i
<
1000000
;
i
++)
{
long
x
=
random
.
nextLong
();
long
r
=
Long
.
reverse
(
x
);
assertEquals
(
Long
.
reverse
(
x
),
r
);
int
y
=
random
.
nextInt
();
int
s
=
Integer
.
reverse
(
y
);
assertEquals
(
Integer
.
reverse
(
y
),
s
);
}
}
private
void
testFactorial
()
{
for
(
int
i
=
0
;
i
<
testValues
.
length
;
i
++)
{
new
AssertThrows
(
IllegalArgumentException
.
class
)
{
@Override
assertEquals
(
resultValues
[
i
],
MathUtils
.
nextPowerOf2
(
testValues
[
i
]));
public
void
test
()
{
factorial
(-
1
);
}};
assertEquals
(
"1"
,
factorial
(
0
).
toString
());
assertEquals
(
"1"
,
factorial
(
1
).
toString
());
assertEquals
(
"2"
,
factorial
(
2
).
toString
());
assertEquals
(
"6"
,
factorial
(
3
).
toString
());
assertEquals
(
"3628800"
,
factorial
(
10
).
toString
());
assertEquals
(
"2432902008176640000"
,
factorial
(
20
).
toString
());
}
/**
* Calculate the factorial (n!) of a number.
* This implementation uses a naive multiplication loop, and
* is very slow for large n.
* For n = 1000, it takes about 10 ms.
* For n = 8000, it takes about 800 ms.
*
* @param n the number
* @return the factorial of n
*/
public
static
BigInteger
factorial
(
int
n
)
{
if
(
n
<
0
)
{
throw
new
IllegalArgumentException
(
n
+
"<0"
);
}
else
if
(
n
<
2
)
{
return
BigInteger
.
ONE
;
}
BigInteger
x
=
new
BigInteger
(
""
+
n
);
BigInteger
result
=
x
;
for
(
int
i
=
n
-
1
;
i
>=
2
;
i
--)
{
x
=
x
.
subtract
(
BigInteger
.
ONE
);
result
=
result
.
multiply
(
x
);
}
}
return
result
;
}
}
}
}
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论