1. C++ / Говнокод #24781

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    NTSTATUS resize(size_t new_capacity)
    {
        NT_ASSERT(new_capacity >= m_size);
        if constexpr (std::is_pod_v<T>) {
            T *new_array = static_cast<T*>(KReallocate(m_size, new_capacity, sizeof(T), m_array, POOL, TAG));
            if (!new_array) {
                return STATUS_NO_MEMORY;
            }
            m_capacity = new_capacity;
            m_array = new_array;
        } else {
            T *new_array = static_cast<T*>(KAllocate(new_capacity, sizeof(T), POOL, TAG));
            if (!new_array) {
                return STATUS_NO_MEMORY;
            }
             for (size_t i = 0; i < m_size; i++) {
                new (&new_array[i]) T(std::move(m_array[i]));
                m_array[i].~T();
            }
            KmdfDeallocate(m_array, TAG);
            m_capacity = new_capacity;
            m_array = new_array;
        }
    
        return STATUS_SUCCESS;
    }

    Запостил: gost, 17 Сентября 2018

    Комментарии (17) RSS

    Добавить комментарий