Changeset - a8348263706b
[Not reviewed]
0 1 0
Sergey Pashinin - 11 years ago 2014-06-25 03:42:59
sergey@pashinin.com
Serialize buffer object
1 file changed with 31 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/workgroups-pickel.el
Show inline comments
 
@@ -33,36 +33,51 @@
 
;;; vars
 

	
 
(defvar wg-pickel-identifier '~pickel!~
 
  "Symbol identifying a stream as a pickel.")
 

	
 
(defvar wg-pickel-pickelable-types
 
  '(integer float symbol string cons vector hash-table)
 
  '(integer
 
    float
 
    symbol
 
    string
 
    cons
 
    vector
 
    hash-table
 
    buffer
 
    ;;window-configuration
 
    ;;frame
 
    ;;window
 
    ;;process
 
    )
 
  "Types pickel can serialize.")
 

	
 
(defvar wg-pickel-object-serializers
 
  '((integer    . identity)
 
    (float      . identity)
 
    (string     . identity)
 
    (symbol     . wg-pickel-symbol-serializer)
 
    (cons       . wg-pickel-cons-serializer)
 
    (vector     . wg-pickel-vector-serializer)
 
    (hash-table . wg-pickel-hash-table-serializer))
 
    (hash-table . wg-pickel-hash-table-serializer)
 
    ;;(window-configuration   . wg-pickel-window-configuration-serializer)
 
    (buffer     . wg-pickel-buffer-serializer))
 
  "Alist mapping types to object serialization functions.")
 

	
 
(defvar wg-pickel-link-serializers
 
  '((cons       . wg-pickel-cons-link-serializer)
 
    (vector     . wg-pickel-vector-link-serializer)
 
    (hash-table . wg-pickel-hash-table-link-serializer))
 
  "Alist mapping types to link serialization functions.")
 

	
 
(defvar wg-pickel-object-deserializers
 
  '((s . wg-pickel-deserialize-uninterned-symbol)
 
    (c . wg-pickel-deserialize-cons)
 
    (v . wg-pickel-deserialize-vector)
 
    (h . wg-pickel-deserialize-hash-table))
 
    (h . wg-pickel-deserialize-hash-table)
 
    (b . wg-pickel-deserialize-buffer))
 
  "Alist mapping type keys to object deserialization functions.")
 

	
 
(defvar wg-pickel-link-deserializers
 
  `((c . wg-pickel-cons-link-deserializer)
 
    (v . wg-pickel-vector-link-deserializer)
 
    (h . wg-pickel-hash-table-link-deserializer))
 
@@ -179,12 +194,21 @@
 
        (hash-table-test table)
 
        (hash-table-size table)
 
        (hash-table-rehash-size table)
 
        (hash-table-rehash-threshold table)
 
        (hash-table-weakness table)))
 

	
 
(defun wg-pickel-window-configuration-serializer (wc)
 
  "Return Window configuration WC's serialization."
 
  (list 'wc
 
        1))
 

	
 
(defun wg-pickel-buffer-serializer (buffer)
 
  "Return BUFFER's UID in workgroups buffer list."
 
  (list 'b (wg-add-buffer-to-buf-list buffer)))
 

	
 
(defun wg-pickel-serialize-objects (binds)
 
  "Return a list of serializations of the objects in BINDS."
 
  (let (result)
 
    (wg-dohash (obj id binds result)
 
      (setq result
 
            (nconc (list id (funcall (wg-pickel-object-serializer obj) obj))
 
@@ -248,12 +272,16 @@
 

	
 
(defun wg-pickel-deserialize-hash-table (test size rsize rthresh weakness)
 
  "Return a new hash-table with the specified properties."
 
  (make-hash-table :test test :size size :rehash-size rsize
 
                   :rehash-threshold rthresh :weakness weakness))
 

	
 
(defun wg-pickel-deserialize-buffer (uid)
 
  "Return a restored buffer from it's UID."
 
  (wg-restore-buffer (wg-find-buf-by-uid uid)))
 

	
 
(defun wg-pickel-deserialize-objects (serial-objects)
 
  "Return a hash-table of objects deserialized from SERIAL-OBJECTS."
 
  (let ((binds (make-hash-table)))
 
    (wg-destructuring-dolist ((id obj . rest) serial-objects binds)
 
      (puthash id
 
               (if (atom obj) obj
0 comments (0 inline, 0 general)