X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Fgen%2FBase.h;h=46141ee27b6e958e6bbc1b6accb93265e217d1eb;hb=d82763a62158b77e6504535907537e1a66545264;hp=06cc0e3c89e1f786e9987a67b17e8f1b6d25b3a7;hpb=d3cc50e00280b1ca5ffd4f713ac312181b1d6810;p=folly.git diff --git a/folly/gen/Base.h b/folly/gen/Base.h index 06cc0e3c..46141ee2 100644 --- a/folly/gen/Base.h +++ b/folly/gen/Base.h @@ -136,6 +136,10 @@ class MemberFunction { Result operator()(Class& x) const { return (x.*member_)(); } + + Result operator()(Class* x) const { + return (x->*member_)(); + } }; template*member_)(); + } }; template*field_; + } + FieldType& operator()(Class& x) const { return x.*field_; } + FieldType& operator()(Class* x) const { + return x->*field_; + } + FieldType&& operator()(Class&& x) const { return std::move(x.*field_); } @@ -256,9 +272,24 @@ template::type>> class CopiedSource; -template +template class Sequence; +template +class RangeImpl; + +template +class RangeWithStepImpl; + +template +class SeqImpl; + +template +class SeqWithStepImpl; + +template +class InfiniteImpl; + template class Yield; @@ -396,21 +427,36 @@ From from(Container&& source) { return From(std::move(source)); } -template> +template, + class Gen = detail::Sequence> Gen range(Value begin, Value end) { - return Gen(begin, end); + return Gen{std::move(begin), Impl{std::move(end)}}; } -template> +template, + class Gen = detail::Sequence> +Gen range(Value begin, Value end, Distance step) { + return Gen{std::move(begin), Impl{std::move(end), std::move(step)}}; +} + +template, + class Gen = detail::Sequence> Gen seq(Value first, Value last) { - return Gen(first, last); + return Gen{std::move(first), Impl{std::move(last)}}; } -template> -Gen seq(Value begin) { - return Gen(begin); +template, + class Gen = detail::Sequence> +Gen seq(Value first, Value last, Distance step) { + return Gen{std::move(first), Impl{std::move(last), std::move(step)}}; +} + +template, + class Gen = detail::Sequence> +Gen seq(Value first) { + return Gen{std::move(first), Impl{}}; } template