#pragma once #include "RE/B/BSIntrusiveRefCounted.h" #include "RE/B/BSScript_TypeInfo.h" #include "RE/B/BSScript_Variable.h" #include "RE/B/BSSpinLock.h" #include "RE/B/BSTArray.h" namespace RE { namespace BSScript { class Array : public BSIntrusiveRefCounted // 00 { private: // Array * ctor(const TypeInfo *type_info, std::uint32_t initial_size = 0); public: using value_type = Variable; using size_type = std::uint32_t; using difference_type = std::int32_t; using reference = value_type&; using const_reference = const value_type&; using pointer = value_type*; using const_pointer = const value_type*; using iterator = value_type*; using const_iterator = const value_type*; using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = std::reverse_iterator; // Array(const TypeInfo *type_info, std::uint32_t initial_size = 0); ~Array(); [[nodiscard]] reference operator[](size_type a_pos); [[nodiscard]] const_reference operator[](size_type a_pos) const; [[nodiscard]] reference front(); [[nodiscard]] const_reference front() const; [[nodiscard]] reference back(); [[nodiscard]] const_reference back() const; [[nodiscard]] pointer data() noexcept; [[nodiscard]] const_pointer data() const noexcept; [[nodiscard]] iterator begin() noexcept; [[nodiscard]] const_iterator begin() const noexcept; [[nodiscard]] const_iterator cbegin() const noexcept; [[nodiscard]] iterator end() noexcept; [[nodiscard]] const_iterator end() const noexcept; [[nodiscard]] const_iterator cend() const noexcept; [[nodiscard]] reverse_iterator rbegin() noexcept; [[nodiscard]] const_reverse_iterator rbegin() const noexcept; [[nodiscard]] const_reverse_iterator crbegin() const noexcept; [[nodiscard]] reverse_iterator rend() noexcept; [[nodiscard]] const_reverse_iterator rend() const noexcept; [[nodiscard]] const_reverse_iterator crend() const noexcept; [[nodiscard]] bool empty() const noexcept; [[nodiscard]] size_type size() const noexcept; [[nodiscard]] size_type max_size() const noexcept; [[nodiscard]] TypeInfo& type_info(); [[nodiscard]] const TypeInfo& type_info() const; [[nodiscard]] TypeInfo::RawType type() const; // members TypeInfo elementType; // 08 BSSpinLock elementsLock; // 10 BSTArray elements; // 18 }; static_assert(sizeof(Array) == 0x30); } }