with
     float_Math,
     ada.Strings.unbounded;

package Collada
--
-- Provides a namespace and core types for the Collada package family.
--
is
   -------
   -- Text
   --

   subtype Text is ada.Strings.unbounded.unbounded_String;

   function to_Text (From : in String) return Text
     renames ada.Strings.unbounded.To_unbounded_String;

   function to_String (From : in Text) return String
     renames ada.Strings.unbounded.To_String;


   type Text_array is array (Positive range <>) of Text;


   -------
   -- Math
   --

   -- Collada matrices use column vectors, so the translation vector is the 4th column.

   package Math renames float_Math;


   subtype Float_array      is math.Vector;
   subtype   Int_array      is math.Integers;

   subtype Vector_3         is math.Vector_3;
   subtype Vector_4         is math.Vector_4;

   subtype Matrix_3x3       is math.Matrix_3x3;
   subtype Matrix_4x4       is math.Matrix_4x4;

   type    Matrix_4x4_array is array (Positive range <>) of Matrix_4x4;


   Identity_4x4 : constant math.Matrix_4x4;

   function matrix_Count (From : in Float_array)                        return Natural;
   function get_Matrix   (From : in Float_array;   Which : in Positive) return Matrix_4x4;


   Error : exception;



private

   Identity_4x4 : constant math.Matrix_4x4 := [[1.0, 0.0, 0.0, 0.0],
                                               [0.0, 1.0, 0.0, 0.0],
                                               [0.0, 0.0, 1.0, 0.0],
                                               [0.0, 0.0, 0.0, 1.0]];

end Collada;
