Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
3ddea6b2
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3ddea6b2
编写于
6月 13, 2017
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Removed useless code [#CLICKHOUSE-31].
上级
1c219c5a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
15 addition
and
36 deletion
+15
-36
dbms/src/Functions/FunctionsArray.cpp
dbms/src/Functions/FunctionsArray.cpp
+3
-2
libs/libcommon/include/ext/make_array_n.h
libs/libcommon/include/ext/make_array_n.h
+0
-1
libs/libcommon/include/ext/range.h
libs/libcommon/include/ext/range.h
+12
-33
未找到文件。
dbms/src/Functions/FunctionsArray.cpp
浏览文件 @
3ddea6b2
...
...
@@ -15,6 +15,7 @@
#include <Interpreters/AggregationCommon.h>
#include <Columns/ColumnTuple.h>
#include <Columns/ColumnAggregateFunction.h>
#include <boost/iterator/counting_iterator.hpp>
#include <tuple>
#include <array>
...
...
@@ -2356,7 +2357,7 @@ bool FunctionRange::executeInternal(Block & block, const IColumn * const arg, co
IColumn
::
Offset_t
offset
{};
for
(
const
auto
i
:
ext
::
range
(
0
,
in
->
size
()))
{
std
::
copy
(
ext
::
make_range_iterator
(
T
{}),
ext
::
make_range
_iterator
(
in_data
[
i
]),
&
out_data
[
offset
]);
std
::
copy
(
boost
::
counting_iterator
(
T
{}),
boost
::
counting
_iterator
(
in_data
[
i
]),
&
out_data
[
offset
]);
offset
+=
in_data
[
i
];
out_offsets
[
i
]
=
offset
;
}
...
...
@@ -2392,7 +2393,7 @@ bool FunctionRange::executeInternal(Block & block, const IColumn * const arg, co
IColumn
::
Offset_t
offset
{};
for
(
const
auto
i
:
ext
::
range
(
0
,
in
->
size
()))
{
std
::
copy
(
ext
::
make_range_iterator
(
T
{}),
ext
::
make_range
_iterator
(
in_data
),
&
out_data
[
offset
]);
std
::
copy
(
boost
::
counting_iterator
(
T
{}),
boost
::
counting
_iterator
(
in_data
),
&
out_data
[
offset
]);
offset
+=
in_data
;
out_offsets
[
i
]
=
offset
;
}
...
...
libs/libcommon/include/ext/make_array_n.h
浏览文件 @
3ddea6b2
...
...
@@ -11,7 +11,6 @@
*/
namespace
ext
{
namespace
detail
{
...
...
libs/libcommon/include/ext/range.h
浏览文件 @
3ddea6b2
...
...
@@ -14,53 +14,32 @@ namespace ext
template
<
typename
T
>
using
range_iterator
=
boost
::
counting_iterator
<
T
>
;
template
<
typename
T
>
using
reverse_range_iterator
=
std
::
reverse_iterator
<
range_iterator
<
T
>>
;
/** \brief Range-based for loop adapter for (reverse_)range_iterator.
* By and large should be in conjunction with ext::range and ext::reverse_range. */
template
<
typename
T
,
bool
forward
>
* By and large should be in conjunction with ext::range and ext::reverse_range.
*/
template
<
typename
T
>
struct
range_wrapper
{
using
value_type
=
typename
std
::
remove_reference
<
T
>::
type
;
using
range_iterator_t
=
ext
::
range_iterator
<
value_type
>
;
using
iterator
=
typename
std
::
conditional
<
forward
,
range_iterator_t
,
ext
::
reverse_range_iterator
<
value_type
>>::
type
;
using
iterator
=
range_iterator
<
value_type
>
;
value_type
begin_
,
end_
;
value_type
begin_
;
value_type
end_
;
iterator
begin
()
const
{
return
iterator
(
range_iterator_t
{
begin_
}
);
}
iterator
end
()
const
{
return
iterator
(
range_iterator_t
{
end_
}
);
}
iterator
begin
()
const
{
return
iterator
(
begin_
);
}
iterator
end
()
const
{
return
iterator
(
end_
);
}
};
/** \brief Constructs range_wrapper for forward-iteration over [begin, end) in range-based for loop.
* Usage example:
* for (const auto i : ext::range(0, 4)) print(i);
* Output:
* 0 1 2 3 */
template
<
typename
T1
,
typename
T2
>
inline
ext
::
range_wrapper
<
typename
std
::
common_type
<
T1
,
T2
>::
type
,
true
>
range
(
T1
begin
,
T2
end
)
* 0 1 2 3
*/
template
<
typename
T1
,
typename
T2
>
inline
range_wrapper
<
typename
std
::
common_type
<
T1
,
T2
>::
type
>
range
(
T1
begin
,
T2
end
)
{
using
common_type
=
typename
std
::
common_type
<
T1
,
T2
>::
type
;
return
{
static_cast
<
common_type
>
(
begin
),
static_cast
<
common_type
>
(
end
)
};
}
/** \brief Constructs range_wrapper for backward-iteration over [begin, end) in range-based for loop.
* Usage example:
* for (const auto i : ext::reverse_range(0, 4)) print(i);
* Output:
* 3 2 1 0 */
template
<
typename
T1
,
typename
T2
>
inline
ext
::
range_wrapper
<
typename
std
::
common_type
<
T1
,
T2
>::
type
,
false
>
reverse_range
(
T1
begin
,
T2
end
)
{
using
common_type
=
typename
std
::
common_type
<
T1
,
T2
>::
type
;
return
{
static_cast
<
common_type
>
(
end
),
static_cast
<
common_type
>
(
begin
)
};
}
template
<
typename
T
>
inline
ext
::
range_iterator
<
T
>
make_range_iterator
(
const
T
value
)
{
return
{
value
};
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录