| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <?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.18.0" xml:lang="ja">
- <compounddef id="actor_8hpp" kind="file" language="C++">
- <compoundname>actor.hpp</compoundname>
- <includes refid="kernel_8hpp" local="yes">kernel.hpp</includes>
- <includes local="no">cstdint</includes>
- <includes local="no">cstddef</includes>
- <includes local="no">type_traits</includes>
- <includes local="no">utility</includes>
- <incdepgraph>
- <node id="1">
- <label>C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/actor.hpp</label>
- <link refid="actor_8hpp"/>
- <childnode refid="2" relation="include">
- </childnode>
- <childnode refid="6" relation="include">
- </childnode>
- <childnode refid="7" relation="include">
- </childnode>
- <childnode refid="8" relation="include">
- </childnode>
- <childnode refid="9" relation="include">
- </childnode>
- </node>
- <node id="2">
- <label>kernel.hpp</label>
- <link refid="kernel_8hpp"/>
- <childnode refid="3" relation="include">
- </childnode>
- <childnode refid="4" relation="include">
- </childnode>
- <childnode refid="5" relation="include">
- </childnode>
- </node>
- <node id="7">
- <label>cstddef</label>
- </node>
- <node id="6">
- <label>cstdint</label>
- </node>
- <node id="5">
- <label>pico/runtime.h</label>
- </node>
- <node id="4">
- <label>stddef.h</label>
- </node>
- <node id="3">
- <label>stdint.h</label>
- </node>
- <node id="8">
- <label>type_traits</label>
- </node>
- <node id="9">
- <label>utility</label>
- </node>
- </incdepgraph>
- <innerclass refid="structtk_1_1_message" prot="public">tk::Message</innerclass>
- <innerclass refid="classtk_1_1_event_hub" prot="public">tk::EventHub</innerclass>
- <innerclass refid="structtk_1_1_event_hub_1_1_subscriber" prot="private">tk::EventHub::Subscriber</innerclass>
- <innerclass refid="classtk_1_1_actor" prot="public">tk::Actor</innerclass>
- <innernamespace refid="namespacetk">tk</innernamespace>
- <briefdescription>
- </briefdescription>
- <detaileddescription>
- </detaileddescription>
- <programlisting>
- <codeline lineno="1"><highlight class="preprocessor">#pragma<sp/>once</highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="2"><highlight class="normal"></highlight></codeline>
- <codeline lineno="3"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>"<ref refid="kernel_8hpp" kindref="compound">kernel.hpp</ref>"</highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="4"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/><cstdint></highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="5"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/><cstddef></highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="6"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/><type_traits></highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="7"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/><utility></highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="8"><highlight class="normal"></highlight></codeline>
- <codeline lineno="9" refid="namespacetk" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">namespace<sp/></highlight><highlight class="normal"><ref refid="namespacetk" kindref="compound">tk</ref><sp/>{</highlight></codeline>
- <codeline lineno="10"><highlight class="normal"></highlight></codeline>
- <codeline lineno="14" refid="structtk_1_1_message" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structtk_1_1_message" kindref="compound">Message</ref><sp/>{</highlight></codeline>
- <codeline lineno="15" refid="structtk_1_1_message_1a9a7de43cbf3da1821cf18ae924f94c52" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/>uint32_t<sp/><ref refid="structtk_1_1_message_1a9a7de43cbf3da1821cf18ae924f94c52" kindref="member">id</ref>;<sp/><sp/><sp/><sp/></highlight></codeline>
- <codeline lineno="16" refid="structtk_1_1_message_1a570c5c394d2786708ce4830e4087aa9e" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/>uintptr_t<sp/><ref refid="structtk_1_1_message_1a570c5c394d2786708ce4830e4087aa9e" kindref="member">arg</ref>;<sp/><sp/></highlight></codeline>
- <codeline lineno="17"><highlight class="normal">};</highlight></codeline>
- <codeline lineno="18"><highlight class="normal"></highlight></codeline>
- <codeline lineno="28"><highlight class="normal"></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/><</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>MsgType,<sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>MaxSubscribers<sp/>=<sp/>4></highlight></codeline>
- <codeline lineno="29" refid="classtk_1_1_event_hub" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classtk_1_1_event_hub" kindref="compound">EventHub</ref><sp/>{</highlight></codeline>
- <codeline lineno="30"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal">Subscriber<sp/>{</highlight></codeline>
- <codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal">*<sp/>actor{</highlight><highlight class="keyword">nullptr</highlight><highlight class="normal">};</highlight></codeline>
- <codeline lineno="32"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>bool<sp/>(*post_fn)(</highlight><highlight class="keywordtype">void</highlight><highlight class="normal">*,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>MsgType&){</highlight><highlight class="keyword">nullptr</highlight><highlight class="normal">};</highlight></codeline>
- <codeline lineno="33"><highlight class="normal"><sp/><sp/><sp/><sp/>};</highlight></codeline>
- <codeline lineno="34"><highlight class="normal"></highlight></codeline>
- <codeline lineno="35"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">inline</highlight><highlight class="normal"><sp/>Subscriber<sp/>subs_[MaxSubscribers]{};</highlight></codeline>
- <codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">inline</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>count_{0};</highlight></codeline>
- <codeline lineno="37"><highlight class="normal"></highlight></codeline>
- <codeline lineno="38"><highlight class="normal"></highlight><highlight class="keyword">public</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="45" refid="classtk_1_1_event_hub_1a50ebe29eaa2657604a1c85bf5125d490" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_event_hub_1a50ebe29eaa2657604a1c85bf5125d490" kindref="member">subscribe</ref>(</highlight><highlight class="keywordtype">void</highlight><highlight class="normal">*<sp/>actor,<sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>(*post_fn)(</highlight><highlight class="keywordtype">void</highlight><highlight class="normal">*,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>MsgType&))<sp/>{</highlight></codeline>
- <codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(count_<sp/>>=<sp/>MaxSubscribers)<sp/>{</highlight></codeline>
- <codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>i<sp/>=<sp/>0;<sp/>i<sp/><<sp/>count_;<sp/>++i)<sp/>{</highlight></codeline>
- <codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(subs_[i].actor<sp/>==<sp/>actor)<sp/>{</highlight></codeline>
- <codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;<sp/><sp/></highlight><highlight class="comment">//<sp/>登録済み</highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="55"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>subs_[count_++]<sp/>=<sp/>{actor,<sp/>post_fn};</highlight></codeline>
- <codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="59"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="60"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="61"><highlight class="normal"></highlight></codeline>
- <codeline lineno="67" refid="classtk_1_1_event_hub_1a09c779ce8c594ea44c831adfd7e287f8" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_event_hub_1a09c779ce8c594ea44c831adfd7e287f8" kindref="member">unsubscribe</ref>(</highlight><highlight class="keywordtype">void</highlight><highlight class="normal">*<sp/>actor)<sp/>{</highlight></codeline>
- <codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>i<sp/>=<sp/>0;<sp/>i<sp/><<sp/>count_;<sp/>++i)<sp/>{</highlight></codeline>
- <codeline lineno="70"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(subs_[i].actor<sp/>==<sp/>actor)<sp/>{</highlight></codeline>
- <codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>j<sp/>=<sp/>i;<sp/>j<sp/>+<sp/>1<sp/><<sp/>count_;<sp/>++j)<sp/>{</highlight></codeline>
- <codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>subs_[j]<sp/>=<sp/>subs_[j<sp/>+<sp/>1];</highlight></codeline>
- <codeline lineno="73"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>count_--;</highlight></codeline>
- <codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="77"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="82"><highlight class="normal"></highlight></codeline>
- <codeline lineno="89" refid="classtk_1_1_event_hub_1a3a59a641ad3fe121c0da7e1c81dc300b" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_event_hub_1a3a59a641ad3fe121c0da7e1c81dc300b" kindref="member">publish</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>MsgType&<sp/>msg)<sp/>{</highlight></codeline>
- <codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Subscriber<sp/>local_subs[MaxSubscribers];</highlight></codeline>
- <codeline lineno="91"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>n<sp/>=<sp/>0;</highlight></codeline>
- <codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>{</highlight></codeline>
- <codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="94"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>n<sp/>=<sp/>count_;</highlight></codeline>
- <codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>i<sp/>=<sp/>0;<sp/>i<sp/><<sp/>n;<sp/>++i)<sp/>{</highlight></codeline>
- <codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local_subs[i]<sp/>=<sp/>subs_[i];</highlight></codeline>
- <codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="100"><highlight class="normal"></highlight></codeline>
- <codeline lineno="101"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>delivered<sp/>=<sp/>0;</highlight></codeline>
- <codeline lineno="102"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>i<sp/>=<sp/>0;<sp/>i<sp/><<sp/>n;<sp/>++i)<sp/>{</highlight></codeline>
- <codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(local_subs[i].post_fn<sp/>&&<sp/>local_subs[i].post_fn(local_subs[i].actor,<sp/>msg))<sp/>{</highlight></codeline>
- <codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delivered++;</highlight></codeline>
- <codeline lineno="105"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>delivered;</highlight></codeline>
- <codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="109"><highlight class="normal"></highlight></codeline>
- <codeline lineno="111" refid="classtk_1_1_event_hub_1ac4cd6ce4e37b74385c7f4352a5516930" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_event_hub_1ac4cd6ce4e37b74385c7f4352a5516930" kindref="member">subscriber_count</ref>()<sp/>{</highlight></codeline>
- <codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="113"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>n<sp/>=<sp/>count_;</highlight></codeline>
- <codeline lineno="114"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>n;</highlight></codeline>
- <codeline lineno="116"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="117"><highlight class="normal">};</highlight></codeline>
- <codeline lineno="118"><highlight class="normal"></highlight></codeline>
- <codeline lineno="134"><highlight class="normal"></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/><</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>MsgType></highlight></codeline>
- <codeline lineno="135" refid="namespacetk_1a083495c9bf857a63f6c20a20aac0ca52" refkind="member"><highlight class="normal"></highlight><highlight class="keyword">inline</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/><ref refid="namespacetk_1a083495c9bf857a63f6c20a20aac0ca52" kindref="member">publish</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>MsgType&<sp/>msg)<sp/>{</highlight></codeline>
- <codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_event_hub_1a3a59a641ad3fe121c0da7e1c81dc300b" kindref="member">EventHub<MsgType>::publish</ref>(msg);</highlight></codeline>
- <codeline lineno="137"><highlight class="normal">}</highlight></codeline>
- <codeline lineno="138"><highlight class="normal"></highlight></codeline>
- <codeline lineno="146" refid="namespacetk_1a5549bec310750722a1964de1145b9fed" refkind="member"><highlight class="normal"></highlight><highlight class="keyword">inline</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/><ref refid="namespacetk_1a083495c9bf857a63f6c20a20aac0ca52" kindref="member">publish</ref>(uint32_t<sp/></highlight><highlight class="keywordtype">id</highlight><highlight class="normal">,<sp/>uintptr_t<sp/>arg<sp/>=<sp/>0)<sp/>{</highlight></codeline>
- <codeline lineno="147"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="namespacetk_1a083495c9bf857a63f6c20a20aac0ca52" kindref="member">publish</ref>(<ref refid="structtk_1_1_message" kindref="compound">Message</ref>{id,<sp/>arg});</highlight></codeline>
- <codeline lineno="148"><highlight class="normal">}</highlight></codeline>
- <codeline lineno="149"><highlight class="normal"></highlight></codeline>
- <codeline lineno="173"><highlight class="normal"></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/><</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>MsgType<sp/>=<sp/>Message,<sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>QueueSize<sp/>=<sp/>8></highlight></codeline>
- <codeline lineno="174" refid="classtk_1_1_actor" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classtk_1_1_actor_1a776aef8cdcfb4416ef976697eb518ed5" kindref="member">Actor</ref><sp/>{</highlight></codeline>
- <codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static_assert</highlight><highlight class="normal">(QueueSize<sp/>><sp/>0,<sp/></highlight><highlight class="stringliteral">"QueueSize<sp/>must<sp/>be<sp/>greater<sp/>than<sp/>0"</highlight><highlight class="normal">);</highlight></codeline>
- <codeline lineno="176"><highlight class="normal"></highlight></codeline>
- <codeline lineno="177"><highlight class="normal"></highlight><highlight class="keyword">public</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="178" refid="classtk_1_1_actor_1a776aef8cdcfb4416ef976697eb518ed5" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_actor_1a776aef8cdcfb4416ef976697eb518ed5" kindref="member">Actor</ref>()<sp/>=<sp/></highlight><highlight class="keywordflow">default</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="179" refid="classtk_1_1_actor_1abfc63a514a3ae7cdbdf9ceee81c3b0fc" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">virtual</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_actor_1abfc63a514a3ae7cdbdf9ceee81c3b0fc" kindref="member">~Actor</ref>()<sp/>{</highlight></codeline>
- <codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_event_hub_1a09c779ce8c594ea44c831adfd7e287f8" kindref="member">EventHub<MsgType>::unsubscribe</ref>(</highlight><highlight class="keyword">this</highlight><highlight class="normal">);</highlight></codeline>
- <codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="182"><highlight class="normal"></highlight></codeline>
- <codeline lineno="191" refid="classtk_1_1_actor_1ac98ec3132f2ded910a6899b030c06f3f" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_actor_1ac98ec3132f2ded910a6899b030c06f3f" kindref="member">start</ref>(uint32_t<sp/>prio<sp/>=<sp/><ref refid="namespacetk_1a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca" kindref="member">PRIO_NORMAL</ref>)<sp/>{</highlight></codeline>
- <codeline lineno="192"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_event_hub_1a50ebe29eaa2657604a1c85bf5125d490" kindref="member">EventHub<MsgType>::subscribe</ref>(</highlight><highlight class="keyword">this</highlight><highlight class="normal">,<sp/>[](</highlight><highlight class="keywordtype">void</highlight><highlight class="normal">*<sp/>obj,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>MsgType&<sp/>m)<sp/>{</highlight></codeline>
- <codeline lineno="193"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">static_cast<</highlight><highlight class="normal"><ref refid="classtk_1_1_actor_1a776aef8cdcfb4416ef976697eb518ed5" kindref="member">Actor<MsgType, QueueSize></ref>*</highlight><highlight class="keyword">></highlight><highlight class="normal">(obj)-><ref refid="classtk_1_1_actor_1a224e6be4dca0d1500f2121e97bd0f92d" kindref="member">post</ref>(m);</highlight></codeline>
- <codeline lineno="194"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
- <codeline lineno="195"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>handle_<sp/>=<sp/><ref refid="namespacetk_1a6e721332f5a7d85998345ed218de7394" kindref="member">tk::create</ref>(task_entry,<sp/></highlight><highlight class="keyword">this</highlight><highlight class="normal">,<sp/>prio);</highlight></codeline>
- <codeline lineno="196"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>handle_.is_valid();</highlight></codeline>
- <codeline lineno="197"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="198"><highlight class="normal"></highlight></codeline>
- <codeline lineno="207" refid="classtk_1_1_actor_1a224e6be4dca0d1500f2121e97bd0f92d" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_actor_1a224e6be4dca0d1500f2121e97bd0f92d" kindref="member">post</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>MsgType&<sp/>msg)<sp/>{</highlight></codeline>
- <codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(count_<sp/>>=<sp/>QueueSize)<sp/>{</highlight></codeline>
- <codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>queue_[tail_]<sp/>=<sp/>msg;</highlight></codeline>
- <codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>tail_<sp/>=<sp/>(tail_<sp/>+<sp/>1)<sp/>%<sp/>QueueSize;</highlight></codeline>
- <codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>count_++;</highlight></codeline>
- <codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(waiting_)<sp/>{</highlight></codeline>
- <codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>waiting_<sp/>=<sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="218"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1ab19385598f18560cb574cc86174ececa" kindref="member">detail::wake_task_locked</ref>(handle_);</highlight></codeline>
- <codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="222"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="223"><highlight class="normal"></highlight></codeline>
- <codeline lineno="230" refid="classtk_1_1_actor_1a863f28d824aaa78c75789166b1c2a010" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_actor_1a863f28d824aaa78c75789166b1c2a010" kindref="member">post</ref>(MsgType&&<sp/>msg)<sp/>{</highlight></codeline>
- <codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="232"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(count_<sp/>>=<sp/>QueueSize)<sp/>{</highlight></codeline>
- <codeline lineno="233"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="234"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="235"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="236"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>queue_[tail_]<sp/>=<sp/>std::move(msg);</highlight></codeline>
- <codeline lineno="237"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>tail_<sp/>=<sp/>(tail_<sp/>+<sp/>1)<sp/>%<sp/>QueueSize;</highlight></codeline>
- <codeline lineno="238"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>count_++;</highlight></codeline>
- <codeline lineno="239"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(waiting_)<sp/>{</highlight></codeline>
- <codeline lineno="240"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>waiting_<sp/>=<sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="241"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1ab19385598f18560cb574cc86174ececa" kindref="member">detail::wake_task_locked</ref>(handle_);</highlight></codeline>
- <codeline lineno="242"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="244"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="246"><highlight class="normal"></highlight></codeline>
- <codeline lineno="254"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/><</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>U<sp/>=<sp/>MsgType></highlight></codeline>
- <codeline lineno="255"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>std::enable_if<std::is_same<U,<sp/>Message>::value,<sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal">>::type</highlight></codeline>
- <codeline lineno="256" refid="classtk_1_1_actor_1a5c4f4f2f1b8011a37773617e34218c2d" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_actor_1a5c4f4f2f1b8011a37773617e34218c2d" kindref="member">post</ref>(uint32_t<sp/></highlight><highlight class="keywordtype">id</highlight><highlight class="normal">,<sp/>uintptr_t<sp/>arg<sp/>=<sp/>0)<sp/>{</highlight></codeline>
- <codeline lineno="257"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_actor_1a224e6be4dca0d1500f2121e97bd0f92d" kindref="member">post</ref>(<ref refid="structtk_1_1_message" kindref="compound">Message</ref>{id,<sp/>arg});</highlight></codeline>
- <codeline lineno="258"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="259"><highlight class="normal"></highlight></codeline>
- <codeline lineno="261" refid="classtk_1_1_actor_1a60a2752360fa7185ec7776f2a6ef766a" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="structtk_1_1_task_handle" kindref="compound">TaskHandle</ref><sp/><ref refid="classtk_1_1_actor_1a60a2752360fa7185ec7776f2a6ef766a" kindref="member">handle</ref>()</highlight><highlight class="keyword"><sp/>const<sp/></highlight><highlight class="normal">{<sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>handle_;<sp/>}</highlight></codeline>
- <codeline lineno="262"><highlight class="normal"></highlight></codeline>
- <codeline lineno="263"><highlight class="normal"></highlight><highlight class="keyword">protected</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="270" refid="classtk_1_1_actor_1afb31ec0d50d1ac97e6a4ce148a96f78d" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">virtual</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_actor_1afb31ec0d50d1ac97e6a4ce148a96f78d" kindref="member">on_start</ref>()<sp/>{}</highlight></codeline>
- <codeline lineno="271"><highlight class="normal"></highlight></codeline>
- <codeline lineno="280" refid="classtk_1_1_actor_1a1147554d6ddb64d822285ca5a03506a4" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">virtual</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_actor_1a1147554d6ddb64d822285ca5a03506a4" kindref="member">on_message</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>MsgType&<sp/>msg)<sp/>=<sp/>0;</highlight></codeline>
- <codeline lineno="281"><highlight class="normal"></highlight></codeline>
- <codeline lineno="282"><highlight class="normal"></highlight><highlight class="keyword">private</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/>task_entry(</highlight><highlight class="keywordtype">void</highlight><highlight class="normal">*<sp/>arg)<sp/>{</highlight></codeline>
- <codeline lineno="284"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static_cast<</highlight><highlight class="normal"><ref refid="classtk_1_1_actor_1a776aef8cdcfb4416ef976697eb518ed5" kindref="member">Actor<MsgType, QueueSize></ref>*</highlight><highlight class="keyword">></highlight><highlight class="normal">(arg)->event_loop();</highlight></codeline>
- <codeline lineno="285"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="286"><highlight class="normal"></highlight></codeline>
- <codeline lineno="287"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/>event_loop()<sp/>{</highlight></codeline>
- <codeline lineno="288"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_actor_1afb31ec0d50d1ac97e6a4ce148a96f78d" kindref="member">on_start</ref>();</highlight></codeline>
- <codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(;;)<sp/>{</highlight></codeline>
- <codeline lineno="290"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>MsgType<sp/>msg{};</highlight></codeline>
- <codeline lineno="291"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>(count_<sp/>==<sp/>0)<sp/>{</highlight></codeline>
- <codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>waiting_<sp/>=<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="294"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a400363f36b5fb5dfc8aec11334471d0d" kindref="member">detail::block_current_task_locked</ref>();</highlight></codeline>
- <codeline lineno="295"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="296"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>コンテキストスイッチされ、他のタスクが走る。</highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="297"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>wake_task_locked<sp/>で起こされたらここに戻る。</highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="299"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="300"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>msg<sp/>=<sp/>std::move(queue_[head_]);</highlight></codeline>
- <codeline lineno="301"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>head_<sp/>=<sp/>(head_<sp/>+<sp/>1)<sp/>%<sp/>QueueSize;</highlight></codeline>
- <codeline lineno="302"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>count_--;</highlight></codeline>
- <codeline lineno="303"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>waiting_<sp/>=<sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="304"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="305"><highlight class="normal"></highlight></codeline>
- <codeline lineno="306"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>メッセージディスパッチ(ロック解除状態で実行)</highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="307"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_actor_1a1147554d6ddb64d822285ca5a03506a4" kindref="member">on_message</ref>(msg);</highlight></codeline>
- <codeline lineno="308"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="309"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="310"><highlight class="normal"></highlight></codeline>
- <codeline lineno="311"><highlight class="normal"><sp/><sp/><sp/><sp/>MsgType<sp/>queue_[QueueSize]{};</highlight></codeline>
- <codeline lineno="312"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>head_{0};</highlight></codeline>
- <codeline lineno="313"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>tail_{0};</highlight></codeline>
- <codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>count_{0};</highlight></codeline>
- <codeline lineno="315"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>waiting_{</highlight><highlight class="keyword">false</highlight><highlight class="normal">};</highlight></codeline>
- <codeline lineno="316"><highlight class="normal"><sp/><sp/><sp/><sp/>TaskHandle<sp/>handle_{};</highlight></codeline>
- <codeline lineno="317"><highlight class="normal">};</highlight></codeline>
- <codeline lineno="318"><highlight class="normal"></highlight></codeline>
- <codeline lineno="319"><highlight class="normal">}<sp/><sp/></highlight><highlight class="comment">//<sp/>namespace<sp/>tk</highlight><highlight class="normal"></highlight></codeline>
- </programlisting>
- <location file="C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/actor.hpp"/>
- </compounddef>
- </doxygen>
|