mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-09-20 23:18:00 +03:00
clay: change fuse request
This commit is contained in:
parent
6917aabde5
commit
9d7afd10ee
@ -764,7 +764,8 @@
|
|||||||
== ::
|
== ::
|
||||||
$: %fuse :: mega merge
|
$: %fuse :: mega merge
|
||||||
des=desk :: target desk
|
des=desk :: target desk
|
||||||
srcs=(list [beak germ]) :: sources
|
ful=(list beak) :: source desks
|
||||||
|
gim=(list germ) :: strategies
|
||||||
==
|
==
|
||||||
[%mont pot=term bem=beam] :: mount to unix
|
[%mont pot=term bem=beam] :: mount to unix
|
||||||
[%dirk des=desk] :: mark mount dirty
|
[%dirk des=desk] :: mark mount dirty
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
+$ cult (jug wove duct)
|
+$ cult (jug wove duct)
|
||||||
:: State for ongoing %fuse merges - the list maintains the ordering
|
:: State for ongoing %fuse merges - the list maintains the ordering
|
||||||
:: and the map stores the data needed to merge
|
:: and the map stores the data needed to merge
|
||||||
+$ melt [(list [beak germ]) (map [beak germ] (unit dome:clay))]
|
+$ melt [bas=beak con=(list [beak germ]) sto=(map beak (unit dome:clay))]
|
||||||
::
|
::
|
||||||
:: Domestic desk state.
|
:: Domestic desk state.
|
||||||
::
|
::
|
||||||
@ -1049,7 +1049,7 @@
|
|||||||
~
|
~
|
||||||
=/ rus rus:(~(gut by hoy.ruf) her *rung)
|
=/ rus rus:(~(gut by hoy.ruf) her *rung)
|
||||||
%+ ~(gut by rus) syd
|
%+ ~(gut by rus) syd
|
||||||
[lim=~2000.1.1 ref=`*rind qyx=~ dom=*dome per=~ pew=~ fiz=[~ ~]]
|
[lim=~2000.1.1 ref=`*rind qyx=~ dom=*dome per=~ pew=~ fiz=*melt]
|
||||||
:: administrative duct, domestic +rede
|
:: administrative duct, domestic +rede
|
||||||
::
|
::
|
||||||
:+ ~ `hun.rom.ruf
|
:+ ~ `hun.rom.ruf
|
||||||
@ -1969,39 +1969,54 @@
|
|||||||
(emit hen %pass wire %c %warp ali-ship ali-desk `[%sing %v case /])
|
(emit hen %pass wire %c %warp ali-ship ali-desk `[%sing %v case /])
|
||||||
::
|
::
|
||||||
++ make-melt
|
++ make-melt
|
||||||
|= srcs=(list [beak germ])
|
|= [bas=beak con=(list [beak germ])]
|
||||||
^- melt
|
^- melt
|
||||||
:- srcs
|
:+ bas con
|
||||||
%- ~(gas by *(map [beak germ] (unit dome:clay)))
|
%- ~(gas by (~(put by *(map beak (unit dome:clay))) bas *(unit dome:clay)))
|
||||||
(turn srcs |=(a=[beak germ] [a *(unit dome:clay)]))
|
(turn con |=(a=[beak germ] [-.a *(unit dome:clay)]))
|
||||||
::
|
::
|
||||||
++ start-fuse
|
++ start-fuse
|
||||||
|= [srcs=(list [beak germ])]
|
|= [ful=(list beak) gim=(list germ)]
|
||||||
^+ ..start-fuse
|
^+ ..start-fuse
|
||||||
:: use emil here to queue a list of moves
|
:: must have n sources and n-1 gems
|
||||||
:: syd is current desk (target desk)
|
?> =((lent ful) +((lent gim)))
|
||||||
:: what is hen? it's the current duct... can this be reused?
|
|
||||||
=/ moves=(list move)
|
=/ moves=(list move)
|
||||||
%+ turn
|
%+ turn
|
||||||
srcs
|
ful
|
||||||
|= [bec=beak g=germ]
|
|= bec=beak
|
||||||
^- move
|
^- move
|
||||||
=/ wir=wire /fuse/[syd]/(scot %p p.bec)/[q.bec]/(scot r.bec)/[g]
|
=/ wir=wire /fuse/[syd]/(scot %p p.bec)/[q.bec]/(scot r.bec)
|
||||||
[hen %pass wir %c %warp p.bec q.bec `[%sing %v r.bec /]]
|
[hen %pass wir %c %warp p.bec q.bec `[%sing %v r.bec /]]
|
||||||
|
?~ ful
|
||||||
|
!!
|
||||||
|
=/ base=beak i.ful
|
||||||
|
=/ ful=(list beak) t.ful
|
||||||
|
=/ con=(list [beak germ])
|
||||||
|
=| acc=(list [beak germ])
|
||||||
|
|-
|
||||||
|
?~ ful
|
||||||
|
acc
|
||||||
|
?~ gim
|
||||||
|
!!
|
||||||
|
$(acc [[i.ful i.gim] acc], ful t.ful, gim t.gim)
|
||||||
:: we also want to clear the state (fiz) associated with this
|
:: we also want to clear the state (fiz) associated with this
|
||||||
:: merge and print a warning if it's non trivial i.e. we're
|
:: merge and print a warning if it's non trivial i.e. we're
|
||||||
:: starting a new fuse before the previous one terminated.
|
:: starting a new fuse before the previous one terminated.
|
||||||
~& ?~ -.fiz
|
~& ?~ con.fiz
|
||||||
[%starting-fuse srcs]
|
[%starting-fuse base con]
|
||||||
:^ %starting-fuse srcs %discarding-state
|
:* %starting-fuse
|
||||||
:: we don't want to ~& an entire dome
|
base
|
||||||
%- ~(run by +.fiz)
|
con
|
||||||
|=(v=(unit dome:clay) ?~(v %not-received %recieved))
|
%discarding-state
|
||||||
=. fiz (make-melt srcs)
|
:: we don't want to ~& an entire dome
|
||||||
|
%- ~(run by sto.fiz)
|
||||||
|
|=(v=(unit dome:clay) ?~(v %not-received %recieved))
|
||||||
|
==
|
||||||
|
=. fiz (make-melt base con)
|
||||||
(emil moves)
|
(emil moves)
|
||||||
::
|
::
|
||||||
++ take-fuse
|
++ take-fuse
|
||||||
|= [[bec=beak g=germ] =riot]
|
|= [bec=beak =riot]
|
||||||
^+ ..take-fuse
|
^+ ..take-fuse
|
||||||
?~ riot
|
?~ riot
|
||||||
~& [%fuse-for syd %missing bec]
|
~& [%fuse-for syd %missing bec]
|
||||||
@ -2009,29 +2024,24 @@
|
|||||||
:: responses we get for the merge will cause take-fuse to crash
|
:: responses we get for the merge will cause take-fuse to crash
|
||||||
=. fiz *melt
|
=. fiz *melt
|
||||||
..take-fuse
|
..take-fuse
|
||||||
?> (~(has by +.fiz) [bec g])
|
?> (~(has by sto.fiz) bec)
|
||||||
=. fiz
|
=. fiz
|
||||||
:- -.fiz
|
:+ bas.fiz con.fiz
|
||||||
(~(put by +.fiz) [bec g] `!<(dome:clay q.r.u.riot))
|
(~(put by sto.fiz) bec `!<(dome:clay q.r.u.riot))
|
||||||
=/ all-done=flag
|
=/ all-done=flag
|
||||||
%- ~(all by +.fiz)
|
%- ~(all by sto.fiz)
|
||||||
|= res=(unit dome:clay)
|
|= res=(unit dome:clay)
|
||||||
^- flag
|
^- flag
|
||||||
!=(res ~)
|
!=(res ~)
|
||||||
?. all-done
|
?. all-done
|
||||||
..take-fuse
|
..take-fuse
|
||||||
:: do the merge
|
|
||||||
=/ merges=(list [beak germ]) -.fiz
|
|
||||||
:: there's no point to an empty fuse and a single element fuse
|
|
||||||
:: should just be an %only-that merge.
|
|
||||||
?> (gte (lent merges) 2)
|
|
||||||
=| rag=rang
|
=| rag=rang
|
||||||
=/ clean-hut-ran hut.ran
|
=/ clean-hut-ran hut.ran
|
||||||
=/ initial-dome=dome:clay (need (~(got by +.fiz) (snag 0 merges)))
|
=/ initial-dome=dome:clay (need (~(got by sto.fiz) bas.fiz))
|
||||||
=/ continuation-yaki=yaki
|
=/ continuation-yaki=yaki
|
||||||
(~(got by hut.ran) (~(got by hit.initial-dome) let.initial-dome))
|
(~(got by hut.ran) (~(got by hit.initial-dome) let.initial-dome))
|
||||||
=/ parents=(list tako) ~[(~(got by hit.initial-dome) let.initial-dome)]
|
=/ parents=(list tako) ~[(~(got by hit.initial-dome) let.initial-dome)]
|
||||||
=. merges (slag 1 merges)
|
=/ merges con.fiz
|
||||||
|-
|
|-
|
||||||
^+ ..take-fuse
|
^+ ..take-fuse
|
||||||
?~ merges
|
?~ merges
|
||||||
@ -2041,7 +2051,7 @@
|
|||||||
=. hut.ran clean-hut-ran
|
=. hut.ran clean-hut-ran
|
||||||
(park | [%| continuation-yaki(p (flop parents))] rag)
|
(park | [%| continuation-yaki(p (flop parents))] rag)
|
||||||
=/ [bec=beak g=germ] i.merges
|
=/ [bec=beak g=germ] i.merges
|
||||||
=/ ali-dom=dome:clay (need (~(got by +.fiz) bec g))
|
=/ ali-dom=dome:clay (need (~(got by sto.fiz) bec))
|
||||||
=/ result (merge-helper p.bec q.bec g ali-dom `continuation-yaki)
|
=/ result (merge-helper p.bec q.bec g ali-dom `continuation-yaki)
|
||||||
?- -.result
|
?- -.result
|
||||||
%|
|
%|
|
||||||
@ -4228,7 +4238,7 @@
|
|||||||
~&(%fuse-no-desk !!)
|
~&(%fuse-no-desk !!)
|
||||||
=^ mos ruf
|
=^ mos ruf
|
||||||
=/ den ((de now rof hen ruf) our des.req)
|
=/ den ((de now rof hen ruf) our des.req)
|
||||||
abet:(start-fuse:den srcs.req)
|
abet:(start-fuse:den ful.req gim.req)
|
||||||
[mos ..^$]
|
[mos ..^$]
|
||||||
::
|
::
|
||||||
%mont
|
%mont
|
||||||
@ -4567,10 +4577,9 @@
|
|||||||
=* ali-desk=desk i.t.t.t.tea
|
=* ali-desk=desk i.t.t.t.tea
|
||||||
=/ ali-case (rash i.t.t.t.t.tea nuck:so)
|
=/ ali-case (rash i.t.t.t.t.tea nuck:so)
|
||||||
?> ?=([%$ *] ali-case)
|
?> ?=([%$ *] ali-case)
|
||||||
=/ germ (germ i.t.t.t.t.t.tea)
|
|
||||||
=^ mos ruf
|
=^ mos ruf
|
||||||
=/ den ((de now rof hen ruf) our i.t.tea)
|
=/ den ((de now rof hen ruf) our i.t.tea)
|
||||||
abet:(take-fuse:den [[ali-ship ali-desk (case +.ali-case)] germ] p.hin)
|
abet:(take-fuse:den [ali-ship ali-desk (case +.ali-case)] p.hin)
|
||||||
[mos ..^$]
|
[mos ..^$]
|
||||||
::
|
::
|
||||||
?: ?=([%foreign-warp *] tea)
|
?: ?=([%foreign-warp *] tea)
|
||||||
|
Loading…
Reference in New Issue
Block a user