#ifndef CORE_MUTEX_HPP
#define CORE_MUTEX_HPP

#include <threads.h>

#include "core/utils/Check.hpp"
#include "core/utils/Error.hpp"

namespace Core {
    class Mutex final {
        mtx_t mutex;

    public:
        Mutex();
        Mutex(const Mutex& other) = delete;
        Mutex(Mutex&& other) = delete;
        ~Mutex();
        Mutex& operator=(const Mutex& other) = delete;
        Mutex& operator=(Mutex&& other) = delete;
        cbool init();
        cbool lock();
        cbool unlock();
    };
}

#endif