/***************************************************************************\
*
* File: Matrix.inl
*
* History:
*  3/25/2000: JStall:       Created
*
* Copyright (C) 2000 by Microsoft Corporation.  All rights reserved.
* 
\***************************************************************************/

#if !defined(BASE__Matrix_inl__INCLUDED)
#define BASE__Matrix_inl__INCLUDED
#pragma once

/***************************************************************************\
*****************************************************************************
*
* class Vector3
*
*****************************************************************************
\***************************************************************************/

//------------------------------------------------------------------------------
inline  
Vector3::Vector3()
{

}


//------------------------------------------------------------------------------
inline  
Vector3::Vector3(const Vector3 & src)
{
    m_rgfl[0] = src.m_rgfl[0];
    m_rgfl[1] = src.m_rgfl[1];
    m_rgfl[2] = src.m_rgfl[2];
}


//------------------------------------------------------------------------------
inline  
Vector3::Vector3(float fl0, float fl1, float fl2)
{
    m_rgfl[0] = fl0;
    m_rgfl[1] = fl1;
    m_rgfl[2] = fl2;
}


//------------------------------------------------------------------------------
inline float   
Vector3::operator[](int x) const
{
    AssertMsg((x < 3) && (x >= 0), "Ensure valid index");
    return m_rgfl[x]; 
}


//------------------------------------------------------------------------------
inline float   
Vector3::Get(int x) const
{
    AssertMsg((x < 3) && (x >= 0), "Ensure valid index");
    return m_rgfl[x]; 
}


//------------------------------------------------------------------------------
inline void    
Vector3::Set(int x, float fl)
{
    AssertMsg((x < 3) && (x >= 0), "Ensure valid index");
    m_rgfl[x] = fl;
}


//------------------------------------------------------------------------------
inline void    
Vector3::Set(float flA, float flB, float flC)
{
    m_rgfl[0] = flA;
    m_rgfl[1] = flB;
    m_rgfl[2] = flC;
}


//------------------------------------------------------------------------------
inline void
Vector3::Empty()
{
    m_rgfl[0] = 0.0f;
    m_rgfl[1] = 0.0f;
    m_rgfl[2] = 0.0f;
}


/***************************************************************************\
*****************************************************************************
*
* class Matrix3
*
*****************************************************************************
\***************************************************************************/

//------------------------------------------------------------------------------
Matrix3::Matrix3(bool fInit)
{
    if (fInit) {
        m_rgv[0].Set(1.0f, 0.0f, 0.0f);
        m_rgv[1].Set(0.0f, 1.0f, 0.0f);
        m_rgv[2].Set(0.0f, 0.0f, 1.0f);

        m_fIdentity         = TRUE;
        m_fOnlyTranslate    = TRUE;
    }
}


//------------------------------------------------------------------------------
inline const Vector3 & 
Matrix3::operator[](int y) const
{
    AssertMsg((y < 3) && (y >= 0), "Ensure valid index");
    return m_rgv[y]; 
}


//------------------------------------------------------------------------------
inline float   
Matrix3::Get(int y, int x) const 
{
    return m_rgv[y][x]; 
}


//------------------------------------------------------------------------------
inline void    
Matrix3::Set(int y, int x, float fl)
{ 
    m_rgv[y].Set(x, fl); 

    m_fIdentity         = FALSE;
    m_fOnlyTranslate    = FALSE;
}

#endif // BASE__Matrix_inl__INCLUDED