196 lines
4.6 KiB
C++
196 lines
4.6 KiB
C++
/// @ref core
|
|
/// @file glm/detail/type_gentype.hpp
|
|
|
|
#pragma once
|
|
|
|
namespace glm
|
|
{
|
|
enum profile
|
|
{
|
|
nice,
|
|
fast,
|
|
simd
|
|
};
|
|
|
|
typedef std::size_t sizeType;
|
|
|
|
namespace detail
|
|
{
|
|
template
|
|
<
|
|
typename VALTYPE,
|
|
template <typename> class TYPE
|
|
>
|
|
struct genType
|
|
{
|
|
public:
|
|
enum ctor{null};
|
|
|
|
typedef VALTYPE value_type;
|
|
typedef VALTYPE & value_reference;
|
|
typedef VALTYPE * value_pointer;
|
|
typedef VALTYPE const * value_const_pointer;
|
|
typedef TYPE<bool> bool_type;
|
|
|
|
typedef sizeType size_type;
|
|
static bool is_vector();
|
|
static bool is_matrix();
|
|
|
|
typedef TYPE<VALTYPE> type;
|
|
typedef TYPE<VALTYPE> * pointer;
|
|
typedef TYPE<VALTYPE> const * const_pointer;
|
|
typedef TYPE<VALTYPE> const * const const_pointer_const;
|
|
typedef TYPE<VALTYPE> * const pointer_const;
|
|
typedef TYPE<VALTYPE> & reference;
|
|
typedef TYPE<VALTYPE> const & const_reference;
|
|
typedef TYPE<VALTYPE> const & param_type;
|
|
|
|
//////////////////////////////////////
|
|
// Address (Implementation details)
|
|
|
|
value_const_pointer value_address() const{return value_pointer(this);}
|
|
value_pointer value_address(){return value_pointer(this);}
|
|
|
|
//protected:
|
|
// enum kind
|
|
// {
|
|
// GEN_TYPE,
|
|
// VEC_TYPE,
|
|
// MAT_TYPE
|
|
// };
|
|
|
|
// typedef typename TYPE::kind kind;
|
|
};
|
|
|
|
template
|
|
<
|
|
typename VALTYPE,
|
|
template <typename> class TYPE
|
|
>
|
|
bool genType<VALTYPE, TYPE>::is_vector()
|
|
{
|
|
return true;
|
|
}
|
|
/*
|
|
template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
|
|
class base
|
|
{
|
|
public:
|
|
//////////////////////////////////////
|
|
// Traits
|
|
|
|
typedef sizeType size_type;
|
|
typedef valTypeT value_type;
|
|
|
|
typedef base<value_type, colT, rowT> class_type;
|
|
|
|
typedef base<bool, colT, rowT> bool_type;
|
|
typedef base<value_type, rowT, 1> col_type;
|
|
typedef base<value_type, colT, 1> row_type;
|
|
typedef base<value_type, rowT, colT> transpose_type;
|
|
|
|
static size_type col_size();
|
|
static size_type row_size();
|
|
static size_type value_size();
|
|
static bool is_scalar();
|
|
static bool is_vector();
|
|
static bool is_matrix();
|
|
|
|
private:
|
|
// Data
|
|
col_type value[colT];
|
|
|
|
public:
|
|
//////////////////////////////////////
|
|
// Constructors
|
|
base();
|
|
base(class_type const & m);
|
|
|
|
explicit base(T const & x);
|
|
explicit base(value_type const * const x);
|
|
explicit base(col_type const * const x);
|
|
|
|
//////////////////////////////////////
|
|
// Conversions
|
|
template <typename vU, uint cU, uint rU, profile pU>
|
|
explicit base(base<vU, cU, rU, pU> const & m);
|
|
|
|
//////////////////////////////////////
|
|
// Accesses
|
|
col_type& operator[](size_type i);
|
|
col_type const & operator[](size_type i) const;
|
|
|
|
//////////////////////////////////////
|
|
// Unary updatable operators
|
|
class_type& operator= (class_type const & x);
|
|
class_type& operator+= (T const & x);
|
|
class_type& operator+= (class_type const & x);
|
|
class_type& operator-= (T const & x);
|
|
class_type& operator-= (class_type const & x);
|
|
class_type& operator*= (T const & x);
|
|
class_type& operator*= (class_type const & x);
|
|
class_type& operator/= (T const & x);
|
|
class_type& operator/= (class_type const & x);
|
|
class_type& operator++ ();
|
|
class_type& operator-- ();
|
|
};
|
|
*/
|
|
|
|
//template <typename T>
|
|
//struct traits
|
|
//{
|
|
// static const bool is_signed = false;
|
|
// static const bool is_float = false;
|
|
// static const bool is_vector = false;
|
|
// static const bool is_matrix = false;
|
|
// static const bool is_genType = false;
|
|
// static const bool is_genIType = false;
|
|
// static const bool is_genUType = false;
|
|
//};
|
|
|
|
//template <>
|
|
//struct traits<half>
|
|
//{
|
|
// static const bool is_float = true;
|
|
// static const bool is_genType = true;
|
|
//};
|
|
|
|
//template <>
|
|
//struct traits<float>
|
|
//{
|
|
// static const bool is_float = true;
|
|
// static const bool is_genType = true;
|
|
//};
|
|
|
|
//template <>
|
|
//struct traits<double>
|
|
//{
|
|
// static const bool is_float = true;
|
|
// static const bool is_genType = true;
|
|
//};
|
|
|
|
//template <typename genType>
|
|
//struct desc
|
|
//{
|
|
// typedef genType type;
|
|
// typedef genType * pointer;
|
|
// typedef genType const* const_pointer;
|
|
// typedef genType const *const const_pointer_const;
|
|
// typedef genType *const pointer_const;
|
|
// typedef genType & reference;
|
|
// typedef genType const& const_reference;
|
|
// typedef genType const& param_type;
|
|
|
|
// typedef typename genType::value_type value_type;
|
|
// typedef typename genType::size_type size_type;
|
|
// static const typename size_type value_size;
|
|
//};
|
|
|
|
//template <typename genType>
|
|
//const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
|
|
|
|
}//namespace detail
|
|
}//namespace glm
|
|
|
|
//#include "type_gentype.inl"
|