<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.6" xml:lang="en-US">
  <compounddef id="classtf_1_1DataPipe" kind="class" language="C++" prot="public">
    <compoundname>tf::DataPipe</compoundname>
    <includes refid="data__pipeline_8hpp" local="no">data_pipeline.hpp</includes>
    <templateparamlist>
      <param>
        <type>typename Input</type>
      </param>
      <param>
        <type>typename Output</type>
      </param>
      <param>
        <type>typename C</type>
      </param>
    </templateparamlist>
      <sectiondef kind="public-type">
      <memberdef kind="typedef" id="classtf_1_1DataPipe_1a5cc3b76f16379f4cb2ecdef66dee1ba3" prot="public" static="no">
        <type>C</type>
        <definition>using tf::DataPipe&lt; Input, Output, C &gt;::callable_t =  C</definition>
        <argsstring></argsstring>
        <name>callable_t</name>
        <qualifiedname>tf::DataPipe::callable_t</qualifiedname>
        <briefdescription>
<para>callable type of the data pipe </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="62" column="3" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="62" bodyend="-1"/>
      </memberdef>
      <memberdef kind="typedef" id="classtf_1_1DataPipe_1ae5e9dd100a02edb2d560e8a1d516037d" prot="public" static="no">
        <type>Input</type>
        <definition>using tf::DataPipe&lt; Input, Output, C &gt;::input_t =  Input</definition>
        <argsstring></argsstring>
        <name>input_t</name>
        <qualifiedname>tf::DataPipe::input_t</qualifiedname>
        <briefdescription>
<para>input type of the data pipe </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="67" column="3" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="67" bodyend="-1"/>
      </memberdef>
      <memberdef kind="typedef" id="classtf_1_1DataPipe_1a8a99a980f0fa6bc55203cb33f526f007" prot="public" static="no">
        <type>Output</type>
        <definition>using tf::DataPipe&lt; Input, Output, C &gt;::output_t =  Output</definition>
        <argsstring></argsstring>
        <name>output_t</name>
        <qualifiedname>tf::DataPipe::output_t</qualifiedname>
        <briefdescription>
<para>output type of the data pipe </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="72" column="3" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="72" bodyend="-1"/>
      </memberdef>
      </sectiondef>
      <sectiondef kind="friend">
      <memberdef kind="friend" id="classtf_1_1DataPipe_1a576c05629fadf8120eb4db27cf28e659" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename...</type>
            <declname>Ps</declname>
            <defname>Ps</defname>
          </param>
        </templateparamlist>
        <type>class</type>
        <definition>friend class DataPipeline</definition>
        <argsstring></argsstring>
        <name>DataPipeline</name>
        <qualifiedname>tf::DataPipe::DataPipeline</qualifiedname>
        <param>
          <type><ref refid="classtf_1_1DataPipeline" kindref="compound">DataPipeline</ref></type>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="55" column="16" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="55" bodyend="-1"/>
      </memberdef>
      </sectiondef>
      <sectiondef kind="private-attrib">
      <memberdef kind="variable" id="classtf_1_1DataPipe_1af7e6b232e5d82bd0443b4e4606a3fbea" prot="private" static="no" mutable="no">
        <type><ref refid="namespacetf_1abb7a11e41fd457f69e7ff45d4c769564" kindref="member">PipeType</ref></type>
        <definition>PipeType tf::DataPipe&lt; Input, Output, C &gt;::_type</definition>
        <argsstring></argsstring>
        <name>_type</name>
        <qualifiedname>tf::DataPipe::_type</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="123" column="12" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="123" bodyend="-1"/>
      </memberdef>
      <memberdef kind="variable" id="classtf_1_1DataPipe_1a0a91ad80a855658439bb9d9750ae4fc9" prot="private" static="no" mutable="no">
        <type><ref refid="classtf_1_1DataPipe_1a5cc3b76f16379f4cb2ecdef66dee1ba3" kindref="member">callable_t</ref></type>
        <definition>callable_t tf::DataPipe&lt; Input, Output, C &gt;::_callable</definition>
        <argsstring></argsstring>
        <name>_callable</name>
        <qualifiedname>tf::DataPipe::_callable</qualifiedname>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="125" column="14" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="125" bodyend="-1"/>
      </memberdef>
      </sectiondef>
      <sectiondef kind="public-func">
      <memberdef kind="function" id="classtf_1_1DataPipe_1a8b7e8194874901eacfb5d3d2b72a2b85" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type></type>
        <definition>tf::DataPipe&lt; Input, Output, C &gt;::DataPipe</definition>
        <argsstring>()=default</argsstring>
        <name>DataPipe</name>
        <qualifiedname>tf::DataPipe::DataPipe</qualifiedname>
        <briefdescription>
