git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8544 626c5289-ae23-0410-ae9c-e8d60b6d4f22
54 lines
1.1 KiB
C++
54 lines
1.1 KiB
C++
/* File : example.h */
|
|
|
|
// A simple exception
|
|
class EmptyError { };
|
|
class FullError {
|
|
public:
|
|
int maxsize;
|
|
FullError(int m) : maxsize(m) { }
|
|
};
|
|
|
|
#if defined(_MSC_VER)
|
|
#pragma warning(disable: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
|
|
#endif
|
|
|
|
template<typename T> class Queue {
|
|
int maxsize;
|
|
T *items;
|
|
int nitems;
|
|
int last;
|
|
public:
|
|
Queue(int size) {
|
|
maxsize = size;
|
|
items = new T[size];
|
|
nitems = 0;
|
|
last = 0;
|
|
}
|
|
~Queue() {
|
|
delete [] items;
|
|
}
|
|
void enqueue(T x) throw(FullError) {
|
|
if (nitems == maxsize) {
|
|
throw FullError(maxsize);
|
|
}
|
|
items[last] = x;
|
|
last = (last + 1) % maxsize;
|
|
nitems++;
|
|
}
|
|
T dequeue() {
|
|
T x;
|
|
if (nitems == 0) throw EmptyError();
|
|
x = items[(last + maxsize - nitems) % maxsize];
|
|
nitems--;
|
|
return x;
|
|
}
|
|
int length() {
|
|
return nitems;
|
|
}
|
|
};
|
|
|
|
|
|
#if defined(_MSC_VER)
|
|
#pragma warning(default: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
|
|
#endif
|
|
|