@@ -24,15 +24,17 @@ class CompareStacks: public Problem<T,D>{
2424 void runCompare (int buffer = 0 );
2525
2626private:
27-
28- // Stack Functions: defined by user
27+ // Stack Functions: defined by user
2928 virtual D readInput (std::vector<std::string> line) = 0;
3029 virtual std::shared_ptr<T> initStack () = 0;
3130 virtual bool popCondition (D data) = 0;
3231 virtual void popAction (Data<T,D> elt) {};
3332 virtual bool pushCondition (D data) = 0;
3433 virtual void pushAction (Data<T,D> elt) {};
3534
35+ // pop
36+ Data<T,D> popCompare ();
37+
3638 // Stack: Normal Stack for comparison
3739 std::shared_ptr<NormalStack<T,D>> mNormalStack ;
3840};
@@ -50,10 +52,18 @@ CompareStacks<T,D>::CompareStacks(std::string fileName, int size, int space, int
5052/* ==============================================================================
5153 Stack Functions: run, push, pop, top
5254==============================================================================*/
55+ template <class T , class D >
56+ Data<T,D> CompareStacks<T,D>::popCompare(){
57+ std::cout << " Debug CompareStacks::pop 1" << std::endl;
58+ return Problem<T,D>::mStack ->pop (*this );
59+ std::cout << " Debug CompareStacks::pop 2" << std::endl;
60+ }
61+
5362template <class T , class D >
5463void CompareStacks<T,D>::runCompare(int buffer){
5564 Problem<T,D>::initStackIntern ();
5665 while ((Problem<T,D>::mInput .good ())) {
66+ std::streampos position = Problem<T,D>::mInput .tellg ();
5767 for (int i = 1 ; i <= buffer; i++) {
5868 bool bIndex = Problem<T,D>::top (i).mIndex == mNormalStack ->top (i).mIndex ;
5969 bool bData = Problem<T,D>::top (i).mData == mNormalStack ->top (i).mData ;
@@ -67,19 +77,28 @@ void CompareStacks<T,D>::runCompare(int buffer){
6777 }
6878 D data = readInput (line);
6979 Problem<T,D>::mIndex ++; // Might have to move
80+ std::cout << " Debug runCompare 1" << std::endl;
7081 if (Problem<T,D>::emptystack () != mNormalStack ->isempty ()) {
7182 throw " One stack is empty and not the other" ;
7283 }
73- while ( !(Problem<T,D>::emptystack ()) && (popCondition (data)) ) {
74- Data<T,D> elt = Problem<T,D>::pop ();
84+ std::cout << " Debug runCompare 2" << std::endl;
85+ while ( (!(Problem<T,D>::emptystack ())) && (popCondition (data)) ) {
86+ std::cout << " Debug runCompare 2.1" << std::endl;
87+ Data<T,D> elt = popCompare ();
88+ std::cout << " Debug runCompare 2.2" << std::endl;
7589 Data<T,D> eltNormal = mNormalStack ->pop ();
90+ std::cout << " Debug runCompare 2.3" << std::endl;
7691 bool bIndex = elt.mIndex == eltNormal.mIndex ;
7792 bool bData = elt.mData == eltNormal.mData ;
78- if (!bIndex || bData) {
93+ std::cout << " Debug runCompare 2.4" << std::endl;
94+ if (!bIndex || !bData) {
7995 throw " The two elements popped are different" ;
8096 }
97+ std::cout << " Debug runCompare 2.5" << std::endl;
8198 popAction (elt);
99+ std::cout << " Debug runCompare 2.6" << std::endl;
82100 }
101+ std::cout << " Debug runCompare 3" << std::endl;
83102 if (pushCondition (data)) {
84103 Data<T,D> elt (Problem<T,D>::mIndex ,data);
85104 pushAction (elt);
0 commit comments