////////////////////////////////////////////////////////////
//
//     	Declaration of classes
//	AConditionAttributes, ACondition
//
//      Copyright 2001 
//
//
////////////////////////////////////////////////////////////

#ifndef __CONDITION_H__
#define __CONDITION_H__

#include <pthread.h>

	// AConditionAttributes

class ACondition;

class AConditionAttributes 
{
friend class ACondition;
public:

	int status;
	
    	AConditionAttributes();
    
    	~AConditionAttributes();
    	
    	int set_shared();

private:

        pthread_condattr_t attributes;
};

        // ACondition
        
class AMutex;

class ACondition 
{
friend int AWait(ACondition& condition,AMutex& mutex);
friend int AWait(ACondition& condition,AMutex& mutex,unsigned timeout_milliseconds);
ACondition(const ACondition&);			// forbidden
ACondition& operator=(const ACondition&);	// forbidden
public:

	int status;
	
    	// default attributes
    	ACondition();
    
    	ACondition(const AConditionAttributes& z);
      
    	~ACondition();
    
    	int signal();
    	
	int broadcast();


private:

        pthread_cond_t condition;     
};


#endif