/* * * Copyright (c) 1994 * Hewlett-Packard Company * */ #ifndef VIDEO_VECTOR_H #define VIDEO_VECTOR_H #include #include "window.H" class VideoVector; class VideoElement { friend class VideoVector; protected: BasicWindow* windowp; int speed; int index; int value; public: VideoElement() : windowp(0) {} VideoElement(VideoElement& x) : windowp(0), value(x.value) {} int operator-(VideoElement x) { return value - x.value; } int operator<(VideoElement x) { return value < x.value; } int operator>(VideoElement x) { return value > x.value; } void operator=(int x) { int s = speed*200; if (windowp) { windowp->erasePoint(index, value); windowp->displayPoint(index, x, "green"); while(s--); } value = x; } void operator=(VideoElement x) { *this = x.value; } }; class VideoVector { friend class VideoElement; protected: VideoElement* buffer; size_t len; BasicWindow window; int speed; public: VideoVector(size_t n, size_t m, int displaySpeed, char* title); ~VideoVector() { delete buffer; } VideoElement* begin() { return buffer; } VideoElement* end() { return buffer + len; } void setSecondaryKey() {} }; VideoVector::VideoVector(size_t n, size_t m, int displaySpeed, char* title) : buffer(new VideoElement[n]), len(n), speed(displaySpeed), window(n, m, title) { for (int i = 0; i < len; i++) { buffer[i].windowp = &window; buffer[i].speed = speed; buffer[i].index = i; } } class VideoVectorS; class VideoElementS { friend class VideoVectorS; protected: BasicWindow* windowp; int index; int value; int secondaryKey; int speed; public: VideoElementS() : windowp(0), secondaryKey(0) {} VideoElementS(VideoElementS& x) : windowp(0), value(x.value), secondaryKey(x.secondaryKey) {} int operator-(VideoElementS x) { return value - x.value; } int operator<(VideoElementS x) { return value < x.value; } int operator>(VideoElementS x) { return value > x.value; } void operator=(int x) { if (windowp) { int s = speed*200; windowp->erasePoint(index, value + 20); while (s--); windowp->displayPoint(index, x + 20, "green"); } value = x; } void operator=(VideoElementS x) { int s = speed*200; if (windowp) { windowp->erasePoint(index, secondaryKey+20); windowp->erasePoint(index, value+20); while (s--); windowp->displayPoint(index, x.value + 20, "green"); if (secondaryKey) windowp->displayPoint(index, x.secondaryKey+20, "orange"); } value = x.value; secondaryKey = x.secondaryKey; } }; class VideoVectorS { protected: VideoElementS* buffer; size_t len; BasicWindow window; int speed; public: VideoVectorS(size_t n, size_t m, int displaySpeed, char* title); ~VideoVectorS() { delete buffer; } VideoElementS* begin() { return buffer; } VideoElementS* end() { return buffer + len; } void setSecondaryKey(); }; VideoVectorS::VideoVectorS(size_t n, size_t m, int displaySpeed, char* title) : buffer(new VideoElementS[n]), len(n), speed(displaySpeed), window(n, m+20, title) { for (int i = 0; i < len; i++) { buffer[i].windowp = &window; buffer[i].speed = speed; buffer[i].index = i; } } void VideoVectorS::setSecondaryKey() { for (int i = 0; i < len; i++) { buffer[i].secondaryKey = i; window.displayPoint(i, i + 20, "orange"); } } #endif