diff --git a/AK/FixedArray.h b/AK/FixedArray.h deleted file mode 100644 index efcccfcedd..0000000000 --- a/AK/FixedArray.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (c) 2018-2020, Andreas Kling - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include -#include -#include - -namespace AK { - -template -class FixedArray { -public: - FixedArray() { } - explicit FixedArray(size_t size) - : m_size(size) - { - if (m_size != 0) { - m_elements = (T*)kmalloc(sizeof(T) * m_size); - for (size_t i = 0; i < m_size; ++i) - new (&m_elements[i]) T(); - } - } - ~FixedArray() - { - clear(); - } - - FixedArray(const FixedArray& other) - : m_size(other.m_size) - { - if (m_size != 0) { - m_elements = (T*)kmalloc(sizeof(T) * m_size); - for (size_t i = 0; i < m_size; ++i) - new (&m_elements[i]) T(other[i]); - } - } - - FixedArray& operator=(const FixedArray& other) - { - FixedArray array(other); - swap(array); - return *this; - } - - FixedArray(FixedArray&&) = delete; - FixedArray& operator=(FixedArray&&) = delete; - - void clear() - { - if (!m_elements) - return; - for (size_t i = 0; i < m_size; ++i) - m_elements[i].~T(); - kfree(m_elements); - m_elements = nullptr; - m_size = 0; - } - - size_t size() const { return m_size; } - - T* data() - { - return m_elements; - } - const T* data() const - { - return m_elements; - } - - Bytes bytes() { return { data(), size() }; } - ReadonlyBytes bytes() const { return { data(), size() }; } - - T& operator[](size_t index) - { - ASSERT(index < m_size); - return m_elements[index]; - } - - const T& operator[](size_t index) const - { - ASSERT(index < m_size); - return m_elements[index]; - } - - void resize(size_t new_size) - { - if (new_size == m_size) - return; - if (new_size == 0) { - clear(); - return; - } - auto* new_elements = (T*)kmalloc(new_size * sizeof(T)); - for (size_t i = 0; i < min(new_size, m_size); ++i) - new (&new_elements[i]) T(move(m_elements[i])); - for (size_t i = min(new_size, m_size); i < new_size; ++i) - new (&new_elements[i]) T(); - for (size_t i = 0; i < m_size; ++i) - m_elements[i].~T(); - if (m_elements) - kfree(m_elements); - m_elements = new_elements; - m_size = new_size; - } - - bool contains(const T& value) const - { - for (size_t i = 0; i < m_size; ++i) { - if (m_elements[i] == value) - return true; - } - return false; - } - - void swap(FixedArray& other) - { - ::swap(m_elements, other.m_elements); - ::swap(m_size, other.m_size); - } - - using ConstIterator = SimpleIterator; - using Iterator = SimpleIterator; - - ConstIterator begin() const { return ConstIterator::begin(*this); } - Iterator begin() { return Iterator::begin(*this); } - - ConstIterator end() const { return ConstIterator::end(*this); } - Iterator end() { return Iterator::end(*this); } - - operator Bytes() { return bytes(); } - operator ReadonlyBytes() const { return bytes(); } - -private: - size_t m_size { 0 }; - T* m_elements { nullptr }; -}; - -} - -using AK::FixedArray; diff --git a/AK/Forward.h b/AK/Forward.h index d9f392dc9e..c39aa2d050 100644 --- a/AK/Forward.h +++ b/AK/Forward.h @@ -97,9 +97,6 @@ class HashMap; template class Badge; -template -class FixedArray; - template class Function; @@ -141,7 +138,6 @@ using AK::CircularQueue; using AK::DebugLogStream; using AK::DoublyLinkedList; using AK::DuplexMemoryStream; -using AK::FixedArray; using AK::FlyString; using AK::Function; using AK::HashMap; diff --git a/AK/Tests/TestFixedArray.cpp b/AK/Tests/TestFixedArray.cpp deleted file mode 100644 index 30143cd913..0000000000 --- a/AK/Tests/TestFixedArray.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2018-2020, Andreas Kling - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#include -#include - -TEST_CASE(construct) -{ - EXPECT(FixedArray().size() == 0); -} - -TEST_CASE(ints) -{ - FixedArray ints(3); - ints[0] = 0; - ints[1] = 1; - ints[2] = 2; - EXPECT_EQ(ints[0], 0); - EXPECT_EQ(ints[1], 1); - EXPECT_EQ(ints[2], 2); - - ints.clear(); - EXPECT_EQ(ints.size(), 0u); -} - -TEST_CASE(resize) -{ - FixedArray strings(2); - strings[0] = "ABC"; - strings[1] = "DEF"; - - EXPECT_EQ(strings.size(), 2u); - EXPECT_EQ(strings[0], "ABC"); - EXPECT_EQ(strings[1], "DEF"); - - strings.resize(4); - - EXPECT_EQ(strings.size(), 4u); - EXPECT_EQ(strings[0], "ABC"); - EXPECT_EQ(strings[1], "DEF"); - - EXPECT_EQ(strings[2].is_null(), true); - EXPECT_EQ(strings[3].is_null(), true); - - strings[2] = "GHI"; - strings[3] = "JKL"; - - EXPECT_EQ(strings[2], "GHI"); - EXPECT_EQ(strings[3], "JKL"); - - strings.resize(1); - EXPECT_EQ(strings.size(), 1u); - EXPECT_EQ(strings[0], "ABC"); -} - -TEST_MAIN(FixedArray) diff --git a/AK/Tests/TestVector.cpp b/AK/Tests/TestVector.cpp index facff343cf..59e1cd0544 100644 --- a/AK/Tests/TestVector.cpp +++ b/AK/Tests/TestVector.cpp @@ -26,9 +26,9 @@ #include -#include #include #include +#include #include TEST_CASE(construct) @@ -313,4 +313,18 @@ TEST_CASE(insert_trivial) EXPECT_EQ(ints[5], 40); } +TEST_CASE(resize_initializes) +{ + struct A { + A() { initialized = true; } + bool initialized { false }; + }; + + Vector ints; + ints.resize(32); + + for (size_t idx = 0; idx < 32; ++idx) + EXPECT(ints[idx].initialized); +} + TEST_MAIN(Vector) diff --git a/Kernel/Time/HPET.h b/Kernel/Time/HPET.h index d43fb7504d..1a048fb13a 100644 --- a/Kernel/Time/HPET.h +++ b/Kernel/Time/HPET.h @@ -26,7 +26,6 @@ #pragma once -#include #include #include #include diff --git a/Kernel/Time/TimeManagement.h b/Kernel/Time/TimeManagement.h index 3e09c137ca..9169713e3f 100644 --- a/Kernel/Time/TimeManagement.h +++ b/Kernel/Time/TimeManagement.h @@ -26,7 +26,6 @@ #pragma once -#include #include #include #include diff --git a/Libraries/LibGUI/CppLexer.cpp b/Libraries/LibGUI/CppLexer.cpp index 48ef9ce879..1ddadcfd64 100644 --- a/Libraries/LibGUI/CppLexer.cpp +++ b/Libraries/LibGUI/CppLexer.cpp @@ -152,7 +152,7 @@ constexpr const char* s_known_types[] = { "Deque", "DoublyLinkedList", "FileSystemPath", - "FixedArray", + "Array", "Function", "HashMap", "HashTable",