handle most functions
authorD Herring <dherring@at.tentpost.dot.com>
Thu, 7 Apr 2011 03:31:16 +0000 (23:31 -0400)
committerD Herring <dherring@at.tentpost.dot.com>
Thu, 7 Apr 2011 03:31:16 +0000 (23:31 -0400)
read-functions.lisp
types.lisp

index 9298596..a4eb24c 100644 (file)
 
     (concatenate 'string chars)))
 
+(defun string-list (string)
+  (let (result start (end 0))
+    (do () (nil)
+      (setf start (position-if-not (lambda (x) (char= x #\Space)) string :start end))
+      (setf end (and start (position #\Space string :start start)))
+
+      (when start
+        (push (subseq string start end) result))
+
+      (unless end
+        (return-from string-list (reverse result))))))
+
 
 ;; need to extend for non-pointer types
 ;; remove const, trim whitespace, recognize built-in types, ...
             (position #\[ string))
       ;; don't even need to remove the const keyword...
     (return-from parse-type :pointer))
-  ;; todo: trim whitespace, recognize built-in types, and canonicalize others
-  string)
+  (let ((tokens (string-list string))
+        unsigned)
+    (when (equal "unsigned" (car tokens))
+      (setf unsigned t)
+      (pop tokens))
+    (cond
+      ((and unsigned (not tokens))
+       :unsigned-int)
+      ((equal "char" (car tokens))
+       (if unsigned
+           :unsigned-char
+           :char))
+      ((equal "int" (car tokens))
+       (if unsigned
+           :unsigned-int
+           :int))
+      ((equal "float" (car tokens))
+       :float)
+      ((equal "double" (car tokens))
+       :double)
+      ((and (not unsigned) (= 1 (length tokens)))
+       (normal-symbol (car tokens)))
+      (t (error "unknown type: ~A" string)))))
 
 (defun split-param (string &optional no-normal)
   "return (name type)"
index 9372cb3..848922b 100644 (file)
@@ -5,6 +5,8 @@
 (cffi:defctype hsize-t :unsigned-long-long)
 (cffi:defctype haddr-t :uint64) ; possibly platform-specific -- see H5public.h
 (cffi:defctype htri-t :int)
+(cffi:defctype h5z-filter-t :int)
+(cffi:defctype size-t :uint64) ; definitely platform-specific
 
 #|
 On review, H5OPEN and H5CHECK define most of the intersting constants.