comparison audioDB.cpp @ 370:2d5c3f8e8c22

Merge gcc-4.3-cleanups branch (-r629:642, but I consider that branch as having served its purpose) onto the trunk. Now compiles cleanly even with a fairly picky gcc. I await version 4.4 with bated breath.
author mas01cr
date Wed, 12 Nov 2008 15:40:40 +0000
parents 94c18f128ce8
children 5eb5034b0577
comparison
equal deleted inserted replaced
355:94c18f128ce8 370:2d5c3f8e8c22
20 20
21 bool operator==(const PointPair& a, const PointPair& b){ 21 bool operator==(const PointPair& a, const PointPair& b){
22 return ( (a.trackID==b.trackID) && (a.qpos==b.qpos) && (a.spos==b.spos) ); 22 return ( (a.trackID==b.trackID) && (a.qpos==b.qpos) && (a.spos==b.spos) );
23 } 23 }
24 24
25 audioDB::audioDB(const unsigned argc, const char *const argv[]): O2_AUDIODB_INITIALIZERS 25 audioDB::audioDB(const unsigned argc, const char *argv[]): O2_AUDIODB_INITIALIZERS
26 { 26 {
27 if(processArgs(argc, argv)<0){ 27 if(processArgs(argc, argv)<0){
28 printf("No command found.\n"); 28 printf("No command found.\n");
29 cmdline_parser_print_version (); 29 cmdline_parser_print_version ();
30 if (strlen(gengetopt_args_info_purpose) > 0) 30 if (strlen(gengetopt_args_info_purpose) > 0)
111 111
112 else 112 else
113 error("Unrecognized command",command); 113 error("Unrecognized command",command);
114 } 114 }
115 115
116 audioDB::audioDB(const unsigned argc, const char *const argv[], adb__queryResponse *adbQueryResponse): O2_AUDIODB_INITIALIZERS 116 audioDB::audioDB(const unsigned argc, const char *argv[], adb__queryResponse *adbQueryResponse): O2_AUDIODB_INITIALIZERS
117 { 117 {
118 try { 118 try {
119 isServer = 1; // Set to make errors report over SOAP 119 isServer = 1; // Set to make errors report over SOAP
120 processArgs(argc, argv); 120 processArgs(argc, argv);
121 // Perform database prefix substitution 121 // Perform database prefix substitution
127 cleanup(); 127 cleanup();
128 throw(err); 128 throw(err);
129 } 129 }
130 } 130 }
131 131
132 audioDB::audioDB(const unsigned argc, const char* const argv[], adb__statusResponse *adbStatusResponse): O2_AUDIODB_INITIALIZERS 132 audioDB::audioDB(const unsigned argc, const char *argv[], adb__statusResponse *adbStatusResponse): O2_AUDIODB_INITIALIZERS
133 { 133 {
134 try { 134 try {
135 isServer = 1; // Set to make errors report over SOAP 135 isServer = 1; // Set to make errors report over SOAP
136 processArgs(argc, argv); 136 processArgs(argc, argv);
137 // Perform database prefix substitution 137 // Perform database prefix substitution
143 cleanup(); 143 cleanup();
144 throw(err); 144 throw(err);
145 } 145 }
146 } 146 }
147 147
148 audioDB::audioDB(const unsigned argc, const char *const argv[], adb__lisztResponse *adbLisztResponse): O2_AUDIODB_INITIALIZERS 148 audioDB::audioDB(const unsigned argc, const char *argv[], adb__lisztResponse *adbLisztResponse): O2_AUDIODB_INITIALIZERS
149 { 149 {
150 try { 150 try {
151 isServer = 1; // Set to make errors report over SOAP 151 isServer = 1; // Set to make errors report over SOAP
152 processArgs(argc, argv); 152 processArgs(argc, argv);
153 // Perform database prefix substitution 153 // Perform database prefix substitution
161 } 161 }
162 } 162 }
163 163
164 164
165 //for the lib / API 165 //for the lib / API
166 audioDB::audioDB(const unsigned argc, char* const argv[], int * apierror): O2_AUDIODB_INITIALIZERS 166 audioDB::audioDB(const unsigned argc, const char *argv[], int * apierror): O2_AUDIODB_INITIALIZERS
167 { 167 {
168 168
169 try { 169 try {
170 UseApiError=1; 170 UseApiError=1;
171 171
226 return; 226 return;
227 227
228 } 228 }
229 229
230 //for API status 230 //for API status
231 audioDB::audioDB(const unsigned argc, char* const argv[], cppstatusptr stat, int * apierror): O2_AUDIODB_INITIALIZERS 231 audioDB::audioDB(const unsigned argc, const char *argv[], cppstatusptr stat, int * apierror): O2_AUDIODB_INITIALIZERS
232 { 232 {
233 233
234 try { 234 try {
235 UseApiError=1; 235 UseApiError=1;
236 236
260 260
261 } 261 }
262 262
263 263
264 //for API query 264 //for API query
265 audioDB::audioDB(const unsigned argc, char* const argv[],adb__queryResponse *adbQueryResponse, int * apierror): O2_AUDIODB_INITIALIZERS 265 audioDB::audioDB(const unsigned argc, const char *argv[],adb__queryResponse *adbQueryResponse, int * apierror): O2_AUDIODB_INITIALIZERS
266 { 266 {
267 267
268 try { 268 try {
269 UseApiError=1; 269 UseApiError=1;
270 270
342 342
343 audioDB::~audioDB(){ 343 audioDB::~audioDB(){
344 cleanup(); 344 cleanup();
345 } 345 }
346 346
347 int audioDB::processArgs(const unsigned argc, const char *const argv[]){ 347 int audioDB::processArgs(const unsigned argc, const char *argv[]){
348 348
349 if(argc<2){ 349 if(argc<2){
350 cmdline_parser_print_version (); 350 cmdline_parser_print_version ();
351 if (strlen(gengetopt_args_info_purpose) > 0) 351 if (strlen(gengetopt_args_info_purpose) > 0)
352 printf("%s\n", gengetopt_args_info_purpose); 352 printf("%s\n", gengetopt_args_info_purpose);
524 command=COM_POWER; 524 command=COM_POWER;
525 dbName=args_info.database_arg; 525 dbName=args_info.database_arg;
526 return 0; 526 return 0;
527 } 527 }
528 528
529 if(args_info.INSERT_given){ 529 if(args_info.INSERT_given) {
530 command=COM_INSERT; 530 command=COM_INSERT;
531 dbName=args_info.database_arg; 531 dbName=args_info.database_arg;
532 inFile=args_info.features_arg; 532 inFile=args_info.features_arg;
533 if(args_info.key_given) 533 if(args_info.key_given) {
534 if(!args_info.features_given) 534 if(!args_info.features_given) {
535 error("INSERT: '-k key' argument depends on '-f features'"); 535 error("INSERT: '-k key' argument depends on '-f features'");
536 else 536 } else {
537 key=args_info.key_arg; 537 key=args_info.key_arg;
538 if(args_info.times_given){ 538 }
539 }
540 if(args_info.times_given) {
539 timesFileName=args_info.times_arg; 541 timesFileName=args_info.times_arg;
540 if(strlen(timesFileName)>0){ 542 if(strlen(timesFileName)>0) {
541 if(!(timesFile = new std::ifstream(timesFileName,std::ios::in))) 543 if(!(timesFile = new std::ifstream(timesFileName,std::ios::in))) {
542 error("Could not open times file for reading", timesFileName); 544 error("Could not open times file for reading", timesFileName);
545 }
543 usingTimes=1; 546 usingTimes=1;
544 } 547 }
545 } 548 }
546 if (args_info.power_given) { 549 if (args_info.power_given) {
547 powerFileName = args_info.power_arg; 550 powerFileName = args_info.power_arg;
553 } 556 }
554 } 557 }
555 return 0; 558 return 0;
556 } 559 }
557 560
558 if(args_info.BATCHINSERT_given){ 561 if(args_info.BATCHINSERT_given) {
559 command=COM_BATCHINSERT; 562 command=COM_BATCHINSERT;
560 dbName=args_info.database_arg; 563 dbName=args_info.database_arg;
561 inFile=args_info.featureList_arg; 564 inFile=args_info.featureList_arg;
562 if(args_info.keyList_given) 565 if(args_info.keyList_given) {
563 if(!args_info.featureList_given) 566 if(!args_info.featureList_given) {
564 error("BATCHINSERT: '-K keyList' argument depends on '-F featureList'"); 567 error("BATCHINSERT: '-K keyList' argument depends on '-F featureList'");
565 else 568 } else {
566 key=args_info.keyList_arg; // INCONSISTENT NO CHECK 569 key=args_info.keyList_arg; // INCONSISTENT NO CHECK
567 570 }
571 }
568 /* TO DO: REPLACE WITH 572 /* TO DO: REPLACE WITH
569 if(args_info.keyList_given){ 573 if(args_info.keyList_given){
570 trackFileName=args_info.keyList_arg; 574 trackFileName=args_info.keyList_arg;
571 if(strlen(trackFileName)>0 && !(trackFile = new std::ifstream(trackFileName,std::ios::in))) 575 if(strlen(trackFileName)>0 && !(trackFile = new std::ifstream(trackFileName,std::ios::in)))
572 error("Could not open keyList file for reading",trackFileName); 576 error("Could not open keyList file for reading",trackFileName);
573 } 577 }
574 AND UPDATE BATCHINSERT() 578 AND UPDATE BATCHINSERT()
575 */ 579 */
576 580
577 if(args_info.timesList_given){ 581 if(args_info.timesList_given) {
578 timesFileName=args_info.timesList_arg; 582 timesFileName=args_info.timesList_arg;
579 if(strlen(timesFileName)>0){ 583 if(strlen(timesFileName)>0) {
580 if(!(timesFile = new std::ifstream(timesFileName,std::ios::in))) 584 if(!(timesFile = new std::ifstream(timesFileName,std::ios::in)))
581 error("Could not open timesList file for reading", timesFileName); 585 error("Could not open timesList file for reading", timesFileName);
582 usingTimes=1; 586 usingTimes=1;
583 } 587 }
584 } 588 }
585 if(args_info.powerList_given){ 589 if(args_info.powerList_given) {
586 powerFileName=args_info.powerList_arg; 590 powerFileName=args_info.powerList_arg;
587 if(strlen(powerFileName)>0){ 591 if(strlen(powerFileName)>0) {
588 if(!(powerFile = new std::ifstream(powerFileName,std::ios::in))) 592 if(!(powerFile = new std::ifstream(powerFileName,std::ios::in)))
589 error("Could not open powerList file for reading", powerFileName); 593 error("Could not open powerList file for reading", powerFileName);
590 usingPower=1; 594 usingPower=1;
591 } 595 }
592 } 596 }
643 // Query command and arguments 647 // Query command and arguments
644 if(args_info.QUERY_given){ 648 if(args_info.QUERY_given){
645 command=COM_QUERY; 649 command=COM_QUERY;
646 dbName=args_info.database_arg; 650 dbName=args_info.database_arg;
647 // XOR features and key search 651 // XOR features and key search
648 if(!args_info.features_given && !args_info.key_given || (args_info.features_given && args_info.key_given)) 652 if((!args_info.features_given && !args_info.key_given) || (args_info.features_given && args_info.key_given))
649 error("QUERY requires exactly one of either -f features or -k key"); 653 error("QUERY requires exactly one of either -f features or -k key");
650 if(args_info.features_given) 654 if(args_info.features_given)
651 inFile=args_info.features_arg; // query from file 655 inFile=args_info.features_arg; // query from file
652 else{ 656 else{
653 query_from_key = true; 657 query_from_key = true;
885 VERB_LOG(2, " done."); 889 VERB_LOG(2, " done.");
886 } 890 }
887 891
888 // This entry point is visited once per instance 892 // This entry point is visited once per instance
889 // so it is a good place to set any global state variables 893 // so it is a good place to set any global state variables
890 int main(const unsigned argc, char* const argv[]){ 894 int main(const int argc, const char* argv[]){
891 SERVER_LSH_INDEX_SINGLETON = 0; // Initialize global variables 895 SERVER_LSH_INDEX_SINGLETON = 0; // Initialize global variables
892 SERVER_ADB_ROOT = 0; // Server-side database root prefix 896 SERVER_ADB_ROOT = 0; // Server-side database root prefix
893 SERVER_ADB_FEATURE_ROOT = 0; // Server-side features root prefix 897 SERVER_ADB_FEATURE_ROOT = 0; // Server-side features root prefix
894 audioDB(argc, argv); 898 audioDB(argc, argv);
895 } 899 }
904 #include "audioDB_API.h" 908 #include "audioDB_API.h"
905 909
906 910
907 //adb_ptr audiodb_create(char * path,long ntracks, long datadim) { 911 //adb_ptr audiodb_create(char * path,long ntracks, long datadim) {
908 adb_ptr audiodb_create(char * path,long datasize,long ntracks, long datadim) { 912 adb_ptr audiodb_create(char * path,long datasize,long ntracks, long datadim) {
909 char *argv[12]; 913 const char *argv[12];
910 int argvctr=0; 914 int argvctr=0;
911 char tempstr1[200]; 915 char tempstr1[200];
912 char tempstr2[200]; 916 char tempstr2[200];
913 char tempstr3[200]; 917 char tempstr3[200];
914 int apierror=0; 918 int apierror=0;
950 } 954 }
951 955
952 956
953 957
954 int audiodb_insert(adb_ptr mydb, adb_insert_ptr ins) { 958 int audiodb_insert(adb_ptr mydb, adb_insert_ptr ins) {
955 char *argv[15]; 959 const char *argv[15];
956 int argvctr=0; 960 int argvctr=0;
957 int apierror=0; 961 int apierror=0;
958 962
959 argv[argvctr++]="audioDB"; 963 argv[argvctr++]="audioDB";
960 argv[argvctr++]="-I"; 964 argv[argvctr++]="-I";
984 } 988 }
985 989
986 990
987 int audiodb_batchinsert(adb_ptr mydb, adb_insert_ptr ins, unsigned int size) { 991 int audiodb_batchinsert(adb_ptr mydb, adb_insert_ptr ins, unsigned int size) {
988 992
989 char *argv[22]; 993 const char *argv[22];
990 int argvctr=0; 994 int argvctr=0;
991 unsigned int i=0; 995 unsigned int i=0;
992 int retval=0;
993 char tempfeaturename[]="tempfeatureXXXXXX"; 996 char tempfeaturename[]="tempfeatureXXXXXX";
994 char temppowername[]="temppowerXXXXXX"; 997 char temppowername[]="temppowerXXXXXX";
995 char tempkeyname[]="tempkeyXXXXXX"; 998 char tempkeyname[]="tempkeyXXXXXX";
996 char temptimesname[]="temptimesXXXXXX"; 999 char temptimesname[]="temptimesXXXXXX";
997 int tempfeaturefd=0; 1000 int tempfeaturefd = -1;
998 int temppowerfd=0; 1001 int temppowerfd = -1;
999 int tempkeyfd=0; 1002 int tempkeyfd = -1;
1000 int temptimesfd=0; 1003 int temptimesfd = -1;
1001 1004
1002 int flags[4]={0}; 1005 int flags[4]={0};
1003 int apierror=0; 1006 int apierror=0;
1004 1007
1005 /* So the final API should take an array of structs. However, the current 1008 /* So the final API should take an array of structs. However, the current
1023 if (ins[0].key){ flags[2]++;}; 1026 if (ins[0].key){ flags[2]++;};
1024 if (ins[0].times){ flags[3]++;}; 1027 if (ins[0].times){ flags[3]++;};
1025 1028
1026 1029
1027 /* make four temp files */ 1030 /* make four temp files */
1028 tempfeaturefd=mkstemp(tempfeaturename); 1031 if ((tempfeaturefd = mkstemp(tempfeaturename)) == -1)
1029 if (tempfeaturefd !=-1){ 1032 goto error;
1030 1033 if ((temppowerfd = mkstemp(temppowername)) == -1)
1031 temppowerfd=mkstemp(temppowername); 1034 goto error;
1032 if (temppowerfd !=-1){ 1035 if ((tempkeyfd=mkstemp(tempkeyname)) == -1)
1033 1036 goto error;
1034 tempkeyfd=mkstemp(tempkeyname); 1037 if ((temptimesfd=mkstemp(temptimesname)) == -1)
1035 if (tempkeyfd !=-1){ 1038 goto error;
1036 1039
1037 temptimesfd=mkstemp(temptimesname);
1038 if (temptimesfd !=-1){
1039
1040 } else {
1041 retval=-1;
1042 close(tempkeyfd);
1043 remove(tempkeyname);
1044 close(temppowerfd);
1045 remove(temppowername);
1046 close(tempfeaturefd);
1047 remove(tempfeaturename);
1048 }
1049
1050 } else {
1051 retval=-1;
1052 close(temppowerfd);
1053 remove(temppowername);
1054 close(tempfeaturefd);
1055 remove(tempfeaturename);
1056 }
1057
1058 } else {
1059 retval=-1;
1060 close(tempfeaturefd);
1061 remove(tempfeaturename);
1062 }
1063
1064 } else {
1065 retval=-1;
1066 }
1067
1068
1069
1070
1071
1072 if (retval == -1){
1073 return -1;
1074 }
1075
1076 /* Ok, so we should have a working set of files to write to */ 1040 /* Ok, so we should have a working set of files to write to */
1077 /* I'm going to assume that the same format is kept for all structs in the array */ 1041 /* I'm going to assume that the same format is kept for all structs in the array */
1078 /* That is, each struct should be correctly formed, and contain at least a features file, because I'm just going to pass the terms along to the text files */ 1042 /* That is, each struct should be correctly formed, and contain at least a features file, because I'm just going to pass the terms along to the text files */
1079 for (i=0; i<size; i++){ 1043 for (i = 0; i < size; i++) {
1080 1044 if (write(tempfeaturefd,ins[i].features,strlen(ins[i].features)) != (ssize_t) strlen(ins[i].features))
1081 write(tempfeaturefd,ins[i].features,strlen(ins[i].features)); 1045 goto error;
1082 write(tempfeaturefd,"\n",1); 1046 if (write(tempfeaturefd,"\n",1) != 1)
1083 1047 goto error;
1084 if (flags[1]){ 1048
1085 write(temppowerfd,ins[i].power,strlen(ins[i].power)); 1049 if (flags[1]) {
1086 write(temppowerfd,"\n",1); 1050 if (write(temppowerfd,ins[i].power,strlen(ins[i].power)) != (ssize_t) strlen(ins[i].power))
1087 } 1051 goto error;
1088 1052 if (write(temppowerfd,"\n",1) != 1)
1089 if (flags[2]){ 1053 goto error;
1090 write(tempkeyfd,ins[i].key,strlen(ins[i].key)); 1054 }
1091 write(tempkeyfd,"\n",1); 1055 if (flags[2]) {
1092 } 1056 if (write(tempkeyfd,ins[i].key,strlen(ins[i].key)) != (ssize_t) strlen(ins[i].key))
1093 1057 goto error;
1094 if (flags[3]){ 1058 if (write(tempkeyfd,"\n",1) != 1)
1095 write(temptimesfd,ins[i].times,strlen(ins[i].times)); 1059 goto error;
1096 write(temptimesfd,"\n",1); 1060 }
1097 } 1061 if (flags[3]) {
1098 } 1062 if (write(temptimesfd,ins[i].times,strlen(ins[i].times)) != (ssize_t) strlen(ins[i].times))
1063 goto error;
1064 if (write(temptimesfd,"\n",1) != 1)
1065 goto error;
1066 }
1067 }
1099 1068
1100 argv[argvctr++]="-F"; 1069 argv[argvctr++]="-F";
1101 argv[argvctr++]=tempfeaturename; 1070 argv[argvctr++]=tempfeaturename;
1102 close(tempfeaturefd); 1071 close(tempfeaturefd);
1103 close(temppowerfd); 1072 close(temppowerfd);
1128 remove(tempkeyname); 1097 remove(tempkeyname);
1129 remove(temptimesname); 1098 remove(temptimesname);
1130 1099
1131 1100
1132 return apierror; 1101 return apierror;
1102
1103 error:
1104 if(tempfeaturefd != -1) {
1105 close(tempfeaturefd);
1106 remove(tempfeaturename);
1107 }
1108 if(temppowerfd != -1) {
1109 close(temppowerfd);
1110 remove(temppowername);
1111 }
1112 if(tempkeyfd != -1) {
1113 close(tempkeyfd);
1114 remove(tempkeyname);
1115 }
1116 if(temptimesfd != -1) {
1117 close(temptimesfd);
1118 remove(temptimesname);
1119 }
1120 return -1;
1133 } 1121 }
1134 1122
1135 1123
1136 int audiodb_query(adb_ptr mydb, adb_query_ptr adbq, adb_queryresult_ptr adbqr){ 1124 int audiodb_query(adb_ptr mydb, adb_query_ptr adbq, adb_queryresult_ptr adbqr){
1137 1125
1138 char *argv[32]; 1126 const char *argv[32];
1139 int argvctr=0; 1127 int argvctr=0;
1140 char tempstr1[200]; 1128 char tempstr1[200];
1141 char tempstr2[200]; 1129 char tempstr2[200];
1142 char tempstr3[200]; 1130 char tempstr3[200];
1143 int apierror=0; 1131 int apierror=0;
1246 int audiodb_status(adb_ptr mydb, adb_status_ptr status){ 1234 int audiodb_status(adb_ptr mydb, adb_status_ptr status){
1247 1235
1248 cppstatus sss; 1236 cppstatus sss;
1249 int apierror=0; 1237 int apierror=0;
1250 1238
1251 char * argv[5]; 1239 const char *argv[5];
1252 1240
1253 apierror=0; 1241 apierror=0;
1254 argv[0]="audioDB"; 1242 argv[0]="audioDB";
1255 argv[1]="--STATUS"; 1243 argv[1]="--STATUS";
1256 argv[2]="-d"; 1244 argv[2]="-d";
1271 1259
1272 int audiodb_dump(adb_ptr mydb){ 1260 int audiodb_dump(adb_ptr mydb){
1273 return audiodb_dump_withdir(mydb,"audioDB.dump"); 1261 return audiodb_dump_withdir(mydb,"audioDB.dump");
1274 } 1262 }
1275 1263
1276 int audiodb_dump_withdir(adb_ptr mydb, char * outputdir){ 1264 int audiodb_dump_withdir(adb_ptr mydb, const char *outputdir){
1277 1265
1278 char * argv[7]; 1266 const char *argv[7];
1279 int argvctr=0; 1267 int argvctr=0;
1280 int apierror=0; 1268 int apierror=0;
1281 1269
1282 argv[argvctr++]="audioDB"; 1270 argv[argvctr++]="audioDB";
1283 argv[argvctr++]="--DUMP"; 1271 argv[argvctr++]="--DUMP";
1284 argv[argvctr++]="-d"; 1272 argv[argvctr++]="-d";
1285 argv[argvctr++]=mydb->dbname; 1273 argv[argvctr++]=mydb->dbname;
1286 argv[argvctr++]="--output"; 1274 argv[argvctr++]="--output";
1287 argv[argvctr++]=(char *)outputdir; 1275 argv[argvctr++]=(char *)outputdir;
1288 argv[argvctr+1]='\0'; 1276 argv[argvctr]='\0';
1289 1277
1290 audioDB::audioDB(6,argv,&apierror); 1278 audioDB::audioDB(6,argv,&apierror);
1291 1279
1292 return apierror; 1280 return apierror;
1293 } 1281 }
1294 1282
1295 int audiodb_l2norm(adb_ptr mydb){ 1283 int audiodb_l2norm(adb_ptr mydb){
1296 1284
1297 char * argv[5]; 1285 const char *argv[5];
1298 int apierror=0; 1286 int apierror=0;
1299 1287
1300 argv[0]="audioDB"; 1288 argv[0]="audioDB";
1301 argv[1]="--L2NORM"; 1289 argv[1]="--L2NORM";
1302 argv[2]="-d"; 1290 argv[2]="-d";
1307 return apierror; 1295 return apierror;
1308 } 1296 }
1309 1297
1310 int audiodb_power(adb_ptr mydb){ 1298 int audiodb_power(adb_ptr mydb){
1311 1299
1312 char * argv[5]; 1300 const char *argv[5];
1313 int apierror=0; 1301 int apierror=0;
1314 1302
1315 argv[0]="audioDB"; 1303 argv[0]="audioDB";
1316 argv[1]="--POWER"; 1304 argv[1]="--POWER";
1317 argv[2]="-d"; 1305 argv[2]="-d";