tge/lib/maxsdk40/ptrvec.h
2025-02-17 23:17:30 -06:00

63 lines
2.0 KiB
C++
Executable File

/**********************************************************************
*<
FILE: ptrvec.h
DESCRIPTION: An variable length array of pointers
CREATED BY: Dan Silva
HISTORY:
*> Copyright (c) 1994, All Rights Reserved.
**********************************************************************/
#ifndef __PTRVEC__H
#define __PTRVEC__H
class PtrVector {
protected:
int size;
int nused;
void** data;
PtrVector() { size = nused = 0; data = NULL; }
UtilExport ~PtrVector();
UtilExport PtrVector(const PtrVector& v);
UtilExport PtrVector& operator=(const PtrVector& v);
UtilExport void append(void * ptr , int extra);
UtilExport void insertAt(void * ptr , int at, int extra);
UtilExport void* remove(int i);
UtilExport void* removeLast();
void* operator[](int i) const { return data[i]; }
void*& operator[](int i) { return data[i]; }
public:
UtilExport void reshape(int i); // sets capacity
UtilExport void setLength(int i); // sets length, capacity if necessary
UtilExport void clear(); // deletes the ptr array, but not the objects
void shrink() { reshape(nused); }
int length() const { return nused; }
int capacity() const { return size; }
};
template <class T> class PtrVec: public PtrVector {
public:
PtrVec():PtrVector() {}
T* operator[](int i) const { return (T*)PtrVector::operator[](i); }
T*& operator[](int i) { return (T*&)PtrVector::operator[](i); }
PtrVec<T>& operator=(const PtrVec<T>& v) { return (PtrVec<T>&)PtrVector::operator=(v); }
void append(T *ptr, int extra = 10) { PtrVector::append(ptr,extra); }
void insertAt(T* ptr, int at, int extra=10) { PtrVector::insertAt(ptr,at,extra); }
T* remove(int i) { return (T *)PtrVector::remove(i); }
T* removeLast() { return (T *)PtrVector::removeLast(); }
void deleteAll(); // deletes all the objects
};
template <class T>
void PtrVec<T>::deleteAll() {
while (length()) {
T* p = removeLast();
delete p;
}
}
#endif