+(defgeneric flush-log (xdump-parser))
+(defgeneric entry-from-vector (xdump-parser class meta-table entry-vector
+ &key array-support-p))
+
+(defmethod get-table ((parser xdump-parser) table-name)
+ (with-slots (index-by-name table-by-index) parser
+ (let* ((table-index (gethash table-name index-by-name))
+ (table (aref table-by-index table-index)))
+ table)))
+
+(defmacro with-parser (parser &body body)
+ `(let ((*current-parser* ,parser))
+ ,@body))
+
+(defun table (table-name &optional (parser *current-parser*))
+ (get-table parser table-name))
+
+(defun checkpoint (&optional (parser *current-parser*))
+ (flush-log parser))
+
+(defmethod get-table-entry ((parser xdump-parser) table-name index)
+ (aref (table-entries (get-table parser table-name)) index))
+
+(defmethod sym-by-value ((parser xdump-parser) table-name value)
+ (with-slots (table-classes-package) parser
+ (let ((value-slot (find-symbol "VALUE" table-classes-package))
+ (name-slot (find-symbol "NAME" table-classes-package))
+ (meta-type-table (get-table parser table-name)))
+ (loop for entry across (table-entries meta-type-table)
+ if (= (slot-value entry value-slot) value)
+ return (slot-value entry name-slot)))))