////////////////////////////////////////////////////////////
//
//     	Definion of classes
//	CDSGroupManager
//
//      Copyright 2001 
//
////////////////////////////////////////////////////////////

#ifndef __DCEMANAGER_H__
#define __DCEMANAGER_H__

#include <dce/rpc.h>
#include "AFifo.C"


class CDSGroupManager
{
public:
	int status;
	// removes group entry, 
	// if (1) it did not exist before, (2) creates it and (3) clears the group
	CDSGroupManager(const char *name, bool create_entry=false, bool clear_group=true,unsigned32 syntax=rpc_c_ns_syntax_default);
	~CDSGroupManager();
		
	int add_member(const char *name, unsigned32 syntax=rpc_c_ns_syntax_default);

private:
	class node
	{
	public: 
		unsigned_char_t *name; 
		unsigned32 syntax;
		node():name(0),syntax(rpc_c_ns_syntax_default){}
	  	node(const char *n,unsigned32 s):name(0),syntax(s)
	  	{set_name((unsigned_char_t *)n);}
	  	node(const node& z):name(0),syntax(z.syntax)
	  	{set_name(z.name);}
	  	~node(){delete name;}
	  	node& operator=(const node& z)
	  	{ syntax=z.syntax; set_name(z.name); return *this;}
	private:
	  	int set_name(const unsigned_char_t *n);
	};
		
	unsigned_char_t *group_name;
	unsigned32 group_name_syntax;
	bool clear_group,clear_group_entry;
	AFifo<node> members;	
};


#endif