You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
2.5 KiB
135 lines
2.5 KiB
5 years ago
|
//========= 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 <vgui/VGUI.h>
|
||
|
#include "tier1/utlvector.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() );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
|
||
|
#endif // DAR_H
|