mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 22:35:43 +08:00
79 lines
1.4 KiB
C
79 lines
1.4 KiB
C
|
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
||
|
#pragma once
|
||
|
|
||
|
#include "Luau/Common.h"
|
||
|
|
||
|
#include <array>
|
||
|
#include <cstddef>
|
||
|
|
||
|
namespace Luau::EqSat
|
||
|
{
|
||
|
|
||
|
template<typename T>
|
||
|
struct Slice final
|
||
|
{
|
||
|
Slice()
|
||
|
: _data(nullptr)
|
||
|
, _size(0)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/// Use this constructor if you have a dynamically sized vector.
|
||
|
/// The slice is valid for as long as the backing vector has not moved
|
||
|
/// elsewhere in memory.
|
||
|
///
|
||
|
/// In general, a slice should never be used from vectors except for
|
||
|
/// any vectors whose size are statically unknown, but remains fixed
|
||
|
/// upon the construction of such a slice over a vector.
|
||
|
Slice(T* first, size_t last)
|
||
|
: _data(first)
|
||
|
, _size(last)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
template<size_t I>
|
||
|
explicit Slice(std::array<T, I>& array)
|
||
|
: _data(array.data())
|
||
|
, _size(array.size())
|
||
|
{
|
||
|
}
|
||
|
|
||
|
T* data() const
|
||
|
{
|
||
|
return _data;
|
||
|
}
|
||
|
|
||
|
size_t size() const
|
||
|
{
|
||
|
return _size;
|
||
|
}
|
||
|
|
||
|
bool empty() const
|
||
|
{
|
||
|
return _size == 0;
|
||
|
}
|
||
|
|
||
|
T& operator[](size_t i) const
|
||
|
{
|
||
|
LUAU_ASSERT(i < _size);
|
||
|
return _data[i];
|
||
|
}
|
||
|
|
||
|
public:
|
||
|
T* _data;
|
||
|
size_t _size;
|
||
|
|
||
|
public:
|
||
|
T* begin() const
|
||
|
{
|
||
|
return _data;
|
||
|
}
|
||
|
|
||
|
T* end() const
|
||
|
{
|
||
|
return _data + _size;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
} // namespace Luau::EqSat
|