www.pudn.com > UDP-based_Reliable_Data_Transfer_Library.zip > parser.cpp
#include#include #include #include //r 0.01012 0 1 UDT 1500 ------- 3 0.0 1.0 -1 0 inline double getsecoftime(const char* trace) { char temp[32]; int i = 2; while (trace[i] != ' ') { temp[i - 2] = trace[i]; i ++; } temp[i - 2] = '\0'; return atof(temp); } inline int getid(const char* trace) { int i = 0; while (trace[i] != '-') i ++; while (trace[i] != ' ') i ++; i ++; char temp[8]; int c = 0; while (trace[i] != ' ') temp[c ++] = trace[i ++]; temp[c] = '\0'; return atoi(temp); } inline int getdest(const char* trace) { char temp[8]; int i, c = 0; for (i = 0; i < 3; i ++) { while (trace[c] != ' ') c ++; c ++; } i = 0; while (trace[c] != ' ') temp[i ++] = trace[c ++]; temp[i] = '\0'; return atoi(temp); } inline int getsize(const char* trace) { char temp[8]; int i, c = 0; for (i = 0; i < 5; i ++) { while (trace[c] != ' ') c ++; c ++; } i = 0; while (trace[c] != ' ') temp[i ++] = trace[c ++]; temp[i] = '\0'; return atoi(temp); } double parse(ifstream* trace, const int& id, const int& dest) { char output[32]; sprintf(output, "flow%d.trace", id); ofstream result(output); char temp[256]; int time = 0; int unitcount; double sum = 0.0; while(!trace->eof()) { trace->getline(temp, 256); unitcount = 0; while (!trace->eof() && (time == int(getsecoftime(temp)))) { if (('r' == temp[0]) && (id == getid(temp)) && (dest == getdest(temp)) && (1500 == getsize(temp))) unitcount ++; trace->getline(temp, 256); } result << unitcount * 3 / 250.0 << ", "; sum += unitcount * 3 / 250.0; cout << time << " finished!\n"; time ++; } cout << endl; return sum; } double parseall(ifstream* trace, const int& num, const int& dest) { double flow[num]; char temp[256]; for (int i = 0; i < num; i ++) flow[i] = 0.0; trace->getline(temp, 256); while(!trace->eof()) { if (('r' == temp[0]) && (dest == getdest(temp)) && (1500 == getsize(temp))) flow[getid(temp)] += 1.0; trace->getline(temp, 256); } double sum = 0.0; for (int i = 0; i < num; i ++) { flow[i] = flow[i] * 3 / 250.0; sum += flow[i]; } double avg = sum/num; double dev = 0.0; for (int i = 0; i < num; i ++) dev += (flow[i] - avg) * (flow[i] - avg); dev = sqrt(dev/num); cout << sum << " " << dev << endl; return sum; } int main(int argv, char** argc) { ifstream trace; trace.open("out.tr"); // cout << parse(&trace, atoi(argc[1]), atoi(argc[2])) << endl; parseall(&trace, atoi(argc[1]), atoi(argc[2])); /* for (int i = 0; i < 20; i++) { trace.open("out.tr"); parse(&trace, i); trace.close(); } */ return 0; }