/*
* mmatrix_with_map.cpp - the client code for multidimension matrix
* map version (testing iterator -> const_iterator conversion).
* (C) Porkolab Zoltan, ELTE, Budapest, Hungary
* (C) 2003
*/
#include <iostream>
#include <string>
#include <algorithm>
#include "mmatrix_with_map.h"
int main()
{
int yourMark(1);
//* 2-es
mmatrix<int>::index i1; // represents the index as N element array
i1.put(3).put(4).put(5); // three dimensions
mmatrix<int> m1(i1); // creates matrix of 3x4x5 of integers 0
mmatrix<double>::index i2;
i2.put(2).put(2); // two dimensions
mmatrix<double> m2(i2); // creates matrix of 2x2 of doubles 0.0
mmatrix<std::string>::index i3;
i3.put(2).put(2).put(5).put(5); // four dimensions
mmatrix<std::string> m3(i3); // creates matrix of 2x2x5x5 of strings ""
if ( sizeof(i3) < 40 && sizeof(m3) < 40 ) // avoid stupid implementations
yourMark = m2.dim(); // dimension of m2 (==2)
//*/
//* 3-as
i1.reset();
i1.put(2).put(3).put(4);
m1.at(i1) = 5; // m1(2,3,4) = 5
i3.reset();
i3.put(0).put(1).put(2).put(3);
m3.at(i3) = "Hello"; // m3(0,1,2,3) = "Hello"
mmatrix<int>::index i4;
i4.put(0).put(0).put(0);
m1.at(i4) = 4; // m1(0,0,0) = 4
yourMark += m1.at(i1) - m1.at(i4);
//*/
//* 4-es
const mmatrix<int> cm = m1;
--m1[i4];
yourMark += cm[i4] - m1[i4];
//*/
//* 5-os
--m1[i1]; // m1(2,3,4) = 4
mmatrix<int>::iterator i = find( m1.begin(), m1.end(), 4);
if ( m1.end() != i ) // hopefully i refer to m1(2,3,4)
++ *i;
yourMark = m1[i1];
// a const_iterator tesztje:
mmatrix<int>::const_iterator ci = i;
std::cout << *ci << std::endl;
//*/
std::cout << "Your mark is " << yourMark << std::endl;
return 0;
}