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

95 lines
2.6 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Holds the enumerated list of default cursors
//
// $NoKeywords: $
//=============================================================================//
#ifndef DAR_H
#define DAR_H
#ifdef _WIN32
#pragma once
#endif
#include <stdlib.h>
#include <string.h>
#include "../tier1/utlvector.h"
#include "VGUI.h"
#include "../tier0/memdbgon.h"
namespace vgui {
//-----------------------------------------------------------------------------
// Purpose: Simple lightweight dynamic array implementation
//-----------------------------------------------------------------------------
template <class ELEMTYPE>
class Dar : public CUtlVector<ELEMTYPE> {
typedef CUtlVector<ELEMTYPE> BaseClass;
public:
Dar() {}
Dar(int initialCapacity) : BaseClass(0, initialCapacity) {}
public:
void SetCount(int count) { this->EnsureCount(count); }
int GetCount() { return this->Count(); }
int AddElement(ELEMTYPE elem) { return this->AddToTail(elem); }
void MoveElementToEnd(ELEMTYPE elem) {
if (this->Count() == 0) return;
// quick check to see if it's already at the end
if (this->Element(this->Count() - 1) == elem) return;
int idx = this->Find(elem);
if (idx == this->InvalidIndex()) return;
this->Remove(idx);
this->AddToTail(elem);
}
// returns the index of the element in the array, -1 if not found
int FindElement(ELEMTYPE elem) { return this->Find(elem); }
bool HasElement(ELEMTYPE elem) {
if (this->FindElement(elem) != this->InvalidIndex()) {
return true;
}
return false;
}
int PutElement(ELEMTYPE elem) {
int index = this->FindElement(elem);
if (index >= 0) {
return index;
}
return this->AddElement(elem);
}
// insert element at index and move all the others down 1
void InsertElementAt(ELEMTYPE elem, int index) {
this->InsertBefore(index, elem);
}
void SetElementAt(ELEMTYPE elem, int index) {
this->EnsureCount(index + 1);
this->Element(index) = elem;
}
void RemoveElementAt(int index) { this->Remove(index); }
void RemoveElementsBefore(int index) {
if (index <= 0) return;
this->RemoveMultiple(0, index - 1);
}
void RemoveElement(ELEMTYPE elem) { this->FindAndRemove(elem); }
void *GetBaseData() { return this->Base(); }
void CopyFrom(Dar<ELEMTYPE> &dar) {
this->CopyArray(dar.Base(), dar.Count());
}
};
} // namespace vgui
#include "../tier0/memdbgoff.h"
#endif // DAR_H