package Ġcom . one gravity . bloc . builder Ċ Ċ import Ġcom . one gravity . bloc .* Ċ import Ġcom . one gravity . bloc . context . Bloc Context Ċ import Ġcom . one gravity . bloc . state . Bloc State Ċ import Ġcom . one gravity . bloc . utils . Matcher Ċ import Ġcom . one gravity . bloc . utils . Matcher Thunk Ċ import Ġcom . one gravity . bloc . utils . Reducer Ċ import Ġcom . one gravity . bloc . utils . Thunk Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ class ĠB loc Builder < State , ĠAction : ĠAny , ĠProposal > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ thunk s Ġ= ĠArrayList < Matcher Thunk < State , ĠAction >>() ĊĊĠĠĠ Ġprivate Ġvar Ġ_ reducer : ĠRed ucer < State , ĠAction , ĠProposal >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ dispatcher : ĠCor outine Context Ġ= ĠDispatch ers . Default ĊĊĠĠĠ Ġfun Ġbuild ( context : ĠB loc Context , Ġb loc State : ĠB loc State < State , ĠProposal >) Ġ= ĠB loc Impl ( ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠ Ġb loc State Ġ= Ġb loc State , ĊĠĠĠĠĠĠĠ Ġreducer Ġ= ĠcheckNotNull (_ reducer ) Ġ{ Ġ" reduce Ġ{ Ġ} Ġmust Ġbe Ġdeclared " Ġ}, ĊĠĠĠĠĠĠĠ Ġth unk s Ġ= Ġ_ thunk s , ĊĠĠĠĠĠĠĠ Ġdispatcher Ġ= Ġ_ dispatcher , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġth unk ( thunk : ĠTh unk < State , ĠAction >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ thunk s . add ( Matcher Thunk ( null , Ġth unk )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠA Ġ: ĠAction > Ġth unk Matching ( no inline Ġth unk : ĠTh unk < State , ĠAction >) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction ( Matcher . any < Action , ĠA >(), Ġth unk ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< A Ġ: ĠAction > Ġaction ( ĊĠĠĠĠĠĠĠ Ġstate Matcher : ĠMatcher < Action , ĠA >, ĊĠĠĠĠĠĠĠ Ġth unk : ĠTh unk < State , ĠAction > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ thunk s . add ( Matcher Thunk ( state Matcher , Ġth unk )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġimplement Ġreduce < Action > Ġ{ Ġ} ĊĠĠĠ Ġfun Ġreduce ( reducer : ĠRed ucer < State , ĠAction , ĠProposal >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck (_ reducer Ġ== Ġnull ) Ġ{ Ġ" only Ġone Ġreduce Ġ{ Ġ} Ġcan Ġbe Ġdefined " Ġ} ĊĠĠĠĠĠĠĠ Ġ_ reducer Ġ= Ġreducer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdispatcher : ĠCor outine Context Ġ= ĠDispatch ers . Default ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ dispatcher Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