// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/ne-foss-org/nekernel #ifndef NEKIT_PAIR_H #define NEKIT_PAIR_H #include #include #include namespace Kernel { template class Pair; class PairBuilder; template class Pair final { T1 fFirst{nullptr}; T2 fSecond{nullptr}; friend PairBuilder; public: explicit Pair() = default; ~Pair() = default; NE_COPY_DEFAULT(Pair) T1& First() { return fFirst; } T2& Second() { return fSecond; } const T1& First() const { return *fFirst; } const T2& Second() const { return *fSecond; } private: Pair(T1 first, T2 second) : fFirst(first), fSecond(second) {} }; class PairBuilder final { template STATIC Pair Construct(T1 first, T2 second) { return Pair(first, second); } }; template using PairOr = ErrorOr>; } // namespace Kernel #endif