<para>default constructor </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="77" column="3"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1DataPipe_1a542531895cb9363c6291e0ce9d126974" prot="public" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type></type>
        <definition>tf::DataPipe&lt; Input, Output, C &gt;::DataPipe</definition>
        <argsstring>(PipeType d, callable_t &amp;&amp;callable)</argsstring>
        <name>DataPipe</name>
        <qualifiedname>tf::DataPipe::DataPipe</qualifiedname>
        <param>
          <type><ref refid="namespacetf_1abb7a11e41fd457f69e7ff45d4c769564" kindref="member">PipeType</ref></type>
          <declname>d</declname>
        </param>
        <param>
          <type><ref refid="classtf_1_1DataPipe_1a5cc3b76f16379f4cb2ecdef66dee1ba3" kindref="member">callable_t</ref> &amp;&amp;</type>
          <declname>callable</declname>
        </param>
        <briefdescription>
<para>constructs a data pipe </para>
        </briefdescription>
        <detaileddescription>
<para>You should use the helper function, <ref refid="namespacetf_1a8975fa5762088789adb0b60f38208309" kindref="member">tf::make_data_pipe</ref>, to create a <ref refid="classtf_1_1DataPipe" kindref="compound">DataPipe</ref> object, especially when you need <ref refid="classtf_1_1DataPipe" kindref="compound">tf::DataPipe</ref> to automatically deduct the lambda type. </para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="86" column="3" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="86" bodyend="88"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1DataPipe_1a82ef8e8f06444b251ccfe323facbf67a" prot="public" static="no" const="yes" explicit="no" inline="yes" virt="non-virtual">
        <type><ref refid="namespacetf_1abb7a11e41fd457f69e7ff45d4c769564" kindref="member">PipeType</ref></type>
        <definition>PipeType tf::DataPipe&lt; Input, Output, C &gt;::type</definition>
        <argsstring>() const</argsstring>
        <name>type</name>
        <qualifiedname>tf::DataPipe::type</qualifiedname>
        <briefdescription>
<para>queries the type of the data pipe </para>
        </briefdescription>
        <detaileddescription>
<para>A data pipe can be either parallel (<ref refid="namespacetf_1abb7a11e41fd457f69e7ff45d4c769564adf13a99b035d6f0bce4f44ab18eec8eb" kindref="member">tf::PipeType::PARALLEL</ref>) or serial (<ref refid="namespacetf_1abb7a11e41fd457f69e7ff45d4c769564a7b804a28d6154ab8007287532037f1d0" kindref="member">tf::PipeType::SERIAL</ref>). </para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="96" column="12" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="96" bodyend="98"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1DataPipe_1af7a3c2d313edd443b049e937f8ec8cd8" prot="public" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>void</type>
        <definition>void tf::DataPipe&lt; Input, Output, C &gt;::type</definition>
        <argsstring>(PipeType type)</argsstring>
        <name>type</name>
        <qualifiedname>tf::DataPipe::type</qualifiedname>
        <param>
          <type><ref refid="namespacetf_1abb7a11e41fd457f69e7ff45d4c769564" kindref="member">PipeType</ref></type>
          <declname>type</declname>
        </param>
        <briefdescription>
<para>assigns a new type to the data pipe </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="103" column="8" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="103" bodyend="105"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1DataPipe_1a5931f0ae2db8e00f4ad4c42a26adbeae" prot="public" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename U</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>void tf::DataPipe&lt; Input, Output, C &gt;::callable</definition>
        <argsstring>(U &amp;&amp;callable)</argsstring>
        <name>callable</name>
        <qualifiedname>tf::DataPipe::callable</qualifiedname>
        <param>
          <type>U &amp;&amp;</type>
          <declname>callable</declname>
        </param>
        <briefdescription>
<para>assigns a new callable to the data pipe </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="templateparam"><parameteritem>
<parameternamelist>
<parametername>U</parametername>
</parameternamelist>
<parameterdescription>
<para>callable type </para>
</parameterdescription>
</parameteritem>
</parameterlist>
<parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>callable</parametername>
</parameternamelist>
<parameterdescription>
<para>a callable object constructible from the callable type of this data pipe</para>
</parameterdescription>
</parameteritem>
</parameterlist>
Assigns a new callable to the pipe using universal forwarding. </para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="117" column="8" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="117" bodyend="119"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>class to create a stage in a data-parallel pipeline </para>
    </briefdescription>
    <detaileddescription>
