#| This file is a part of stoe project. Copyright (c) 2015 Renaud Casenave-Péré (renaud@casenave-pere.fr) |# (uiop:define-package :stoe/maths/types (:use :cl :stoe/core/utils) (:export #:vect #:raw-data #:int2 #:int3 #:int4 #:float2 #:float3 #:float4 #:quaternion #:matrix #:dims #:int22 #:int33 #:int44 #:float22 #:float33 #:float44 #:dimensions #:element-type)) (in-package :stoe/maths/types) (defgeneric dimensions (x)) (defmethod dimensions ((x number)) 1) (defgeneric element-type (x)) (defmethod element-type ((x float)) 'single-float) (defmethod element-type ((x integer)) 'fixnum) (defclass vect () ((array :type (array * (*)) :initarg :array :reader raw-data :documentation "The internal representation of the vector"))) (defclass int2 (vect) ((array :type (array fixnum (2))))) (defclass int3 (vect) ((array :type (array fixnum (3))))) (defclass int4 (vect) ((array :type (array fixnum (4))))) (defclass float2 (vect) ((array :type (array single-float (2))))) (defclass float3 (vect) ((array :type (array single-float (3))))) (defclass float4 (vect) ((array :type (array single-float (4))))) (defclass quaternion (float4) ()) (defclass matrix () ((dims :initarg :dims :reader dimensions :documentation "The dimensions of the matrix") (array :type (array * (*)) :initarg :array :reader raw-data :documentation "The internal representation of the matrix"))) (defclass int22 (matrix) ((array :type (array fixnum (4))))) (defclass int33 (matrix) ((array :type (array fixnum (9))))) (defclass int44 (matrix) ((array :type (array fixnum (16))))) (defclass float22 (matrix) ((array :type (array single-float (4))))) (defclass float33 (matrix) ((array :type (array single-float (9))))) (defclass float44 (matrix) ((array :type (array single-float (16)))))