
#ifndef _JL_SyncedObject_H_
#define _JL_SyncedObject_H_

#include <stdlib.h>
#include <iostream.h>

#include "universal_threads.h"

class SyncedObject {

	private:
		UNIV_SEMA	_start;
		UNIV_SEMA	_finish;

	public: 
		SyncedObject();
		SyncedObject(const SyncedObject &P) { CopyFrom(P); }
		virtual ~SyncedObject();

		SyncedObject& CopyFrom(const SyncedObject&);
		SyncedObject& operator=(const SyncedObject &P) { return CopyFrom(P); }


	// Called by controlling object:

		void Start() { UNIV_RELEASE_SEMA(_start); }
		void WaitToFinish() { UNIV_HOLD_SEMA(_finish); }


	// Called by synced object:

		void WaitToStart() { UNIV_HOLD_SEMA(_start); }
		void Finish() { UNIV_RELEASE_SEMA(_finish); }
};

#endif
