#include "MessageIdStore.h"

MessageIdStore::MessageIdStore() {
    insertsSinceLastSave = 0;
}

bool MessageIdStore::insert( string data ) {
    p = msgidSet.insert(data);

    insertsSinceLastSave++;
    if ( insertsSinceLastSave > 10 ) {
        saveSetToFile( (char *)(filename->c_str()) );
	insertsSinceLastSave = 0;
    }

    return p.second;
}

void MessageIdStore::deleteMessageId( char *data ) {
    string *s1 = new string(data);
    msgidSet.erase(*s1);
}

#include <fstream.h>
void MessageIdStore::saveSetToFile(char *filename) {
    // Prepend "." to filname
    char *dotfilename = new char[ strlen(filename) + 2]; dotfilename[0] = 0;
    strcpy(dotfilename, ".");
    strcat(dotfilename, filename);

    ofstream file(dotfilename);
  
    set<string, less<string> >::iterator i = msgidSet.begin();
    for (; i != msgidSet.end(); ++i) 
	file << *i << endl;
    file.close();
}

void MessageIdStore::loadSetFromFile( char *filename ) {
    // Prepend "." to filname
    char *dotfilename = new char[ strlen(filename) + 2]; dotfilename[0] = 0;
    strcpy(dotfilename, ".");
    strcat(dotfilename, filename);

    ifstream file(dotfilename);
    string s;

    if( file.fail() )
	return; // File could not be opened

    while( file >> s ) {// insert all msgid's from the file
      //      cout << "QQQ" << s << "WWW" << endl;
      if( s != "")
	  msgidSet.insert(s);
    }
    file.close();
}

void MessageIdStore::setFilename( char *fn ) {
    filename = new string(fn);
}

/*
int main () {
    MessageIdStore *mis = new MessageIdStore(); 
    char *text = "sdsss"; char *text2 = strdup(text); text2[1] = 'a';
    bool p;
    p = mis->addMessageId (text);
    if (p)
	cout << "Inserted new element " << endl;
    else
	cout << "Existing element = " << endl;
    p = mis->addMessageId (text2);
    if (p)
	cout << "Inserted new element " << endl;
    else
	cout << "Existing element = " << endl;

    mis->saveSetToFile("test");
    return 0;
}
*/




syntax highlighted by Code2HTML, v. 0.9.1