-*- mode: org; mode: auto-fill -*-

* Version 1.0
*** TODO Porting
    Who woulda thunk people want to port this?
***** Guidelines & Principles
******* No #+sbcl #-sbcl in source files that exist for other reasons than portability.
******* Nikodemus will not maintain portability: SBCL port will be the canonical one.
******* Uglified code is allowed in shared files if it makes things faster for SBCL.
******* Uglified code is not allowed in shared if it makes code faster for implementation X.
	(Put it in an implementation specific file instead.)
***** DONE add ports/sbcl.lisp
******* DONE Add file to build with feature dep.
******* DONE define SB-CGA::DEFKNOWN as an empty wrapper around SB-C:DEFKNOWN, etc.
***** DONE add ports/<other-impl>.lisp
      These files will define appropriate versions of SB-CGA::DEFKNOWN, etc.
***** DONE restructure vm1.lisp & vm2.lisp for portability
      Probably add vm-<impl>.lisp which should contain the DEFINE-VOP
      equivalents, so that the load-order would be something like
      fndb.lisp (defknowns for the whole system), vm-<impl>.lisp
      (define-vop equivalents for ports that have them),
      vm-common.lisp (stuff in vm2.lisp, mostly).
***** TODO Generic port.
      Looking at ccl.lisp, aside from the NaN issues a generic port should not
      be too hard. To work around the unportability of NaN a generic port could maybe
      use NIL for NaN and most-positive/negative-single-float for infinities.
***** TODO Switch to plain RT or another test framework.
***** TODO Rename to CL-CGA, maybe
      Iff there are at least two ports with maintainers that use them
      and will probably continue to do so.
*** DONE Defsystem
*** DONE Defpackage
*** WIP Manual
***** DONE Format & docstring extraction.
***** WIP Writing
******* WIP Overview
       	What SB-CGA is and isn't. What sort of things may change if you use
       	the repo directly. Design choises relating to single/double floats.
******* WIP Vectors
******** DONE docstrings
******** TODO Using dynamic-extent
******** TODO optimizations done
******* WIP Matrices
******** DONE docstrings
******* WIP Root solvers
******** DONE docstrings
******** TODO new roots
******* DONE Miscellany
*** WIP Root Solvers
***** DONE QUADRATIC-ROOTS-ABOVE
***** DONE QUADRATIC-ROOTS
***** DONE CUBIC-ROOTS-ABOVE
***** DONE CUBIC-ROOTS
***** TODO QUADRIC-ROOTS-ABOVE
***** TODO QUADRIC-ROOTS
*** TODO VEC
***** DONE VEC type
***** TODO Additional operations
******* DONE NORMALIZED-VEC
******* DONE NORMALIZED-CROSS-PRODUCT
******* TODO NORMALIZED-TRANSFORM-POINT
	The reason these seem worthwhile is that they avoid memory
	traffic -- but it is probably not a good idea to expose
	them as part of the interface!
******* DONE ADJUST-VEC
******* TODO Implement VEC-MIN/MAX using MINPS/MAXPS.
******* TODO Tests for these
***** DONE Predicates
******* DONE Tests
******* DONE VECP
******* DONE POINTP
******* DONE VECTOR3P
******* DONE VEC=
***** DONE Constructors & copiers
******* DONE Tests
******* DONE ALLOC-VEC
******* DONE VEC
******* DONE COPY-VEC, %COPY-VEC
******* DONE POINT
******* DONE VECTOR3
******* DONE POINT->VECTOR3
******* DONE VECTOR3->POINT
***** DONE Arithmetic
******* DONE VEC+, %VEC+
******* DONE VEC-, %VEC-
******* DONE VEC*, %VEC*
******* DONE VEC/, %VEC/
******* DONE DOT-PRODUCT
******* DONE HADAMARD-PRODUCT, %HADAMARD-PRODUCT
******* DONE VEC-LENGTH
******* DONE VEC-LERP
******* DONE NORMALIZE, %NORMALIZE
******* DONE VEC-MIN, VEC-MAX
******* DONE CROSS-PRODUCT
*** TODO MATRIX
***** TODO MATRIX-, MATRIX+
***** TODO Tests
***** DONE TRANSFORM-VEC, %TRANSFORM-VEC
***** DONE MATRIX type
***** DONE MREF
***** DONE MATRIXP
***** WIP MATRIX* (variable arity)
****** TODO MATRIX x scalar 
***** DONE MATRIX
***** DONE MAKE-TRANSLATION-MATRIX
***** DONE MAKE-SCALING-MATRIX
***** DONE MAKE-ROTATION-MATRIX
***** DONE MAKE-REORIENTING-MATRIX
***** DONE TRANSPOSE-MATRIX
***** DONE INVERSE-MATRIX (orthogonal and affine only)
***** DONE MAKE-ZERO-MATRIX
***** DONE MAKE-IDENTIY-MATRIX
***** DONE MATRIX=

*** DONE Compiler macros to transform nested operations for less consing.
*** TODO Consider bang-style public API
* Version 2.0
*** TODO Separate transform type, used double-floats in matrices.
*** TODO Variable arity in vector arithmetic without memory traffic for intermediate results