+
+unsigned long configcache::hash(const string& str)
+{
+ unsigned long hash = 5381;
+
+ for(string::const_iterator it=str.begin();it!=str.end();it++)
+ hash = ((hash << 5) + hash) + *it; /* hash * 33 + character */
+
+ return hash;
+}
+
+void configcache::deleteHeaderStore()
+{
+ while ( headerStore.size() > 0 ) {
+ free(headerStore.back().second);
+ headerStore.pop_back();
+ }
+}
+
+vector<infiledesc>::iterator configcache::getNextInfile(vector<unsigned long> *excludeFileHashes) {
+ for (vector<infiledesc>::iterator init = inFiles.begin(); init != inFiles.end(); ++init) {
+ if (excludeFileHashes != NULL) {
+ bool excludethisfile = false;
+
+ for (vector<unsigned long>::iterator exit = excludeFileHashes->begin(); exit != excludeFileHashes->end(); ++exit)
+ if ( *exit == hash(init->filename) ) {
+ excludethisfile = true;
+ break;
+ }
+
+ if (excludethisfile)
+ continue;
+ }
+ return init;
+ }
+ return inFiles.end();
+}