<para>A data pipe represents a stage of a data-parallel pipeline. A data pipe can be either <emphasis>parallel</emphasis> direction or <emphasis>serial</emphasis> direction (specified by <ref refid="namespacetf_1abb7a11e41fd457f69e7ff45d4c769564" kindref="member">tf::PipeType</ref>) and is associated with a callable to invoke by the pipeline scheduler.</para>
<para>You need to use the template function, <ref refid="namespacetf_1a8975fa5762088789adb0b60f38208309" kindref="member">tf::make_data_pipe</ref>, to create a data pipe. The input and output types of a <ref refid="classtf_1_1DataPipe" kindref="compound">tf::DataPipe</ref> should be decayed types (though the library will always decay them for you using <computeroutput><ref refid="cpp/types/decay" kindref="compound" external="/Users/twhuang/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::decay</ref></computeroutput>) to allow internal storage to work. The data will be passed by reference to your callable, at which you can take it by copy or reference.</para>
<para><programlisting filename=".cpp"><codeline><highlight class="normal">tf::make_data_pipe&lt;int,<sp/>std::string&gt;(</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/><ref refid="namespacetf_1abb7a11e41fd457f69e7ff45d4c769564a7b804a28d6154ab8007287532037f1d0" kindref="member">tf::PipeType::SERIAL</ref>,<sp/></highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>[](</highlight><highlight class="keywordtype">int</highlight><highlight class="normal">&amp;<sp/>input)<sp/>{</highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="cpp/string/basic_string/to_string" kindref="compound" external="/Users/twhuang/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::to_string</ref>(input<sp/>+<sp/>100);}</highlight></codeline>
<codeline><highlight class="normal">);</highlight></codeline>
</programlisting></para>
<para>In addition to the data, you callable can take an additional reference of <ref refid="classtf_1_1Pipeflow" kindref="compound">tf::Pipeflow</ref> in the second argument to probe the runtime information for a stage task, such as its line number and token number:</para>
<para><programlisting filename=".cpp"><codeline><highlight class="normal">tf::make_data_pipe&lt;int,<sp/>std::string&gt;(</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/><ref refid="namespacetf_1abb7a11e41fd457f69e7ff45d4c769564a7b804a28d6154ab8007287532037f1d0" kindref="member">tf::PipeType::SERIAL</ref>,<sp/></highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>[](</highlight><highlight class="keywordtype">int</highlight><highlight class="normal">&amp;<sp/>input,<sp/><ref refid="classtf_1_1Pipeflow" kindref="compound">tf::Pipeflow</ref>&amp;<sp/>pf)<sp/>{</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="cpp/io/c/fprintf" kindref="compound" external="/Users/twhuang/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">printf</ref>(</highlight><highlight class="stringliteral">&quot;token=%lu,<sp/>line=%lu\n&quot;</highlight><highlight class="normal">,<sp/>pf.<ref refid="classtf_1_1Pipeflow_1a295e5d884665c076f4ef5d78139f7c51" kindref="member">token</ref>(),<sp/>pf.<ref refid="classtf_1_1Pipeflow_1afee054e6a99965d4b3e36ff903227e6c" kindref="member">line</ref>());</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="cpp/string/basic_string/to_string" kindref="compound" external="/Users/twhuang/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::to_string</ref>(input<sp/>+<sp/>100);</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>}</highlight></codeline>
<codeline><highlight class="normal">);</highlight></codeline>
</programlisting> </para>
    </detaileddescription>
    <location file="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" line="52" column="1" bodyfile="/Users/twhuang/Code/taskflow/taskflow/algorithm/data_pipeline.hpp" bodystart="52" bodyend="126"/>
    <listofallmembers>
      <member refid="classtf_1_1DataPipe_1a0a91ad80a855658439bb9d9750ae4fc9" prot="private" virt="non-virtual"><scope>tf::DataPipe</scope><name>_callable</name></member>
      <member refid="classtf_1_1DataPipe_1af7e6b232e5d82bd0443b4e4606a3fbea" prot="private" virt="non-virtual"><scope>tf::DataPipe</scope><name>_type</name></member>
      <member refid="classtf_1_1DataPipe_1a5931f0ae2db8e00f4ad4c42a26adbeae" prot="public" virt="non-virtual"><scope>tf::DataPipe</scope><name>callable</name></member>
      <member refid="classtf_1_1DataPipe_1a5cc3b76f16379f4cb2ecdef66dee1ba3" prot="public" virt="non-virtual"><scope>tf::DataPipe</scope><name>callable_t</name></member>
      <member refid="classtf_1_1DataPipe_1a8b7e8194874901eacfb5d3d2b72a2b85" prot="public" virt="non-virtual"><scope>tf::DataPipe</scope><name>DataPipe</name></member>
      <member refid="classtf_1_1DataPipe_1a542531895cb9363c6291e0ce9d126974" prot="public" virt="non-virtual"><scope>tf::DataPipe</scope><name>DataPipe</name></member>
      <member refid="classtf_1_1DataPipe_1a576c05629fadf8120eb4db27cf28e659" prot="private" virt="non-virtual"><scope>tf::DataPipe</scope><name>DataPipeline</name></member>
      <member refid="classtf_1_1DataPipe_1ae5e9dd100a02edb2d560e8a1d516037d" prot="public" virt="non-virtual"><scope>tf::DataPipe</scope><name>input_t</name></member>
      <member refid="classtf_1_1DataPipe_1a8a99a980f0fa6bc55203cb33f526f007" prot="public" virt="non-virtual"><scope>tf::DataPipe</scope><name>output_t</name></member>
      <member refid="classtf_1_1DataPipe_1a82ef8e8f06444b251ccfe323facbf67a" prot="public" virt="non-virtual"><scope>tf::DataPipe</scope><name>type</name></member>
      <member refid="classtf_1_1DataPipe_1af7a3c2d313edd443b049e937f8ec8cd8" prot="public" virt="non-virtual"><scope>tf::DataPipe</scope><name>type</name></member>
    </listofallmembers>
  </compounddef>
</doxygen>
