classes: use faster closure in class-usages.
							parent
							
								
									231cb79282
								
							
						
					
					
						commit
						bca13622f5
					
				| 
						 | 
					@ -1,8 +1,9 @@
 | 
				
			||||||
! Copyright (C) 2004, 2010 Slava Pestov.
 | 
					! Copyright (C) 2004, 2010 Slava Pestov.
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: accessors assocs combinators definitions graphs kernel
 | 
					USING: accessors assocs combinators definitions kernel
 | 
				
			||||||
make namespaces quotations sequences sets words words.symbol ;
 | 
					make namespaces quotations sequences sets words words.symbol ;
 | 
				
			||||||
FROM: namespaces => set ;
 | 
					FROM: namespaces => set ;
 | 
				
			||||||
 | 
					FROM: graphs => add-vertex remove-vertex ;
 | 
				
			||||||
QUALIFIED: sets
 | 
					QUALIFIED: sets
 | 
				
			||||||
IN: classes
 | 
					IN: classes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -132,7 +133,20 @@ GENERIC: implementors ( class/classes -- seq )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: class-usage ( class -- seq ) update-map get at ;
 | 
					: class-usage ( class -- seq ) update-map get at ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: class-usages ( class -- seq ) [ class-usage ] closure keys ;
 | 
					<PRIVATE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: (closure) ( obj set quot: ( elt -- seq ) -- )
 | 
				
			||||||
 | 
					    2over ?adjoin [
 | 
				
			||||||
 | 
					        [ dip ] keep [ (closure) ] 2curry each
 | 
				
			||||||
 | 
					    ] [ 3drop ] if ; inline recursive
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: closure ( obj quot -- set )
 | 
				
			||||||
 | 
					    HS{ } clone [ swap (closure) ] keep ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PRIVATE>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: class-usages ( class -- seq )
 | 
				
			||||||
 | 
					    [ class-usage keys ] closure sets:members ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: class implementors implementors-map get at sets:members ;
 | 
					M: class implementors implementors-map get at sets:members ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue