#include #include #include #include using namespace std; //------------------------------------------- typedef unsigned char Bajt; //------------------------------------------- class NizBajtova { public: unsigned Velicina() const { return _Bajtovi.size(); } void Citaj( istream& udat ) { udat.seekg( 0, ios::end ); unsigned velicina = udat.tellg(); udat.seekg( 0, ios::beg ); _Bajtovi.resize( velicina ); udat.read( _Bajtovi.begin(), velicina ); if( !udat ) throw string( "Nije uspelo citanje!" ); } void Pisi( ostream& idat ) const { idat.write( _Bajtovi.begin(), Velicina() ); if( !idat ) throw string( "Nije uspelo pisanje!" ); } private: vector _Bajtovi; }; //------------------------------------------- class SlozenaTransformacija { public: void Kodiranje( const NizBajtova& u, NizBajtova& i ) const { i = u; } void Dekodiranje( const NizBajtova& u, NizBajtova& i ) const { i = u; } }; //------------------------------------------- class ProgramKodDekod { public: void Priprema( int argc, char** argv ) { if( argc < 4 ) throw string("Upotreba: prg "); _NazivUlazneDatoteke = argv[1]; _NazivIzlazneDatoteke = argv[2]; //_Transformacija = ... } void Obrada() const { ifstream udat( _NazivUlazneDatoteke.c_str(), ios::binary ); if( !udat ) throw string( "Nije uspelo otvaranje ulazne datoteke!" ); ofstream idat( _NazivIzlazneDatoteke.c_str(), ios::binary ); if( !idat ) throw string( "Nije uspelo otvaranje izlazne datoteke!" ); NizBajtova ulaz, izlaz; ulaz.Citaj( udat ); Operacija( ulaz, izlaz ); izlaz.Pisi( idat ); } protected: virtual void Operacija( const NizBajtova& u, NizBajtova& i ) const = 0; SlozenaTransformacija _Transformacija; private: string _NazivUlazneDatoteke; string _NazivIzlazneDatoteke; }; //------------------------------------------- class ProgramKodiranje : public ProgramKodDekod { protected: void Operacija( const NizBajtova& u, NizBajtova& i ) const { _Transformacija.Kodiranje( u, i ); } }; //------------------------------------------- class ProgramDekodiranje : public ProgramKodDekod { protected: void Operacija( const NizBajtova& u, NizBajtova& i ) const { _Transformacija.Dekodiranje( u, i ); } }; //------------------------------------------- main( int argc, char** argv ) { try { ProgramKodiranje p; // ProgramDekodiranje p; p.Priprema( argc, argv ); p.Obrada(); } catch( string& s ){ cerr << "GRESKA: " << s << endl; } }