From e5ae5cec060fb0cef89d4c86464e3b882e8c4b81 Mon Sep 17 00:00:00 2001 From: Siva Chandra Reddy Date: Tue, 20 Dec 2022 23:21:56 +0000 Subject: [PATCH] [libc][Obvious] Remove the unused cpp::vector class. This can be easily resurrected if required in future. It calls malloc directly. So, instead of updating an unused piece to the newer pattern of using the custom operator new, this patch just deletes it. --- libc/src/__support/CPP/CMakeLists.txt | 8 --- libc/src/__support/CPP/vector.h | 92 ----------------------------- libc/test/src/__support/CPP/CMakeLists.txt | 10 ---- libc/test/src/__support/CPP/vector_test.cpp | 37 ------------ 4 files changed, 147 deletions(-) delete mode 100644 libc/src/__support/CPP/vector.h delete mode 100644 libc/test/src/__support/CPP/vector_test.cpp diff --git a/libc/src/__support/CPP/CMakeLists.txt b/libc/src/__support/CPP/CMakeLists.txt index 3bab78c..c271a5b 100644 --- a/libc/src/__support/CPP/CMakeLists.txt +++ b/libc/src/__support/CPP/CMakeLists.txt @@ -82,14 +82,6 @@ add_header_library( ) add_header_library( - vector - HDRS - vector.h - DEPENDS - libc.include.stdlib -) - -add_header_library( atomic HDRS atomic.h diff --git a/libc/src/__support/CPP/vector.h b/libc/src/__support/CPP/vector.h deleted file mode 100644 index e8873d1..0000000 --- a/libc/src/__support/CPP/vector.h +++ /dev/null @@ -1,92 +0,0 @@ -//===-- A self contained equivalent of std::vector --------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_LIBC_SRC_SUPPORT_CPP_VECTOR_H -#define LLVM_LIBC_SRC_SUPPORT_CPP_VECTOR_H - -#include // For size_t. - -#include // For malloc/realloc/free - -namespace __llvm_libc { -namespace cpp { - -// This implementation does not have a templated allocator since that feature -// isn't relevant for a libc setting. - -// Vector is a templated dynamically resizable array. This implementation is -// only meant for primitives or structs, and will not call destructors on held -// objects. -template class vector { - T *data_array; - size_t array_size; - size_t num_elements = 0; - static constexpr size_t DEFAULT_SIZE = 16; - static constexpr size_t GROWTH_FACTOR = 2; - static constexpr size_t MAX_SIZE = ~size_t(0); - -public: - constexpr vector() : array_size{DEFAULT_SIZE} { - data_array = static_cast(malloc(DEFAULT_SIZE * sizeof(T))); - } - - constexpr vector(const vector &other) = delete; - constexpr vector(const vector &&other) = delete; - - ~vector() { free(data_array); } - - constexpr vector &operator=(vector &other) = delete; - constexpr vector &operator=(vector &&other) = delete; - - constexpr void reserve(size_t new_size) { - if (new_size >= array_size) - increase_size(new_size + 1); - } - - constexpr void push_back(const T &value) { - if (num_elements >= array_size) - increase_size(num_elements + 1); - data_array[num_elements] = value; - ++num_elements; - } - - constexpr T &operator[](size_t pos) { return data_array[pos]; } - constexpr T *data() { return data_array; } - constexpr const T *data() const { return data_array; } - - constexpr bool empty() const { return num_elements == 0; } - - constexpr size_t size() const { return num_elements; } - constexpr size_t max_size() const { return MAX_SIZE; } - - constexpr size_t capacity() const { return array_size; } - -private: - static constexpr size_t MAX_DIV_BY_GROWTH = MAX_SIZE / GROWTH_FACTOR; - - // new_size is treated as the minimum size for the new array. This function - // will increase array_size by GROWTH_FACTOR until there is space for new_size - // items. - constexpr void increase_size(size_t new_size) { - size_t temp_size = array_size; - if (new_size >= MAX_DIV_BY_GROWTH) { - temp_size = new_size; - } else { - if (temp_size == 0) - temp_size = 1; - while (temp_size <= new_size) - temp_size = temp_size * GROWTH_FACTOR; - } - array_size = temp_size; - data_array = static_cast(realloc(data_array, array_size * sizeof(T))); - } -}; -} // namespace cpp -} // namespace __llvm_libc - -#endif // LLVM_LIBC_SRC_SUPPORT_CPP_VECTOR_H diff --git a/libc/test/src/__support/CPP/CMakeLists.txt b/libc/test/src/__support/CPP/CMakeLists.txt index 99ad849..b9696ba 100644 --- a/libc/test/src/__support/CPP/CMakeLists.txt +++ b/libc/test/src/__support/CPP/CMakeLists.txt @@ -42,16 +42,6 @@ add_libc_unittest( ) add_libc_unittest( - vector_test - SUITE - libc_cpp_utils_unittests - SRCS - vector_test.cpp - DEPENDS - libc.src.__support.CPP.vector -) - -add_libc_unittest( int_seq_test SUITE libc_cpp_utils_unittests diff --git a/libc/test/src/__support/CPP/vector_test.cpp b/libc/test/src/__support/CPP/vector_test.cpp deleted file mode 100644 index a27eafa..0000000 --- a/libc/test/src/__support/CPP/vector_test.cpp +++ /dev/null @@ -1,37 +0,0 @@ -//===-- Unittests for vector ----------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/__support/CPP/vector.h" -#include "utils/UnitTest/Test.h" - -TEST(LlvmLibcVectorTest, SimpleConstructor) { - __llvm_libc::cpp::vector vec; -} - -TEST(LlvmLibcVectorTest, OrderedWriteOrderedReadTest) { - __llvm_libc::cpp::vector vec; - - for (size_t i = 0; i < 100; i = i + 2) { - vec.push_back(i); - } - ASSERT_EQ(vec.size(), size_t(50)); - ASSERT_GE(vec.capacity(), vec.size()); - for (size_t j = 0; j < vec.size(); ++j) { - ASSERT_EQ(vec[j], j * 2); - } -} - -TEST(LlvmLibcVectorTest, ReserveTest) { - __llvm_libc::cpp::vector vec; - - size_t prev_capacity = vec.capacity(); - - vec.reserve(prev_capacity * 2); - - ASSERT_GT(vec.capacity(), prev_capacity * 2); -} -- 2.7.4