This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

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