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)