hl2_src-leak-2017/src/public/disp_vertindex.h

151 lines
2.9 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef DISP_VERTINDEX_H
#define DISP_VERTINDEX_H
#ifdef _WIN32
#pragma once
#endif
#include "tier0/dbg.h"
// ------------------------------------------------------------------------ //
// Helper class used for indexing vertices in the 2D grid.
// ------------------------------------------------------------------------ //
class CVertIndex
{
public:
CVertIndex();
CVertIndex( short ix, short iy );
void Init( short ix, short iy );
short& operator[]( short i );
short const& operator[]( short i ) const;
void operator+=( CVertIndex const &other );
void operator-=( CVertIndex const &other );
CVertIndex operator+( CVertIndex const &other ) const;
CVertIndex operator-( CVertIndex const &other ) const;
void operator<<=( int shift );
void operator>>=( int shift );
bool operator==( CVertIndex const &other ) const;
bool operator!=( CVertIndex const &other ) const;
public:
short x, y;
};
// ------------------------------------------------------------------ //
// Helper functions.
// ------------------------------------------------------------------ //
inline CVertIndex BuildOffsetVertIndex(
CVertIndex const &nodeIndex,
CVertIndex const &offset,
int mul )
{
return CVertIndex( nodeIndex.x + offset.x * mul, nodeIndex.y + offset.y * mul );
}
// ------------------------------------------------------------------ //
// CVertIndex inlines.
// ------------------------------------------------------------------ //
inline CVertIndex::CVertIndex()
{
}
inline CVertIndex::CVertIndex( short ix, short iy )
{
x = ix;
y = iy;
}
inline void CVertIndex::Init( short ix, short iy )
{
x = ix;
y = iy;
}
inline short& CVertIndex::operator[]( short i )
{
Assert( i >= 0 && i <= 1 );
return ((short*)this)[i];
}
inline short const& CVertIndex::operator[]( short i ) const
{
Assert( i >= 0 && i <= 1 );
return ((short*)this)[i];
}
inline void CVertIndex::operator+=( CVertIndex const &other )
{
x += other.x;
y += other.y;
}
inline void CVertIndex::operator-=( CVertIndex const &other )
{
x -= other.x;
y -= other.y;
}
inline CVertIndex CVertIndex::operator+( CVertIndex const &other ) const
{
return CVertIndex( x + other.x, y + other.y );
}
inline CVertIndex CVertIndex::operator-( CVertIndex const &other ) const
{
return CVertIndex( x - other.x, y - other.y );
}
inline void CVertIndex::operator<<=( int shift )
{
x <<= shift;
y <<= shift;
}
inline void CVertIndex::operator>>=( int shift )
{
x >>= shift;
y >>= shift;
}
inline bool CVertIndex::operator==( CVertIndex const &other ) const
{
return x==other.x && y==other.y;
}
inline bool CVertIndex::operator!=( CVertIndex const &other ) const
{
return x!=other.x || y!=other.y;
}
#endif // DISP_VERTINDEX_H