int main( int argc, char **argv ) { std::string s; std::map<int,std::pair<int,int> > pos; vector<string> coord; set<int> exist; set<pair<int,int> > connec; std::ifstream i("../data/pos.txt"); if(i.fail()) printf("could not open pos.txt\n"); std::ofstream o("../data/data.xml"); o<<"<data x0=\"60.396\" y=\"5.32\" width=\"0.003\" height=\"0.002\">\n"; getline(i, s); QString ts,con; coord = split(s," "); int yoff = tolong(coord[1]); int xoff = tolong(coord[0]); printf("using offset %i,%i\n",xoff,yoff); while (getline(i, s)) { // s contains the input line, without final newline char. coord = split(s," "); //if(coord.size()!=3) { //printf("erreur : %i for line %i ",coord.size(),coord[0].c_str()); //exit(1); } ts="<spot id=\""+QString((coord[0]))+"\">\n"; ts+=" <position x=\""+QString(tostring(tolong(coord[1])+xoff))+"\" y=\""+QString(tostring(-tolong(coord[2])+yoff))+"\" z=\"0\"/>\n"; QDir d; d.setPath("../data/clips"); d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ); d.setSorting( QDir::Size | QDir::Reversed ); char pouet[10]; sprintf(pouet,"%02i",tolong(coord[0])); d.setNameFilter("shot"+string(pouet)+"*"); const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *fi; int clips=0; while ( (fi = it.current()) != 0 ) { ts+= " <moviefile>"+QString(fi->fileName().latin1())+"</moviefile>\n"; ++it; ++clips; } ts+="</spot>\n\n"; if(clips>0) { exist.insert(tolong(coord[0])); o<<ts.latin1(); } for(int i=3;i<coord.size();i++) connec.insert(make_pair(tolong(coord[0]),tolong(coord[i]))); } for(set<pair<int,int> >::iterator it=connec.begin();it!=connec.end();++it) if(exist.find(it->first)!=exist.end() && exist.find(it->second)!=exist.end()) o<<" <connection from=\""+QString(tostring(it->first))+"\" to=\""+QString(tostring(it->second))+"\" />\n"; o<<"</data>\n"; o.close(); return 0; }
void divisionsrest (int anzahl) { kolission = 0; char divisor[20]; sprintf(divisor,"%d",p); ueberlauf.remove(); // Loeschen der Kolissionsliste // Anlegen eines dynamischen Arrays von int-Werten fuer den Adressraum arr = new int[p]; if (arr == 0) speicher(); // Vorbelegen des Arrays mit -1 for (int j = 0; j < p; j++) arr[j] = -1; /* Durchfuehrung der Zuordnung mit Hilfe der Divisions-Rest-Methode */ for (j = 0; j < anzahl; j++) { // Berechnung des jeweiligen Adressregisters durch Modulo-Division des // Schluesselwertes durch die Groesse des Adressraumes C_xlong dwarf = eingabe[j].finput % divisor; long index = tolong(dwarf); // Um zu verhindern, dass das errechnete Ergebnis den gewaehlten // Adressraum verlaesst, Modulo-Division des Ergebnisses durch die // Groesse des Adressraumes index = index % p; // Falls das ermittelte Register noch unbesetzt ist (Eintrag -1), // so wird, um Speicherplatz zu sparen, nur der Laufindex des jeweiligen // Schluesselwertes in dem erstellten Adressraum gespeichert if (arr[index] == -1) arr[index] = j; // Falls das ertmittelte Register bereits belegt ist, so wird der // Schluesselwert an die Kolissionsliste angefuegt else { kolission++; C_xstrlong tmp(eingabe[j].keystr); ueberlauf.append(tmp); } } ((CHashDlg *) (theApp.m_pMainWnd))->setStatus("Status: Berechnung beendet!!!"); // Aufruf der Ausgabefunktion ausgabe(arr); p = ADDRESSRANGE; return; }
void grenzfaltung (int anzahl, int zugriff) { kolission = 0; ueberlauf.remove(); // Loeschen der Kolissionsliste // Anlegen eines dynamischen Arrays von int-Werten fuer den Adressraum arr = new int[p]; if (arr == 0) speicher(); // Vorbelegen des Arrays mit -1 for(int j=0 ; j<p ; j++) arr[j] = -1; /* Durchfuehrung der Zuordnung mit Hilfe der Schiebefaltungs-Methode */ // aehnlich der vorangegangenen Methode wird hier ebenfalls jeder // Schluesselwert in Abschnitte mit beliebiger Laenge zerlegt. Allerdings // wird vor dem Aufsummieren jeder zweite Abschnitt invertiert. for (int i = 0; i < anzahl; i++) { C_xlong invers; long index = 0; int laufen = 0; for(int l=1 ; l<=((eingabe[i].finput.getLength() + (zugriff-1))/zugriff) ; l++) // Ermittlung der Anzahl der Abschnitte mit der vom // Benutzer gewaehlten Laenge { // Aufsummierung der "ungeraden" Abschnitte if(l%2 > 0) index += tolong(eingabe[i].finput(laufen, zugriff)); // Invertierung aller "geraden" Abschnitte und anschliessendes Aufsummieren else { invers = (eingabe[i]).finput.invert(laufen, zugriff); index = index + tolong(invers(0, zugriff)); } // Inkrementierung des Laufindex um auf den naechsten Abschnitt // zugreifen zu koennen laufen += zugriff; } // Um zu verhindern, dass das errechnete Ergebnis den gewaehlten // Adressraum verlaesst, Modulo-Division des Ergebnisses durch die // Groesse des Adressraumes index = index % p; // Falls das ermittelte Register noch unbesetzt ist (Eintrag -1), // so wird, um Speicherplatz zu sparen, nur der Laufindex des jeweiligen // Schluesselwertes in dem erstellten Adressraum gespeichert if (arr[index] == -1) arr[index] = i; // Falls das ertmittelte Register bereits belegt ist, so wird der // Schluesselwert an die Kolissionsliste angefuegt else { kolission++; C_xstrlong tmp(eingabe[i].keystr); ueberlauf.append(tmp); } } ((CHashDlg *) (theApp.m_pMainWnd))->setStatus("Status: Berechnung beendet!!!"); // Aufruf der Ausgabefunktion ausgabe(arr); p = ADDRESSRANGE; return; }
void transform (int anzahl, int basis) { int exp; long ind; char range[20]; sprintf(range,"%d",p); kolission = 0; ueberlauf.remove(); // Loeschen der Kolissionsliste // Anlegen eines dynamischen Arrays von int-Werten fuer den Adressraum arr = new int[p]; if (arr == 0) speicher(); // Vorbelegen des Arrays mit -1 for(int j=0 ; j<p ; j++) arr[j] = -1; /* Durchfuehrung der Zuordnung mit Hilfe der Basis-Transformations-Methode */ // Hierbei wird jeder Schluesselwert in eine neue, vom Benutzer waehlbare // Basis transformiert (nach dem ueblichen Transformationsverfahren). for (int i = 0; i < anzahl; i++) { exp = 0; C_xlong index = 0; for(int l=(eingabe[i]).finput.getLength() - 1 ; l>=0 ; l--) { char str[20]; sprintf(str,"%lu",(unsigned long) pow(basis, exp)); index = index + ((eingabe[i]).finput(l, 1) * C_xlong(str)); // Um zu verhindern, dass das errechnete Ergebnis den gewaehlten // Adressraum verlaesst, Modulo-Division des Ergebnisses durch die // Groesse des Adressraumes index = index % C_xlong(range); exp++; } ind = tolong(index); // Falls das ermittelte Register noch unbesetzt ist (Eintrag -1), // so wird, um Speicherplatz zu sparen, nur der Laufindex des jeweiligen // Schluesselwertes in dem erstellten Adressraum gespeichert if (arr[ind] == -1) arr[ind] = i; // Falls das ertmittelte Register bereits belegt ist, so wird der // Schluesselwert an die Kolissionsliste angefuegt else { kolission++; C_xstrlong tmp(eingabe[i].keystr); ueberlauf.append(tmp); } } // Aufruf der Ausgabefunktion ((CHashDlg *) (theApp.m_pMainWnd))->setStatus("Status: Berechnung beendet!!!"); ausgabe(arr); p = ADDRESSRANGE; return; }
void quadrat (int anzahl, int zugriff) { int start; kolission = 0; C_xlong quad; ueberlauf.remove(); // Loeschen der Kolissionsliste // Anlegen eines dynamischen Arrays von int-Werten fuer den Adressraum p = (int) pow(10, zugriff); arr = new int[p]; if (arr == 0) speicher(); // Vorbelegen des Arrays mit -1 for(int j=0 ; j<p ; j++) arr[j] = -1; /* Durchfuehrung der Zuordnung mit Hilfe der Mitte-des-Quadrats-Methode */ for (int i = 0; i < anzahl; i++) { // Berechnung des Adressregisters durch quadrieren des jeweiligen // Schluesselwertes und anschliessendem herausgreifen der vom Benutzer // gewaehlten Anzahl von Ziffern aus der Quadratzahl. // Die so gewonnene Zahl gibt das Adressregister an. quad = eingabe[i].finput * eingabe[i].finput; start = quad.getLength()/2 - zugriff/2; C_xlong dwarf = quad(start,zugriff); unsigned int index = tolong(dwarf); // Um zu verhindern, dass das errechnete Ergebnis den gewaehlten // Adressraum verlaesst, Modulo-Division des Ergebnisses durch die // Groesse des Adressraumes index = index % p; // Falls das ermittelte Register noch unbesetzt ist (Eintrag -1), // so wird, um Speicherplatz zu sparen, nur der Laufindex des jeweiligen // Schluesselwertes in dem erstellten Adressraum gespeichert if (arr[index] == -1) arr[index] = i; // Falls das ertmittelte Register bereits belegt ist, so wird der // Schluesselwert an die Kolissionsliste angefuegt else { kolission++; C_xstrlong tmp(eingabe[i].keystr); ueberlauf.append(tmp); } } ((CHashDlg *) (theApp.m_pMainWnd))->setStatus("Status: Berechnung beendet!!!"); // Aufruf der Ausgabefunktion ausgabe(arr); p = ADDRESSRANGE; return; }