Sim-LIT  2.0
 All Classes Namespaces Files Functions Variables Typedefs
TurnerMixer.h
Go to the documentation of this file.
1 
10 #ifndef CLASS_TURNERMIXER
11 #define CLASS_TURNERMIXER
12 
13 #include <iostream>
14 #include <fstream>
15 #include <sstream>
16 #include <string>
17 #include "ForwardProcessing.h"
18 #include "TurnerMixer.h"
19 
20 using namespace std;
21 
23 
24  bool proceed;
25 
26 
27 public:
28 
29  TurnerMixer(){}
30 
31  ~TurnerMixer(){}
32 
33  int make(vector<DataType *> *list, int width, int height, vector<int> parameters, int nParameters, bool show_data){
41  if(nParameters != 3) return 1;
42  int byteOffset = parameters[0];
43  int packetOffset = parameters[1];
44  int payload = parameters[2];
45  if((byteOffset < 0) || (packetOffset < 0)) return 5;
46  ofstream file;
47  file.open("files/turner.txt",ofstream::out| ofstream::trunc);
48  if(file.is_open()){
49  file << height*width << "\n";
50  int i = 0, j = 0, k = 0, m = 0;
51  for(int h = 0; h < height; h=h+1)
52  {
53  for(int w = 0; w < width; w=w+1)
54  {
55  if(!(m%payload) && k)
56  {
57  i=i+1;
58  m = 0;
59  j = i*packetOffset; // i: número de paquete
60  }
61 
62  int ip = ((j+(m*byteOffset))/height)%height;
63  int jp = (j+(m*byteOffset))%width;
64  int iPos = ((h*width)+w);
65  int fPos = ((ip*width)+jp);
66  DataType * aux = list->at(fPos);
67  list->at(fPos)=list->at(iPos);
68  list->at(iPos)=aux;
69  file << iPos << "-" << fPos << "\n";
70  k=k+1;
71  m=m+1;
72  }
73  }
74  if(show_data)
75  cout << "Turner And Peterson Applied to Image\n";
76  proceed=true;
77  //this->set(1);
78  file.close();
79  }
80  return 0;
81  }
82 
83  int unmake(vector<DataType *> *list, bool show_data){
87  if(proceed){
88  vector<string> array;
89  ifstream file;
90  string line, delimiter="-";
91  int iPos, fPos;
92  string path = "files/turner.txt";
93  file.open(path.c_str());
94  if(file.is_open()){
95  getline(file, line);
96  int width = atoi(line.c_str());
97  for(int x=0;x<width;x++){
98  getline(file, line);
99  array.push_back(line);
100  }
101  for(int x=0;x<width;x++){
102  string s = array.back();
103  array.pop_back();
104  size_t pos=0;
105  string token;
106  pos = s.find(delimiter);
107  token = s.substr(0, pos);
108  iPos = atoi(token.c_str());
109  s.erase(0, pos + delimiter.length());
110  pos = s.find(delimiter);
111  token = s.substr(0, pos);
112  fPos = atoi(token.c_str());
113  s.erase(0, pos + delimiter.length());
114  DataType * aux = list->at(fPos);
115  list->at(fPos)=list->at(iPos);
116  list->at(iPos)=aux;
117  }
118  if(show_data)
119  cout << "Turner And Petterson undo to Image\n";
120  file.close();
121  proceed=false;
122  }
123  }
124  return 0;
125  }
126 
127 };
128 
129 #endif
Clase abstracta que representa la estructura que debe tener todo procesamiento de imagen...
Clase que representa un tipo de dato que será paquetizado.
Definition: DataType.h:18
Clase que implementa el Método de entrelazamiento de Turner.
Definition: TurnerMixer.h:22
int make(vector< DataType * > *list, int width, int height, vector< int > parameters, int nParameters, bool show_data)
Definition: TurnerMixer.h:33
int unmake(vector< DataType * > *list, bool show_data)
Definition: TurnerMixer.h:83