You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Ferenc Gerlits (Jira)" <ji...@apache.org> on 2020/09/03 11:40:00 UTC
[jira] [Comment Edited] (MINIFICPP-1289) Add range-v3
[ https://issues.apache.org/jira/browse/MINIFICPP-1289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17190064#comment-17190064 ]
Ferenc Gerlits edited comment on MINIFICPP-1289 at 9/3/20, 11:39 AM:
---------------------------------------------------------------------
I tried 0.5.0, and it mostly works, except in gcc 4.8, which is not fully C++11-compliant. Some of the problems:
* range-v3 0.5.0 uses {{std::max_align_t}}, which gcc 4.8 does not define (this could be patched)
* there was some template deduction error that I don't even understand (full error message below).
{noformat}
In file included from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_traits.hpp:24:0,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/distance.hpp:22,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:18,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
from /home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp: In instantiation of ‘struct ranges::v3::concepts::m
odels<ranges::v3::concepts::Range, org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::proces
sors::TailState&) const::__lambda23>’:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/adjacent_remove_if.hpp:37:64: required by substitution of ‘tem
plate<class ... Ts, class A> static decltype (A:: bind(*static_cast<Ts&>(ranges::v3::action::action_access::impl::bind::ts) ...)) ranges::v3
::action::action_access::impl<Action>::bind(Ts&& ...) [with Ts = {Ts ...}; A = A; Action = ranges::v3::action::sort_fn] [with Ts = {const ra
nges::v3::action::sort_fn&, const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::process
ors::TailState&) const::__lambda23&}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/action.hpp:124:17: required by substitution of ‘template<class
T, class ... Rest, class A> decltype (ranges::v3::action::{anonymous}::make_action(ranges::v3::action::action_access::impl<A>::bind(((const
ranges::v3::action::action<Action>*)this)->ranges::v3::action::action<Action>::action_, static_cast<T&&>(t), *static_cast<Rest&>(ranges::v3
::action::action::operator()::rest) ...))) ranges::v3::action::action<Action>::operator()(T&&, Rest&& ...) const [with T = T; Rest = {Rest .
..}; A = A; Action = ranges::v3::action::sort_fn] [with T = const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const or
g::apache::nifi::minifi::processors::TailState&) const::__lambda23&; Rest = {}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:614:79: required from here
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:89:59: error: no match for call to ‘(const ranges::v
3::_end_::fn) (org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) co
nst::__lambda23&)’
concepts::model_of<Sentinel>(end(t), begin(t))
^
In file included from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:17:0,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
from /home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:151:20: note: candidates are:
struct fn
^
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:184:32: note: template<class R> constexpr decltype (range
s::v3::_end_::fn::impl_(r, 42)) ranges::v3::_end_::fn::operator()(R&) const
constexpr auto operator()(R &r) const
^
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:184:32: note: template argument deduction/substitution
failed:
In file included from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_fwd.hpp:21:0,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:23,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:17,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
from /home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp: In substitution of ‘template<class R> constexpr decltype (ranges::v3::_end_::fn::impl_(r, 42)) ranges::v3::_end_::fn::operator()(R&) const [with R = org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) const::__lambda23]’:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:89:59: required from ‘struct ranges::v3::concepts::models<ranges::v3::concepts::Range, org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) const::__lambda23>’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/adjacent_remove_if.hpp:37:64: required by substitution of ‘template<class ... Ts, class A> static decltype (A:: bind(*static_cast<Ts&>(ranges::v3::action::action_access::impl::bind::ts) ...)) ranges::v3::action::action_access::impl<Action>::bind(Ts&& ...) [with Ts = {Ts ...}; A = A; Action = ranges::v3::action::sort_fn] [with Ts = {const ranges::v3::action::sort_fn&, const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) const::__lambda23&}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/action.hpp:124:17: required by substitution of ‘template<class T, class ... Rest, class A> decltype (ranges::v3::action::{anonymous}::make_action(ranges::v3::action::action_access::impl<A>::bind(((const ranges::v3::action::action<Action>*)this)->ranges::v3::action::action<Action>::action_, static_cast<T&&>(t), *static_cast<Rest&>(ranges::v3::action::action::operator()::rest) ...))) ranges::v3::action::action<Action>::operator()(T&&, Rest&& ...) const [with T = T; Rest = {Rest ...}; A = A; Action = ranges::v3::action::sort_fn] [with T = const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) const::__lambda23&; Rest = {}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:614:79: required from here
{noformat}
caused by the code change
{noformat}
+#include "range/v3/all.hpp"
@@ -605,10 +607,11 @@ std::vector<TailState> TailFile::findRotatedFiles(const TailState &state) const
utils::file::FileUtils::list_dir(state.path_, collect_matching_files, logger_, false);
- std::sort(matched_files_with_mtime.begin(), matched_files_with_mtime.end(), [](const TailStateWithMtime &left, const TailStateWithMtime &right) {
+ const auto first_by_mtime_then_by_name = [](const TailStateWithMtime &left, const TailStateWithMtime &right) {
return std::tie(left.mtime_, left.tail_state_.file_name_) <
std::tie(right.mtime_, right.tail_state_.file_name_);
- });
+ };
+ matched_files_with_mtime |= ranges::action::sort(first_by_mtime_then_by_name); {noformat}
in extensions/standard-processors/processors/TailFile.cpp.
was (Author: fgerlits):
I tried 0.5.0, and it mostly works, except in gcc 4.8, which is not fully C++11-compliant. Some of the problems:
* range-v3 0.5.0 uses {{std::max_align_t}}, which gcc 4.8 does not define (this could be patched)
* there was some template deduction error that I don't even understand (full error message below).
{noformat}
In file included from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_traits.hpp:24:0,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/distance.hpp:22,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:18,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
from /home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp: In instantiation of ‘struct ranges::v3::concepts::m
odels<ranges::v3::concepts::Range, org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::proces
sors::TailState&) const::__lambda23>’:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/adjacent_remove_if.hpp:37:64: required by substitution of ‘tem
plate<class ... Ts, class A> static decltype (A:: bind(*static_cast<Ts&>(ranges::v3::action::action_access::impl::bind::ts) ...)) ranges::v3
::action::action_access::impl<Action>::bind(Ts&& ...) [with Ts = {Ts ...}; A = A; Action = ranges::v3::action::sort_fn] [with Ts = {const ra
nges::v3::action::sort_fn&, const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::process
ors::TailState&) const::__lambda23&}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/action.hpp:124:17: required by substitution of ‘template<class
T, class ... Rest, class A> decltype (ranges::v3::action::{anonymous}::make_action(ranges::v3::action::action_access::impl<A>::bind(((const
ranges::v3::action::action<Action>*)this)->ranges::v3::action::action<Action>::action_, static_cast<T&&>(t), *static_cast<Rest&>(ranges::v3
::action::action::operator()::rest) ...))) ranges::v3::action::action<Action>::operator()(T&&, Rest&& ...) const [with T = T; Rest = {Rest .
..}; A = A; Action = ranges::v3::action::sort_fn] [with T = const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const or
g::apache::nifi::minifi::processors::TailState&) const::__lambda23&; Rest = {}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:614:79: required from here
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:89:59: error: no match for call to ‘(const ranges::v
3::_end_::fn) (org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) co
nst::__lambda23&)’
concepts::model_of<Sentinel>(end(t), begin(t))
^
In file included from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:17:0,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
from /home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:151:20: note: candidates are:
struct fn
^
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:184:32: note: template<class R> constexpr decltype (range
s::v3::_end_::fn::impl_(r, 42)) ranges::v3::_end_::fn::operator()(R&) const
constexpr auto operator()(R &r) const
^
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:184:32: note: template argument deduction/substitution
failed:
In file included from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_fwd.hpp:21:0,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp:23,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/core.hpp:17,
from /home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/all.hpp:17,
from /home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:39:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/begin_end.hpp: In substitution of ‘template<class R> constexpr decltype (ranges::v3::_end_::fn::impl_(r, 42)) ranges::v3::_end_::fn::operator()(R&) const [with R = org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) const::__lambda23]’:
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/range_concepts.hpp:89:59: required from ‘struct ranges::v3::concepts::models<ranges::v3::concepts::Range, org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) const::__lambda23>’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/adjacent_remove_if.hpp:37:64: required by substitution of ‘template<class ... Ts, class A> static decltype (A:: bind(*static_cast<Ts&>(ranges::v3::action::action_access::impl::bind::ts) ...)) ranges::v3::action::action_access::impl<Action>::bind(Ts&& ...) [with Ts = {Ts ...}; A = A; Action = ranges::v3::action::sort_fn] [with Ts = {const ranges::v3::action::sort_fn&, const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) const::__lambda23&}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/thirdparty/range-v3-0.5.0/include/range/v3/action/action.hpp:124:17: required by substitution of ‘template<class T, class ... Rest, class A> decltype (ranges::v3::action::{anonymous}::make_action(ranges::v3::action::action_access::impl<A>::bind(((const ranges::v3::action::action<Action>*)this)->ranges::v3::action::action<Action>::action_, static_cast<T&&>(t), *static_cast<Rest&>(ranges::v3::action::action::operator()::rest) ...))) ranges::v3::action::action<Action>::operator()(T&&, Rest&& ...) const [with T = T; Rest = {Rest ...}; A = A; Action = ranges::v3::action::sort_fn] [with T = const org::apache::nifi::minifi::processors::TailFile::findRotatedFiles(const org::apache::nifi::minifi::processors::TailState&) const::__lambda23&; Rest = {}; A = ranges::v3::action::sort_fn]’
/home/fgerlits/src/minifi/extensions/standard-processors/processors/TailFile.cpp:614:79: required from here
{noformat}
> Add range-v3
> ------------
>
> Key: MINIFICPP-1289
> URL: https://issues.apache.org/jira/browse/MINIFICPP-1289
> Project: Apache NiFi MiNiFi C++
> Issue Type: Improvement
> Reporter: Marton Szasz
> Priority: Minor
> Labels: MiNiFi-CPP-Hygiene
>
> Useful library to raise the level of abstraction from iterators to ranges and provide useful related concepts.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)