summaryrefslogtreecommitdiff
path: root/AK
diff options
context:
space:
mode:
authorasynts <asynts@gmail.com>2020-09-07 13:17:12 +0200
committerAndreas Kling <kling@serenityos.org>2020-09-08 14:01:21 +0200
commit70dd97c46e5e45ce460cbc9186baa961fc070216 (patch)
tree867863099ca4f3970f4d5f9b5742849b41dd4c75 /AK
parentec1080b18add64c72dfc1fed1953f9e30876c26e (diff)
downloadserenity-70dd97c46e5e45ce460cbc9186baa961fc070216.zip
AK: Remove FixedArray class.
Diffstat (limited to 'AK')
-rw-r--r--AK/FixedArray.h165
-rw-r--r--AK/Forward.h4
-rw-r--r--AK/Tests/TestFixedArray.cpp81
-rw-r--r--AK/Tests/TestVector.cpp16
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)