#pragma once

namespace JabyEngine {
    template<typename T, typename S>
    struct pair {
        T first;
        S second;
    };

    template<typename T, typename S>
    struct cplx_pair {
        T first;
        S second;

        template<typename T2, typename S2>
        constexpr cplx_pair<T, S>& operator=(const pair<T2, S2>& obj) {
            this->first  = obj.first;
            this->second = obj.second;
            return *this;
        }
    };

    template <typename... Args>
    constexpr cplx_pair<Args&...> tie(Args&... args) {
        return {args...};
    }

    enum struct Progress {
        InProgress = 0,
        Done,
        Error
    };
}