///////////////////////////////////////////////////////////////////////////////////////////////////
// OpenGL Mathematics Copyright (c) 2005 - 2008 G-Truc Creation (www.g-truc.net)
///////////////////////////////////////////////////////////////////////////////////////////////////
// Created : 2005-12-21
// Updated : 2005-12-21
// Licence : This source is under MIT License
// File    : glm/gtx/matrix_selection.inl
///////////////////////////////////////////////////////////////////////////////////////////////////

namespace glm
{
/*
	template <typename genType> 
	GLMrowType rowGTX(const genType& m, int index)
	{
		GLMrowType result;
		for(typename genType::size_type i = 0; i < genType::row_size; ++i)
			result[i] = m[i][index];
		return result;
	}

	template <typename genType> 
	GLMcolType columnGTX(const genType& m, int index)
	{
		return m[index];
	}
*/
    template <typename T>
    inline detail::tvec2<T> rowGTX(const detail::tmat2x2<T>& m, int index)
    {
        return detail::tvec2<T>(m[0][index], m[1][index]);
    }

    template <typename T>
    inline detail::tvec3<T> rowGTX(const detail::tmat3x3<T>& m, int index)
    {
        return detail::tvec3<T>(m[0][index], m[1][index], m[2][index]);
    }

    template <typename T>
    inline detail::tvec4<T> rowGTX(const detail::tmat4x4<T>& m, int index)
    {
        return detail::tvec4<T>(m[0][index], m[1][index], m[2][index], m[3][index]);
    }

    template <typename T>
    inline detail::tvec2<T> columnGTX(const detail::tmat2x2<T>& m, int index)
    {
        return m[index];
    }

    template <typename T>
    inline detail::tvec3<T> columnGTX(const detail::tmat3x3<T>& m, int index)
    {
        return m[index];
    }

    template <typename T>
    inline detail::tvec4<T> columnGTX(const detail::tmat4x4<T>& m, int index)
    {
        return m[index];
    }
}
