Skip to content

Instantly share code, notes, and snippets.

@kiwanami
Created October 9, 2010 08:57
Show Gist options
  • Save kiwanami/618038 to your computer and use it in GitHub Desktop.
Save kiwanami/618038 to your computer and use it in GitHub Desktop.
;; generator
(setq fib-list nil)
(setq fib-gen
(lexical-let ((a1 0) (a2 1))
(cc:generator
(lambda (x) (push x fib-list))
(yield a1)
(yield a2)
(while t
(let ((next (+ a1 a2)))
(setq a1 a2
a2 next)
(yield next))))))
(funcall fib-gen)
fib-list
;; thread
(lexical-let
((count 0) (anm "-/|\\-")
(end 50) (pos (point)))
(cc:thread
60
(message "Animation started.")
(while (> end (incf count))
(save-excursion
(when (< 1 count)
(goto-char pos) (delete-char 1))
(insert (char-to-string
(aref anm (% count (length anm)))))))
(save-excursion
(goto-char pos) (delete-char 1))
(message "Animation finished.")))
;; semaphore
(setq smp (cc:semaphore-create 1))
(deferred:nextc (cc:semaphore-aquire smp)
(lambda(x)
(message "go1")))
(deferred:nextc (cc:semaphore-aquire smp)
(lambda(x)
(message "go2")))
(deferred:nextc (cc:semaphore-aquire smp)
(lambda(x)
(message "go3")))
(cc:semaphore-release smp)
(cc:semaphore-waiting-deferreds smp)
(cc:semaphore-release-all smp)
(cc:semaphore-waiting-deferreds smp)
;; Dataflow
(setq dfenv-parent (cc:dataflow-environment))
(cc:dataflow-set dfenv-parent "aaa" 256)
(setq dfenv (cc:dataflow-environment dfenv-parent))
(cc:dataflow-get-sync dfenv "aaa")
(deferred:$
(cc:dataflow-get dfenv "abc")
(deferred:nextc it
(lambda (x) (message "Got abc : %s" x))))
(cc:dataflow-set dfenv "abc" 256)
(cc:dataflow-get-sync dfenv "abc")
(cc:dataflow-clear dfenv "abc")
(cc:dataflow-get-sync dfenv "abc")
(deferred:$
(cc:dataflow-get dfenv '("http://example.com/a.jpg" 300))
(deferred:nextc it
(lambda (x) (message "a.jpg:300 OK %s" x))))
(cc:dataflow-set dfenv '("http://example.com/a.jpg" 300) 'jpeg)
(deferred:$
(deferred:parallel
(cc:dataflow-get dfenv "abc")
(cc:dataflow-get dfenv "def"))
(deferred:nextc it
(lambda (values)
(apply 'message "Got values : %s, %s" values)
(apply '+ values)))
(deferred:nextc it
(lambda (x) (insert (format ">> %s" x)))))
(cc:dataflow-get-waiting-keys dfenv)
(cc:dataflow-get-avalable-pairs dfenv)
(cc:dataflow-set dfenv "abc" 128)
(cc:dataflow-set dfenv "def" 256)
(cc:dataflow-get-avalable-pairs dfenv)
(cc:dataflow-clear-all dfenv)
(cc:dataflow-get-avalable-pairs dfenv)
;; Signal
(progn
(setq parent-channel (cc:signal-channel "parent"))
(cc:signal-connect
parent-channel 'parent-load
(lambda (event) (message "Parent Signal : %s" event)))
(cc:signal-connect
parent-channel t
(lambda (event) (message "Parent Listener : %s" event)))
(setq channel (cc:signal-channel "child" parent-channel))
(cc:signal-connect
channel 'window-load
(lambda (event) (message "Signal : %s" event)))
(cc:signal-connect
channel t
(lambda (event) (message "Listener : %s" event)))
(deferred:$
(cc:signal-connect channel 'window-load)
(deferred:nextc it
(lambda (x) (message "Deferred Signal : %s" x))))
)
(cc:signal-send channel 'window-load "hello signal!")
(cc:signal-send channel 'some "some signal!")
(cc:signal-send parent-channel 'parent-load "parent hello!")
(cc:signal-send parent-channel 'window-load "parent hello!")
(cc:signal-send parent-channel 'some "parent some hello!")
(cc:signal-send-global channel 'some "parent some hello!")
(cc:signal-disconnect-all channel)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment