view test/session-info/redit-test-change-session.el @ 42:95301aa3ea2f

*** empty log message ***
author gongo
date Fri, 22 Aug 2008 20:27:01 +0900
parents
children 0b7ba6b2a0f9
line wrap: on
line source

;; defstruct, make-hash-table
(require 'cl)

;;;;;;;;;;;;;;;;;;
;; Queue struct ;;
;;;;;;;;;;;;;;;;;;
(defstruct Queue (front nil) (rear nil))

;; memo
;;  car: return first element of list
;;  cdr: return elements list since the second of list
;;  (ex.)
;;     (car '(rose violet daisy buttercup)) => rose
;;     (cdr '(rose violet daisy buttercup)) => (violet daisy buttercup)

;; enqueue item in queue
(defun enqueue (queue item)
  (let ((new-cell (list item)))
    (if (Queue-front queue)
  	;; update last cell
  	(setf (cdr (Queue-rear queue)) new-cell)
      ;; if queue is empty
      (setf (Queue-front queue) new-cell))
    (setf (Queue-rear queue) new-cell)))

;; dequeue
(defun dequeue (queue)
  (if (Queue-front queue)
      (prog1
  	  (pop (Queue-front queue))
  	(unless (Queue-front queue)
  	  ;; if queue is empty
  	  (setf (Queue-rear queue) nil)))))

(defun dequeue-all (queue)
  "clean queue"
  (while (Queue-front queue)
    (dequeue queue)))

;;;;;;;;;;;;;;;;;;;;;;;;;
;; Session Info struct ;;
;;;;;;;;;;;;;;;;;;;;;;;;;
;; sid: Session ID
;; eid: Editor ID
;; send_cmdlist: rep_command list from user to SessionManager
;; recv_cmdlist: rep_command list from SessionManager to user
(defstruct SessionInfo (sid nil) (eid nil)
  (send_cmdlist nil) (recv_cmdlist nil))

;; create and initialize
(defun test-redit-create-session-info (sid eid)
  (make-SessionInfo :sid sid
		    :eid eid
		    :send_cmdlist (make-Queue)
		    :recv_cmdlist (make-Queue)))

(defun test-redit-get-session-id-from-session-info (sinfo)
  (SessionInfo-sid sinfo))
(defun test-redit-get-editor-id-from-session-info (sinfo)
  (SessionInfo-eid sinfo))
(defun test-redit-get-sendqueue-from-session-info (sinfo)
  (SessionInfo-send_cmdlist sinfo))
(defun test-redit-get-recvqueue-from-session-info (sinfo)
  (SessionInfo-recv_cmdlist sinfo))


;; hash table of SessionInfo

(defvar bufname-to-sid-table (make-hash-table))
(defvar sid-to-session-table (make-hash-table))

(defun test-redit-sinfo-add-buf2sid (bufname sid)
  (setf (gethash bufname bufname-to-sid-table) sid))
(defun test-redit-sinfo-get-buf2sid (bufname)
  (gethash bufname bufname-to-sid-table))
(defun test-redit-sinfo-rm-buf2sid (bufname)
  (remhash bufname bufname-to-sid-table))

(defun test-redit-sinfo-add-sid2sinfo (sid eid sinfo)
  (setf (gethash sid sid-to-session-table) sinfo))
(defun test-redit-sinfo-get-sid2sinfo (sid)
  (gethash sid sid-to-session-table))
(defun test-redit-sinfo-rm-sid2sinfo (sid)
  (remhash sid sid-to-session-table))