make a couple words private, use ERROR: instead of throwing strings
							parent
							
								
									8da5f3a82a
								
							
						
					
					
						commit
						f7c322f83a
					
				|  | @ -4,8 +4,10 @@ USING: concurrency.futures concurrency.count-downs sequences | ||||||
| kernel ; | kernel ; | ||||||
| IN: concurrency.combinators | IN: concurrency.combinators | ||||||
| 
 | 
 | ||||||
|  | <PRIVATE | ||||||
| : (parallel-each) ( n quot -- ) | : (parallel-each) ( n quot -- ) | ||||||
|     >r <count-down> r> keep await ; inline |     >r <count-down> r> keep await ; inline | ||||||
|  | PRIVATE> | ||||||
| 
 | 
 | ||||||
| : parallel-each ( seq quot -- ) | : parallel-each ( seq quot -- ) | ||||||
|     over length [ |     over length [ | ||||||
|  | @ -20,7 +22,9 @@ IN: concurrency.combinators | ||||||
| : parallel-filter ( seq quot -- newseq ) | : parallel-filter ( seq quot -- newseq ) | ||||||
|     over >r pusher >r each r> r> like ; inline |     over >r pusher >r each r> r> like ; inline | ||||||
| 
 | 
 | ||||||
|  | <PRIVATE | ||||||
| : future-values dup [ ?future ] change-each ; inline | : future-values dup [ ?future ] change-each ; inline | ||||||
|  | PRIVATE> | ||||||
| 
 | 
 | ||||||
| : parallel-map ( seq quot -- newseq ) | : parallel-map ( seq quot -- newseq ) | ||||||
|     [ curry future ] curry map future-values ; |     [ curry future ] curry map future-values ; | ||||||
|  |  | ||||||
|  | @ -11,14 +11,18 @@ TUPLE: count-down n promise ; | ||||||
| : count-down-check ( count-down -- ) | : count-down-check ( count-down -- ) | ||||||
|     dup n>> zero? [ t swap promise>> fulfill ] [ drop ] if ; |     dup n>> zero? [ t swap promise>> fulfill ] [ drop ] if ; | ||||||
| 
 | 
 | ||||||
|  | ERROR: invalid-count-down-count count ; | ||||||
|  | 
 | ||||||
| : <count-down> ( n -- count-down ) | : <count-down> ( n -- count-down ) | ||||||
|     dup 0 < [ "Invalid count for count down" throw ] when |     dup 0 < [ invalid-count-down-count ] when | ||||||
|     <promise> \ count-down boa |     <promise> \ count-down boa | ||||||
|     dup count-down-check ; |     dup count-down-check ; | ||||||
| 
 | 
 | ||||||
|  | ERROR: count-down-already-done ; | ||||||
|  | 
 | ||||||
| : count-down ( count-down -- ) | : count-down ( count-down -- ) | ||||||
|     dup n>> dup zero? |     dup n>> dup zero? | ||||||
|     [ "Count down already done" throw ] |     [ count-down-already-done ] | ||||||
|     [ 1- >>n count-down-check ] if ; |     [ 1- >>n count-down-check ] if ; | ||||||
| 
 | 
 | ||||||
| : await-timeout ( count-down timeout -- ) | : await-timeout ( count-down timeout -- ) | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
| ! Concurrency library for Factor, based on Erlang/Termite style | ! Concurrency library for Factor, based on Erlang/Termite style | ||||||
| ! concurrency. | ! concurrency. | ||||||
| USING: kernel threads concurrency.mailboxes continuations | USING: kernel threads concurrency.mailboxes continuations | ||||||
| namespaces assocs random accessors ; | namespaces assocs random accessors summary ; | ||||||
| IN: concurrency.messaging | IN: concurrency.messaging | ||||||
| 
 | 
 | ||||||
| GENERIC: send ( message thread -- ) | GENERIC: send ( message thread -- ) | ||||||
|  | @ -52,9 +52,14 @@ TUPLE: reply data tag ; | ||||||
|     [ >r tag>> r> tag>> = ] |     [ >r tag>> r> tag>> = ] | ||||||
|     [ 2drop f ] if ; |     [ 2drop f ] if ; | ||||||
| 
 | 
 | ||||||
|  | ERROR: cannot-send-synchronous-to-self message thread ; | ||||||
|  | 
 | ||||||
|  | M: cannot-send-synchronous-to-self summary | ||||||
|  |     drop "Cannot synchronous send to myself" ; | ||||||
|  | 
 | ||||||
| : send-synchronous ( message thread -- reply ) | : send-synchronous ( message thread -- reply ) | ||||||
|     dup self eq? [ |     dup self eq? [ | ||||||
|         "Cannot synchronous send to myself" throw |         cannot-send-synchronous-to-self | ||||||
|     ] [ |     ] [ | ||||||
|         >r <synchronous> dup r> send |         >r <synchronous> dup r> send | ||||||
|         [ synchronous-reply? ] curry receive-if |         [ synchronous-reply? ] curry receive-if | ||||||
|  |  | ||||||
|  | @ -11,9 +11,10 @@ TUPLE: promise mailbox ; | ||||||
| : promise-fulfilled? ( promise -- ? ) | : promise-fulfilled? ( promise -- ? ) | ||||||
|     mailbox>> mailbox-empty? not ; |     mailbox>> mailbox-empty? not ; | ||||||
| 
 | 
 | ||||||
|  | ERROR: promise-already-fulfilled promise ; | ||||||
| : fulfill ( value promise -- ) | : fulfill ( value promise -- ) | ||||||
|     dup promise-fulfilled? [  |     dup promise-fulfilled? [  | ||||||
|         "Promise already fulfilled" throw |         promise-already-fulfilled | ||||||
|     ] [ |     ] [ | ||||||
|         mailbox>> mailbox-put |         mailbox>> mailbox-put | ||||||
|     ] if ; |     ] if ; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue