Sim-LIT  2.0
 All Classes Namespaces Files Functions Variables Typedefs
functions.h
1 #include <string>
2 #include <iostream>
3 
4 bool isNumber(char x){
5  if(x=='0')
6  return true;
7  if(x=='1')
8  return true;
9  if(x=='2')
10  return true;
11  if(x=='3')
12  return true;
13  if(x=='4')
14  return true;
15  if(x=='5')
16  return true;
17  if(x=='6')
18  return true;
19  if(x=='7')
20  return true;
21  if(x=='8')
22  return true;
23  if(x=='9')
24  return true;
25  return false;
26 }
27 
28 void readArguments(int n, char const *args[]){
29  int i=1;
30  string argument;
31  while(i<n){
32  argument=args[i];
33  if(!argument.compare(IMAGE_NAME)){
34  if((i+1)<n && args[i+1][0]!='-'){
35  src = args[i+1];
36  i+=2;
37  }
38  else
39  i=i+1;
40  }
41  if(!argument.compare(WORK_DIR)){
42  if((i+1)<n && args[i+1][0]!='-'){
43  folder = args[i+1];
44  i+=2;
45  }
46  else
47  i=i+1;
48  }
49  if(!argument.compare(FORWARD_METHOD)){
50  if((i+1)<n && args[i+1][0]!='-' && isNumber(args[i+1][0])){
51  i=i+1;
52  int amount_forward_processing=atoi(args[i]);
53  int x=1;
54  i=i+1;
55  while(x<=amount_forward_processing && i<n && args[i][0]!='-'){
56  int nArguments = -1;
57  if(isNumber(args[i+1][0]))
58  nArguments = atoi(args[i+1]);
59  vector<int> argv;
60  for(int c=1;c<=nArguments;c++){
61  if(isNumber(args[i+1+c][0]))
62  argv.push_back(atoi(args[i+1+c]));
63  }
64  string fpname = args[i];
65  ForwardProcessing* fpr = ForwardProcessingCreator::create(fpname);
66  if(fpr!=NULL && nArguments==argv.size()){
67  fp_name.push_back(fpname);
68  fp.push_back(fpr);
69  fp_arguments.push_back(argv);
70  fp_narguments.push_back(nArguments);
71  }
72  x=x+1;
73  i=i+argv.size()+2;
74  }
75  }
76  else
77  i=i+1;
78  }
79  if(!argument.compare(WIDTH_BLOCK)){
80  if((i+1)<n && args[i+1][0]!='-' && isNumber(args[i+1][0])){
81  wblock = atoi(args[i+1]);
82  i+=2;
83  }
84  else
85  i=i+1;
86  }
87  if(!argument.compare(HEIGHT_BLOCK)){
88  if((i+1)<n && args[i+1][0]!='-' && isNumber(args[i+1][0])){
89  hblock = atoi(args[i+1]);
90  i+=2;
91  }
92  else
93  i=i+1;
94  }
95  if(!argument.compare(PACKETIZER_METHOD)){
96  if((i+2)<n && args[i+1][0]!='-' && isNumber(args[i+1][0])){
97  package_size = atoi(args[i+1]);
98  i=i+1;
99  string pname = args[i+1];
100  pktz = PacketizerCreator::create(pname);
101  if(pktz==NULL)
102  pktz = new NormalPacketizer();
103  i+=2;
104  }
105  else{
106  pktz = new NormalPacketizer();
107  i=i+1;
108  }
109  }
110  if(!argument.compare(CHANNEL_METHOD)){
111  if((i+1)<n && args[i+1][0]!='-'){
112  i=i+1;
113  string fpname = args[i];
114  if((i+1)<n && args[i+1][0]!='-' && isNumber(args[i+1][0])){
115  i=i+1;
116  int x = atoi(args[i]);
117  int c=0;
118  vector<string> argu;
119  i=i+1;
120  while(c<x && i<n && args[i][0]!='-'){
121  argu.push_back(args[i+c]);
122  c=c+1;
123  }
124  i=i+c;
125  if(argu.size()==x){
126  Channel* chn = ChannelCreator::create(fpname, argu);
127  if(chn!=NULL){
128  chnl=chn;
129  }
130  else{
131  vector<string> str;
132  str.push_back("loss_random.loss");
133  chnl = new ChannelFile(str);
134  }
135  }
136  }
137  else{
138  vector<string> str;
139  str.push_back("loss_random.loss");
140  chnl = new ChannelFile(str);
141  i=i+1;
142  }
143  }
144  else{
145  vector<string> str;
146  str.push_back("loss_random.loss");
147  chnl = new ChannelFile(str);
148  i=i+1;
149  }
150  }
151  if(!argument.compare(REBUILDER_METHOD)){
152  if((i+1)<n && args[i+1][0]!='-'){
153  string rname = args[i+1];
154  rbd = RebuilderCreator::create(rname);
155  if(rbd==NULL)
156  rbd = new RebuilderAverage();
157  i=i+2;
158  }
159  else{
160  rbd = new RebuilderAverage();
161  i=i+1;
162  }
163  }
164  if(!argument.compare(METRIC)){
165  if((i+1)<n && args[i+1][0]!='-' && isNumber(args[i+1][0])){
166  int amount_metrics = atoi(args[i+1]),c=1;
167  i=i+1;
168  string mname;
169  for(c=1;c<=amount_metrics && i<n && args[i][0]!='-';c++){
170  mname=args[i+c];
171  Metric *aux = MetricCreator::create(mname);
172  if(aux!=NULL)
173  metrics.push_back(aux);
174  }
175  i=i+c;
176  }
177  else{
178  metrics.push_back(new MetricPsnr());
179  i=i+1;
180  }
181  }
182  if(!argument.compare(FOLDER_RESULT)){
183  if((i+1)<n && args[i+1][0]!='-'){
184  folder_result = args[i+1];
185  i=i+2;
186  }
187  else
188  i=i+1;
189  }
190  if(!argument.compare(SHOW_DATA_SCREEN)){
191  show_data=true;
192  i=i+1;
193  }
194  if(!argument.compare(EXPORT_FILES)){
195  export_files=true;
196  i=i+1;
197  }
198  }
199  if(pktz==NULL)
200  pktz = new NormalPacketizer();
201  if(rbd==NULL)
202  rbd = new RebuilderAverage();
203  if(chnl==NULL){
204  vector<string> str;
205  str.push_back("loss_random.loss");
206  chnl = new ChannelFile(str);
207  }
208 }
Clase abstracta que representa la estructura que debe tener todo procesamiento de imagen...
Clase que implementa un método de ocultamiento de errores utilizando el promedio de sus vecinos más c...
Clase que representa el Simulador utilizando Un Fichero.
Definition: ChannelFile.h:21
Clase Abstracta que representa la estructura que debe tener la métrica que se desee implementar...
Definition: Metric.h:15
Clase que representa la Métrica PSNR.
Definition: MetricPsnr.h:15
Clase que define un Paquetizador básico.
Clase Abstracta que representa el Simulador de pérdida de paquetes.
Definition: Channel.h:16