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

#include "ACondition.h"


pthread_cond_t ConditionPattern = PTHREAD_COND_INITIALIZER;


	// AConditionAttributes

AConditionAttributes::AConditionAttributes()
{    	
    	 status = ::pthread_condattr_init(&attributes); 
  	
}
    
AConditionAttributes::~AConditionAttributes()
{ 
    	  if(!status) ::pthread_condattr_destroy(&attributes); 
  	  
}

    	
int AConditionAttributes::set_shared()
{ 
	if(status) return -1;
    	  
	return ::pthread_condattr_setpshared(&attributes,PTHREAD_PROCESS_SHARED); 
}



        // ACondition

ACondition::ACondition():status(0)
{ 
    	
    	  condition = ConditionPattern;
    	  //status = ::pthread_cond_init(&condition,0); 
    	  
}
    
ACondition::ACondition(const AConditionAttributes& z):status(0)
{ 
    	
    	  condition = ConditionPattern;
    	  status = ::pthread_cond_init(&condition,&z.attributes);
    	
}


ACondition::~ACondition()
{ 
	if(!status) 
		::pthread_cond_destroy(&condition); 
}
    
int ACondition::signal()
{ 
	if(status) return -1;
    	  
	return ::pthread_cond_signal(&condition); 
}
    	
int ACondition::broadcast()
{ 
	if(status) return -1;
	  
	return ::pthread_cond_broadcast(&condition); 
}