/* * vector.hpp * Kernel C++ platform: Vector library * Copyright (c) 2025 Daniel Hammer */ #pragma once #include #include #include #include #include #include namespace kcp { template class vector { protected: T* array = nullptr; std::size_t sz = 0; std::size_t capacity = 0; public: vector() = default; vector(std::initializer_list initList) { for (auto itr = initList.begin(); itr != initList.end(); itr++) { T item = *itr; push_back(item); } } T& operator[](std::size_t position) { if (position >= sz || array == nullptr) { Panic("Vector out of bounds caught!", nullptr); __builtin_unreachable(); } return array[position]; } T& at(std::int64_t position) { return this->operator[](position); } size_t push_back(T value) { size_t _sz = sz; if (capacity < sz + 1) { size_t newCapacity = (capacity == 0) ? 4 : (capacity * 2); T* newArray = (T*)Memory::g_heap->Realloc(array, sizeof(T) * newCapacity); if (newArray == nullptr) { Panic("Vector allocation failed!", nullptr); __builtin_unreachable(); } array = newArray; capacity = newCapacity; } array[sz++] = value; return _sz; } T* get_array() { return array; } size_t size() { return sz; } }; };