diff options
author | asynts <asynts@gmail.com> | 2020-09-07 13:17:12 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-09-08 14:01:21 +0200 |
commit | 70dd97c46e5e45ce460cbc9186baa961fc070216 (patch) | |
tree | 867863099ca4f3970f4d5f9b5742849b41dd4c75 /AK | |
parent | ec1080b18add64c72dfc1fed1953f9e30876c26e (diff) | |
download | serenity-70dd97c46e5e45ce460cbc9186baa961fc070216.zip |
AK: Remove FixedArray class.
Diffstat (limited to 'AK')
-rw-r--r-- | AK/FixedArray.h | 165 | ||||
-rw-r--r-- | AK/Forward.h | 4 | ||||
-rw-r--r-- | AK/Tests/TestFixedArray.cpp | 81 | ||||
-rw-r--r-- | AK/Tests/TestVector.cpp | 16 |
4 files changed, 15 insertions, 251 deletions
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 <kling@serenityos.org> - * 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 <AK/Iterator.h> -#include <AK/Span.h> -#include <AK/kmalloc.h> - -namespace AK { - -template<typename T> -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<const FixedArray, const T>; - using Iterator = SimpleIterator<FixedArray, T>; - - 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<typename T> class Badge; -template<typename T> -class FixedArray; - template<typename> 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 <kling@serenityos.org> - * 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 <AK/TestSuite.h> - -#include <AK/String.h> -#include <AK/FixedArray.h> - -TEST_CASE(construct) -{ - EXPECT(FixedArray<int>().size() == 0); -} - -TEST_CASE(ints) -{ - FixedArray<int> 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<String> 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 <AK/TestSuite.h> -#include <AK/String.h> #include <AK/NonnullOwnPtrVector.h> #include <AK/OwnPtr.h> +#include <AK/String.h> #include <AK/Vector.h> 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<A> ints; + ints.resize(32); + + for (size_t idx = 0; idx < 32; ++idx) + EXPECT(ints[idx].initialized); +} + TEST_MAIN(Vector) |