-(define (register-components entity components clist)
- (cond ((null? components) clist)
- (else
- (let* ((type (car components))
- (elist (assoc-ref clist type)))
- (register-components entity (cdr components)
- (assoc-set! clist type
- (cond (elist
- (lset-adjoin eq? elist entity))
- (else
- (list entity)))))))))
-
-(define (unregister-components entity components clist)
- (cond ((null? components) clist)
- (else
- (let* ((type (car components))
- (elist (lset-difference eq? (assoc-ref clist type) (list entity))))
- (unregister-components entity (cdr components)
- (cond ((null? elist)
- (assoc-remove! clist type))
- (else
- (assoc-set! clist type elist))))))))
-
-(define (new-entity . new-components)
- (lambda (entities components)
- (let ((key (gensym))
- (nc (normalize-components new-components)))
- (values
- (acons key nc entities)
- (register-components key
- (map (lambda (c) (car c)) nc)
- components)
- key))))
+(define (entity-ref key entity-set)
+ (hash-get-handle (car entity-set) key))
+
+(define (new-entity entity-set . new-components)
+ (receive (new-set new-keys) (bongodb:insert entity-set (normalize-components new-components))
+ (values new-set (car new-keys))))
+
+(define (get-entity entity-set key)
+ (let ((entity (bongodb:find entity-set (bongodb:$eq '_id key))))
+ (and entity (car entity))))