115 lines
3.0 KiB
C++
115 lines
3.0 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
|