#pragma once

//#include <mutex>
#ifdef _WINDOWS
#include<windows.h>
typedef CRITICAL_SECTION PLATFORM_LOCK;
#endif

#ifdef OS_MACOSX
#include <libkern/OSAtomic.h>
typedef OSSpinLock PLATFORM_LOCK;
#endif
namespace common
{
  class Lock {
  public:
    Lock();
    ~Lock();

    void enter();
    void leave();
  private:
    PLATFORM_LOCK lock_;
  };

  class AutoLock {
  public:
    AutoLock(Lock& lock);
    ~AutoLock();

  private:
    Lock& lock_;
  };
} // namespace common
