TFCweb  1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
transformacions.cc
Veure la documentació d'aquest fitxer.
1 
10 /*
11  * Copyright (c) 2012 Toni Corvera
12  *
13  * This file is part of TFCWeb.
14  *
15  * TFCWeb is free software: you can redistribute it and/or modify
16  * it under the terms of the GNU General Public License as published by
17  * the Free Software Foundation, either version 3 of the License, or
18  * (at your option) any later version.
19  *
20  * TFCWeb is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License
26  * along with TFCWeb. If not, see <http://www.gnu.org/licenses/>.
27  */
28 
29 #include <Transformacions.h>
30 
31 #include "comu.h"
32 
33 #include <iostream>
34 #include <fstream>
35 #include <memory>
36 
37 using namespace tfc;
38 using namespace std;
39 
40 #define FILE_DEFLATED __FILE__ ".deflate"
41 
42 int main(int, char **, char **) {
43 
44  // Fitxer de referència. Servidor.cc és el fitxer de codi més gran
45  ifstream ifs("../src/Servidor.cc"); //__FILE__);
46  ofstream ofs_deflated(FILE_DEFLATED);
47  if (ifs.fail() || ofs_deflated.fail()) {
48  assert( !"Error inesperat" );
49  }
50  stringstream ss;
51 
52  // Extracció i escriptura de mostra
53  FuncioExtractoraIstream fx_ifs(ifs);
54  FuncioExtractoraIstream fx_ss(ss);
55  FuncioEscriptoraOstream fs_cout(cout);
56  FuncioEscriptoraOstream fs_ss(ss);
57  FuncioEscriptoraOstream fs_ofs_deflated(ofs_deflated);
58 
59  TransformacioChunked chunked;
60  TransformacioDeflate deflate;
61 
62  AplicadorTransformacio<TransformacioChunked> chunked_ifs_a_cout(fx_ifs, fs_cout);
63  AplicadorTransformacio<TransformacioChunked> chunked_ifs_a_ss(fx_ifs, fs_ss);
64 
65  AplicadorTransformacio<TransformacioDeflate> deflate_ifs_a_ofs(fx_ifs, fs_ofs_deflated);
66  AplicadorTransformacio<TransformacioDeflate> deflate_ifs_a_ss(fx_ifs, fs_ss);
67 
69  cout << boolalpha;
70 
71  // Transformació chunked
72  {
73  cout << "----------------- CHUNKED -----------------" << endl;
74  chunked_ifs_a_cout.aplica();
75  ifs.seekg(0, ios::beg);
76  cout << ">> FINAL DE CHUNKED <<" << endl;
77  }
78 
79  // Transformació chunked inversa (des-transformació)
80  {
81  chunked_ifs_a_ss.aplica(); // Còpia a ss
82  const string txt_chunked = ss.str();
83  ifs.seekg(0, ios::beg);
84  ss.str("");
85  cout << "----------------- CHUNKED INVERS -----------------" << endl;
86  cout << chunked.destransforma(txt_chunked, ok);
87  cout << ">> FINAL DE CHUNKED INVERS. OK: " << ok << " <<" << endl;
88  }
89 
90  // Transformació deflate
91  {
92  cout << "----------------- DEFLATE (" FILE_DEFLATED ") -----------------" << endl;
93  deflate_ifs_a_ofs.aplica();
94  ifs.seekg(0, ios::beg);
95  cout << ">> FINAL DE DEFLATE <<" << endl;
96  }
97 
98  // Transformació deflate inversa
99  {
100  deflate_ifs_a_ss.aplica(); // Còpia a ss
101  const string txt_deflated = ss.str();
102  ifs.seekg(0, ios::beg);
103  ss.str("");
104  cout << "----------------- DEFLATE INVERS (" FILE_DEFLATED ") -----------------" << endl;
105  cout << deflate.destransforma(txt_deflated, ok);
106  cout << ">> FINAL DE DEFLATE INVERS. OK: " << ok << " <<" << endl;
107  }
108 
109  // Transformació deflate amb fitxer no textual
110  {
111  // TODO: re-implementar
112 #if 0 // Codi anterior a neteja:
113  // Sobre fitxer amb dades binàries
114  { // COMPRESSIÓ
115  ifstream ifsbin("URANDOM", ios::in|ios::binary);
116  ofstream ofsbin("URANDOM.deflated", ios::out|ios::binary);
117  FuncioExtractoraIstream in(ifsbin);
118  FuncioEscriptoraOstream out(ofsbin);
119  TransformacioDeflate tdfbin(in, out);
120  tdfbin.aplica();
121  }
122  { // DESCOMPRESSIÓ
123  ifstream ifsbin("URANDOM", ios::in|ios::binary);
124  stringstream tmpss;
125  FuncioExtractoraIstream in(ifsbin);
126  FuncioEscriptoraOstream out(tmpss);
127  TransformacioDeflate tdfbin(in, out);
128  tdfbin.aplica();
129  // tmpss conté una còpia comprimida de URANDOM
130  ofstream ofsbin_inf("URANDOM.inflated", ios::out|ios::binary);
131  //FuncioExtractoraIstream in(tmpss);
132  //FuncioEscriptoraOstream out_inf(ofsbin_inf);
133  const string buf = tdfbin.destransforma(tmpss.str(), ok);
134  ofsbin_inf.write(buf.c_str(), buf.length());
135  cout << "OK: " << ok << endl;
136  }
137 #endif
138 
139 
140  }
141 
142  return 0;
143 }
144 
145 // vim:set ts=4 et ai: //