/***************************************************************************

    libdope
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/


#ifndef DDSTRINGSET_H
#define DDSTRINGSET_H

#include <ddstringrow.h>
#include <set>
#include <ddthreadmutex.h>

/// ddstringset: Ein persistentes String-Set.
/**
	Der Inhalt des String-Sets kann zeilenweise auf Platte geschrieben und 
	wieder geladen werden. Wird verwendet für verschiedene Blocker-listen.<br>

	FIXME: api an ddmaprow etc. angleichen
	FIXME: Pesistenz zu allen storage items hinzufügen, mit einen iowriter
	
	FIXME: 	- stringset, stringrowset sind keine container, wie man meinen könnte, sondern spezialklassen. Aufräumen.
					stringrowset erbt von stringset, warum?
	
*/

class ddstringset : public ddbaseobject
{

public:

	ddstringset();
	virtual	~ddstringset();
	
	virtual ddstring to_string() const;
	virtual void from_string( const ddstring& src, bool usecase = true );

	virtual bool contains_key( const ddstring& key );
	virtual void add_entry( const ddstring& key );
	virtual void drop_entry( const ddstring& key );
	
	virtual void to_row( ddstringrow& row );
	virtual bool find_entry_in( const ddstring& text );

	// ex wordset
	virtual void translate( ddstring& target, const ddstring& replacement="*Z*" );

	inline bool empty()
	{
		return _blockset.empty();
	}

protected:		

	set<ddstring> _blockset;
	ddthreadmutex	_blockmutex;			

};


/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/


/// ddstringrowset: Ein persistent-set mit zusatzdaten: Datum, Kommentar
/**
	Dazu ist eine erweiterte Datenstruktur notwendig: Die Zustatzdaten werden
	in einem String-Array gespeichert.
*/

class ddstringrowset : public ddstringset
{	

public:

	ddstringrowset();
	~ddstringrowset();
	
	ddstring to_string() const;
	void from_string( const ddstring& src );
		
	void add_entry( const ddstring& key, const ddstring& comment );
	void drop_entry( const ddstring& key );
	
	inline const ddstringrow& get_data()
	{
		return _data;
	}
	
protected:
	
	ddstringrow _data;
	
};




#endif
