| 
									
										
										
										
											2008-12-11 23:48:19 -05:00
										 |  |  | ! Copyright (C) 2008 Slava Pestov. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2014-10-24 20:33:27 -04:00
										 |  |  | USING: accessors assocs destructors kernel sequences threads ;
 | 
					
						
							| 
									
										
										
										
											2008-12-14 21:03:00 -05:00
										 |  |  | IN: io.backend.unix.multiplexers | 
					
						
							| 
									
										
										
										
											2008-12-11 23:48:19 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-24 21:33:27 -04:00
										 |  |  | TUPLE: mx < disposable fd reads writes ;
 | 
					
						
							| 
									
										
										
										
											2008-12-11 23:48:19 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : new-mx ( class -- obj )
 | 
					
						
							| 
									
										
										
										
											2009-08-24 21:33:27 -04:00
										 |  |  |     new-disposable | 
					
						
							| 
									
										
										
										
											2008-12-11 23:48:19 -05:00
										 |  |  |         H{ } clone >>reads | 
					
						
							|  |  |  |         H{ } clone >>writes ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: add-input-callback ( thread fd mx -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: mx add-input-callback reads>> push-at ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: add-output-callback ( thread fd mx -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: mx add-output-callback writes>> push-at ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: remove-input-callbacks ( fd mx -- callbacks )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: mx remove-input-callbacks reads>> delete-at* drop ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: remove-output-callbacks ( fd mx -- callbacks )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: mx remove-output-callbacks writes>> delete-at* drop ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-19 05:51:47 -05:00
										 |  |  | GENERIC: wait-for-events ( nanos mx -- )
 | 
					
						
							| 
									
										
										
										
											2008-12-11 23:48:19 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : input-available ( fd mx -- )
 | 
					
						
							|  |  |  |     reads>> delete-at* drop [ resume ] each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : output-available ( fd mx -- )
 | 
					
						
							|  |  |  |     writes>> delete-at* drop [ resume ] each ;
 |