00001 #pragma once 00002 00003 #include "GeomExport.h" 00004 #include "maxheap.h" 00005 #include "matrix3.h" 00006 00007 #define STACK_DEPTH 32 // default stack depth 00008 00013 class Matrix3Stack: public MaxHeapOperators { 00014 public: 00016 GEOMEXPORT Matrix3Stack(); 00019 GEOMEXPORT Matrix3Stack(int depth); 00021 GEOMEXPORT ~Matrix3Stack(); 00022 00029 BOOL replace(const Matrix3 &m) 00030 { stk[index] = m; return TRUE; } 00036 BOOL push(const Matrix3 &m) 00037 { stk[index++] = m; return index < maxDepth; } 00041 BOOL dup(void) 00042 { stk[index+1] = stk[index]; return ++index < maxDepth; } 00049 BOOL concat(const Matrix3 &m) 00050 { stk[index] = m * stk[index]; return TRUE; } 00052 Matrix3 & get(void) 00053 { return stk[index]; } 00056 Matrix3 & pop(void) 00057 { return stk[index--]; } 00061 BOOL remove(void) 00062 { return --index >= 0; } 00065 BOOL reset(void) 00066 { index = 0; stk[0].IdentityMatrix(); return TRUE; } 00067 00068 private: 00069 int maxDepth; 00070 int index; 00071 Matrix3 * stk; 00072 }; 00073 00074