Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
098ea6fc
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
098ea6fc
编写于
1月 31, 2013
作者:
I
Ilya Lysenkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Checked key_size in LSH table for validness (#2677)
上级
1becbd9f
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
14 addition
and
4 deletion
+14
-4
modules/flann/include/opencv2/flann/lsh_table.h
modules/flann/include/opencv2/flann/lsh_table.h
+14
-4
未找到文件。
modules/flann/include/opencv2/flann/lsh_table.h
浏览文件 @
098ea6fc
...
...
@@ -261,6 +261,16 @@ private:
*/
void
initialize
(
size_t
key_size
)
{
const
size_t
key_size_lower_bound
=
1
;
//a value (size_t(1) << key_size) must fit the size_t type so key_size has to be strictly less than size of size_t
const
size_t
key_size_upper_bound
=
std
::
min
(
sizeof
(
BucketKey
)
*
CHAR_BIT
+
1
,
sizeof
(
size_t
)
*
CHAR_BIT
);
if
(
key_size
<
key_size_lower_bound
||
key_size
>=
key_size_upper_bound
)
{
std
::
stringstream
errorMessage
;
errorMessage
<<
"Invalid key_size (="
<<
key_size
<<
"). Valid values for your system are "
<<
key_size_lower_bound
<<
" <= key_size < "
<<
key_size_upper_bound
<<
"."
;
CV_Error
(
CV_StsBadArg
,
errorMessage
.
str
());
}
speed_level_
=
kHash
;
key_size_
=
(
unsigned
)
key_size
;
}
...
...
@@ -273,10 +283,10 @@ private:
if
(
speed_level_
==
kArray
)
return
;
// Use an array if it will be more than half full
if
(
buckets_space_
.
size
()
>
(
unsigned
int
)((
1
<<
key_size_
)
/
2
))
{
if
(
buckets_space_
.
size
()
>
(
(
size_t
(
1
)
<<
key_size_
)
/
2
))
{
speed_level_
=
kArray
;
// Fill the array version of it
buckets_speed_
.
resize
(
1
<<
key_size_
);
buckets_speed_
.
resize
(
size_t
(
1
)
<<
key_size_
);
for
(
BucketsSpace
::
const_iterator
key_bucket
=
buckets_space_
.
begin
();
key_bucket
!=
buckets_space_
.
end
();
++
key_bucket
)
buckets_speed_
[
key_bucket
->
first
]
=
key_bucket
->
second
;
// Empty the hash table
...
...
@@ -287,9 +297,9 @@ private:
// If the bitset is going to use less than 10% of the RAM of the hash map (at least 1 size_t for the key and two
// for the vector) or less than 512MB (key_size_ <= 30)
if
(((
std
::
max
(
buckets_space_
.
size
(),
buckets_speed_
.
size
())
*
CHAR_BIT
*
3
*
sizeof
(
BucketKey
))
/
10
>=
size_t
(
1
<<
key_size_
))
||
(
key_size_
<=
32
))
{
>=
(
size_t
(
1
)
<<
key_size_
))
||
(
key_size_
<=
32
))
{
speed_level_
=
kBitsetHash
;
key_bitset_
.
resize
(
1
<<
key_size_
);
key_bitset_
.
resize
(
size_t
(
1
)
<<
key_size_
);
key_bitset_
.
reset
();
// Try with the BucketsSpace
for
(
BucketsSpace
::
const_iterator
key_bucket
=
buckets_space_
.
begin
();
key_bucket
!=
buckets_space_
.
end
();
++
key_bucket
)
key_bitset_
.
set
(
key_bucket
->
first
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录