fs2.concurrent.SignallingMapRef$
See theSignallingMapRef companion trait
object SignallingMapRef
Attributes
- Companion:
- trait
- Source:
- Signal.scala
- Graph
- Supertypes
- class Objecttrait Matchableclass Any
- Self type
- SignallingMapRef.type
Members list
Concise view
Value members
Concrete methods
def
State.this._1
case1=>
State.this._2
case2=>
State.this._3
case_=>
thrownewIndexOutOfBoundsException(n.toString())
}
}
objectStateextendsAnyRefwithProduct{
overridedeftoString:String="State"
typeMirroredMonoType
deffromProduct(`x$0₃`:Product):MirroredMonoType=newState(`x$0₃`.productElement(0).$asInstanceOf$[Map[K,V]],`x$0₃`.productElement(1).$asInstanceOf$[Long],`x$0₃`.productElement(2).$asInstanceOf$[Map[K,LongMap[Deferred[F,Tuple2[Option[V],Long]]]]])
}
toFunctorOps[F,Tuple2[Ref[F,State],Ref[F,Long]]](catsSyntaxSemigroupal[F,Ref[F,State]](F.ref[State](State.apply(initial,0L,initial.flatMap[K,Nothing](((_$30:Tuple2[K,V])=>Nil)))))(F).product[Ref[F,Long]](F.ref[Long](1L)))(F).map[SignallingMapRef[F,K,Option[V]]](((x$1:Tuple2[Ref[F,State],Ref[F,Long]])=>x$1match{
caseTuple2(state,ids)=>
defnewId:F[Long]=ids.getAndUpdate(((_$31:Long)=>_$31.+(1)))
defupdateAndNotify[U](state:State,k:K,f:Function1[Option[V],Tuple2[Option[V],U]]):Tuple2[State,F[U]]={
val$7$:Tuple2[Option[V],U]=(f.apply(state.value.get(k)):@unchecked)match{
caseTuple2(newValue,result)=>
Tuple2.apply[Option[V],U](newValue,result)
}
val`newValue₂`:Option[V]=$7$._1
val`result₂`:U=$7$._2
valnewMap:Map[K,V]=`newValue₂`.fold[Map[K,V]](state.value.-(k))(((v:V)=>state.value.+[V](ArrowAssoc[K](k).->[V](v))))
val`lastUpdate₂`:Long=state.lastUpdate.+(1)
valnewListeners:Map[K,LongMap[Deferred[F,Tuple2[Option[V],Long]]]]=state.listeners.-(k)
valnewState:State=State.apply(newMap,`lastUpdate₂`,newListeners)
valnotifyListeners:F[Unit]=state.listeners.get(k).fold[F[Unit]](F.unit)(((`listeners₂`:LongMap[Deferred[F,Tuple2[Option[V],Long]]])=>toFoldableOps[Vector,Deferred[F,Tuple2[Option[V],Long]]](`listeners₂`.values.toVector)(catsTraverseForVector).traverse_[F,Boolean](((listener:Deferred[F,Tuple2[Option[V],Long]])=>listener.complete(ArrowAssoc[Option[V]](`newValue₂`).->[Long](`lastUpdate₂`))))(F)))
ArrowAssoc[State](newState).->[F[U]](toFunctorOps[F,Unit](notifyListeners)(F).as[U](`result₂`))
}
((`k₂`:K)=>{
finalclass$anon()extendsSignallingRef[F,Option[V]]{
defget:F[Option[V]]=toFunctorOps[F,State](`state₂`.get)(F).map[Option[V]](((_$32:State)=>_$32.value.get(`k₂`)))
defcontinuous:Stream[F,Option[V]]=Stream.repeatEval[F,Option[V]]($anon.this.get)
defdiscrete:Stream[F,Option[V]]={
defgo(id:Long,lastSeen:Long):Stream[F,Option[V]]={
defgetNext:F[Tuple2[Option[V],Long]]=toFlatMapOps[F,Deferred[F,Tuple2[Option[V],Long]]](F.deferred[Tuple2[Option[V],Long]])(F).flatMap[Tuple2[Option[V],Long]](((wait:Deferred[F,Tuple2[Option[V],Long]])=>catsSyntaxFlatten[F,Tuple2[Option[V],Long]](`state₂`.modify[F[Tuple2[Option[V],Long]]](((`x$1₂`:State)=>`x$1₂`match{
casestate@State(value,lastUpdate,listeners)=>
if(`lastUpdate₃`.!=(lastSeen))ArrowAssoc[State](`state₃`).->[F[Tuple2[Option[V],Long]]](catsSyntaxApplicativeId[Tuple2[Option[V],Long]](ArrowAssoc[Option[V]](`value₂`.get(`k₂`)).->[Long](`lastUpdate₃`)).pure[F](F))else{
val`newListeners₂`:Map[K,LongMap[Deferred[F,Tuple2[Option[V],Long]]]]=`listeners₃`.updated[LongMap[Deferred[F,Tuple2[Option[V],Long]]]](`k₂`,`listeners₃`.getOrElse[LongMap[Deferred[F,Tuple2[Option[V],Long]]]](`k₂`,LongMap.empty[Nothing]).+[Deferred[F,Tuple2[Option[V],Long]]](ArrowAssoc[Long](id).->[Deferred[F,Tuple2[Option[V],Long]]](wait)))
ArrowAssoc[State](`state₃`.copy(`state₃`.copy$default$1,`state₃`.copy$default$2,listeners=`newListeners₂`)).->[F[Tuple2[Option[V],Long]]](wait.get)
}
})))(F).flatten(F)))
Stream.eval[F,Tuple2[Option[V],Long]](getNext).flatMap[F,Option[V]](((`x$1₃`:Tuple2[Option[V],Long])=>`x$1₃`match{
caseTuple2(v,lastUpdate)=>
Stream.emit[[x>:Nothing<:Any]=>Pure[x],Option[V]](`v₂`).++[F,Option[V]](go(id,lastSeen=`lastUpdate₄`))
}))(value)
}
defcleanup(`id₂`:Long):F[Unit]=`state₂`.update(((s:State)=>{
val`newListeners₃`:Map[K,LongMap[Deferred[F,Tuple2[Option[V],Long]]]]=s.listeners.get(`k₂`).map[LongMap[Deferred[F,Tuple2[Option[V],Long]]]](((_$33:LongMap[Deferred[F,Tuple2[Option[V],Long]]])=>_$33.-(`id₂`))).filterNot(((_$34:LongMap[Deferred[F,Tuple2[Option[V],Long]]])=>_$34.isEmpty)).fold[Map[K,LongMap[Deferred[F,Tuple2[Option[V],Long]]]]](s.listeners.-(`k₂`))(((_$35:LongMap[Deferred[F,Tuple2[Option[V],Long]]])=>s.listeners.updated[LongMap[Deferred[F,Tuple2[Option[V],Long]]]](`k₂`,_$35)))
s.copy(s.copy$default$1,s.copy$default$2,listeners=`newListeners₃`)
}))
Stream.bracket[F,Long](newId)(((`id₃`:Long)=>cleanup(`id₃`))).flatMap[F,Option[V]](((`id₄`:Long)=>Stream.eval[F,State](`state₂`.get).flatMap[F,Option[V]](((`state₄`:State)=>Stream.emit[[x>:Nothing<:Any]=>Pure[x],Option[V]](`state₄`.value.get(`k₂`)).++[F,Option[V]](go(`id₄`,`state₄`.lastUpdate))))(value)))(value)
}
defset(`v₃`:Option[V]):F[Unit]=$anon.this.update(((_$36:Option[V])=>`v₃`))
defupdate(`f₂`:Function1[Option[V],Option[V]]):F[Unit]=$anon.this.modify[Unit](((`v₄`:Option[V])=>Tuple2.apply[Option[V],Unit](`f₂`.apply(`v₄`),())))
defmodify[U](`f₃`:Function1[Option[V],Tuple2[Option[V],U]]):F[U]=catsSyntaxFlatten[F,U](`state₂`.modify[F[U]](((_$37:State)=>updateAndNotify[U](_$37,`k₂`,`f₃`))))(F).flatten(F)
deftryModify[U](`f₄`:Function1[Option[V],Tuple2[Option[V],U]]):F[Option[U]]=toFlatMapOps[F,Option[F[U]]](`state₂`.tryModify[F[U]](((_$38:State)=>updateAndNotify[U](_$38,`k₂`,`f₄`))))(F).flatMap[Option[U]](((_$39:Option[F[U]])=>toTraverseOps[Option,F[U]](_$39)(catsTraverseForOption).sequence[F,U](refl[F[U]],F)))
deftryUpdate(`f₅`:Function1[Option[V],Option[V]]):F[Boolean]=toFunctorOps[F,Option[Unit]]($anon.this.tryModify[Unit](((a:Option[V])=>Tuple2.apply[Option[V],Unit](`f₅`.apply(a),()))))(F).map[Boolean](((_$40:Option[Unit])=>_$40.isDefined))
defaccess:F[Tuple2[Option[V],Function1[Option[V],F[Boolean]]]]=toFunctorOps[F,Tuple2[State,Function1[State,F[Boolean]]]](`state₂`.access)(F).map[Tuple2[Option[V],Function1[Option[V],F[Boolean]]]](((`x$1₄`:Tuple2[State,Function1[State,F[Boolean]]])=>`x$1₄`match{
caseTuple2(state,set)=>
valsetter:Function1[Option[V],F[Boolean]]=((`newValue₃`:Option[V])=>{
val$8$:Tuple2[State,F[Unit]]=(updateAndNotify[Unit](`state₅`,`k₂`,((_$41:Option[V])=>Tuple2.apply[Option[V],Unit](`newValue₃`,()))):@unchecked)match{
caseTuple2(newState,notifyListeners)=>
Tuple2.apply[State,F[Unit]](`newState₂`,`notifyListeners₂`)
}
val`newState₃`:State=$8$._1
val`notifyListeners₃`:F[Unit]=$8$._2
toFlatMapOps[F,Boolean](set.apply(`newState₃`))(F).flatTap[Unit](((succeeded:Boolean)=>catsSyntaxApplicativeByName[F,Unit](`notifyListeners₃`).whenA(succeeded)(F)))
})
Tuple2.apply[Option[V],Function1[Option[V],F[Boolean]]](`state₅`.value.get(`k₂`),setter)
}))
deftryModifyState[U](`state₆`:cats.data.State[Option[V],U]):F[Option[U]]={
val`f₆`:Function1[Option[V],Eval[Tuple2[Option[V],U]]]=`state₆`.runF.value
$anon.this.tryModify[U](((`v₅`:Option[V])=>`f₆`.apply(`v₅`).value))
}
defmodifyState[U](`state₇`:cats.data.State[Option[V],U]):F[U]={
val`f₇`:Function1[Option[V],Eval[Tuple2[Option[V],U]]]=`state₇`.runF.value
$anon.this.modify[U](((`v₆`:Option[V])=>`f₇`.apply(`v₆`).value))
}
}
(new$anon():SignallingRef[F,Option[V]])
})
}))
}" t="n"class="documentableName ">ofSingleImmutableMap[F[_], K, V](initial: Map[K, V])(implicit F: Concurrent[F]): F[SignallingMapRef[F, K, Option[V]]]
Builds a SignallingMapRef
for effect F
, initialized to the supplied value.
Builds a SignallingMapRef
for effect F
, initialized to the supplied value.
Attributes
- Source:
- Signal.scala