diff options
author | Thomas Günther <tom@toms-cafe.de> | 2005-05-15 00:18:18 +0200 |
---|---|---|
committer | Thomas Günther <tom@toms-cafe.de> | 2005-05-15 00:18:18 +0200 |
commit | 1b80a09e835a6cd68d4160f9799a7268e54a5b53 (patch) | |
tree | fa5f92848ed602216ed76ed84980921c9af95a07 /spider.h | |
download | vdr-plugin-spider-1b80a09e835a6cd68d4160f9799a7268e54a5b53.tar.gz vdr-plugin-spider-1b80a09e835a6cd68d4160f9799a7268e54a5b53.tar.bz2 |
Initial versionv0.1.0
Diffstat (limited to 'spider.h')
-rw-r--r-- | spider.h | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/spider.h b/spider.h new file mode 100644 index 0000000..782dd5a --- /dev/null +++ b/spider.h @@ -0,0 +1,172 @@ +/* + * Spider-Arachnid: A plugin for the Video Disk Recorder + * + * See the README file for copyright information and how to reach the author. + * + * $Id$ + */ + +#ifndef VDR_SPIDER_H +#define VDR_SPIDER_H + +#define USE_TEMPLATES_FROM_STL + +#ifdef USE_TEMPLATES_FROM_STL + +#include <vector> +#define Array std::vector +#define Vector std::vector + +#else // use own templates + +/** --- template class Array ----------------------------------------------- **/ + +template <class T> +class Array +{ +protected: + T* array; + int count; +public: + + /** Constructor */ + Array(int length) + { + array = new T[length]; + count = length; + } + + /** Destructor */ + ~Array() + { + delete[] array; + } + + /** Reference to an item of the array */ + T& operator[](int p) + { + return array[p]; + } + + /** Reference to an item of the array */ + const T& operator[](int p) const + { + return array[p]; + } + + /** Length of the array */ + unsigned int size() const + { + return count; + } + + /** Is the array empty? */ + bool empty() const + { + return count == 0; + } +}; + + +/** --- template class Vector ---------------------------------------------- **/ + +template <class T> +class Vector +{ +protected: + T* vector; + int max; + int count; + int steps; + + /** Resize the vector to the new length */ + void resize(int m) + { + if (m < steps) + m = steps; + else + m = ((m - 1) / steps + 1) * steps; + if (m != max) + { + T* v = new T[m]; + for (int i = 0; i < count; ++i) + v[i] = vector[i]; + delete[] vector; + vector = v; + max = m; + } + } + +public: + + /** Contructor */ + Vector(int stepCount = 10) + { + vector = new T[stepCount]; + max = steps = stepCount; + count = 0; + } + + /** Destructor */ + ~Vector() + { + delete[] vector; + } + + /** Reference to an item of the vector */ + T& operator[](int p) + { + return vector[p]; + } + + /** Reference to an item of the vector */ + const T& operator[](int p) const + { + return vector[p]; + } + + /** Reference to an item of the vector */ + T& back() + { + return vector[count - 1]; + } + + /** Reference to an item of the vector */ + const T& back() const + { + return vector[count - 1]; + } + + /** Current length of the vector */ + unsigned int size() const + { + return count; + } + + /** Is the vector empty? */ + bool empty() const + { + return count == 0; + } + + /** Add an item to the end of the vector */ + void push_back(const T& item) + { + resize(count + 1); + vector[count] = item; + ++count; + } + + /** Remove an item from the end of the vector */ + void pop_back() + { + if (count > 0) + { + --count; + resize(count); + } + } +}; +#endif + +#endif // VDR_SPIDER_H |