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

    • Я так понимаю, эпицентр сего говна - строки 17-18?
      Ответить
      • Х.з., вроде обычное перемещение элементов из одного куска памяти в другой...
        Ответить
    • На "PHP", падаль.
      Ответить
    • Как я понимаю, это какой-то самописный ReallocMem.
      Ответить
    • E - exception-safety
      Ответить
      • Хотя коды ошибок и странные префиксы NT и K намекают, что исключения там не используют.
        Ответить
        • Не удивлюсь, если это код Микрософта. Уж больно подозрительно, что тело начинается с NT_ASSERT.
          Ответить
        • Kmdf = Kernel-Mode Driver Framework.
          Ответить
          • И всё-таки KmdfDeallocate и KReallocate не гуглятся. Значит, это всё-таки из неизвестного публике проекта.
            Ответить
            • > Значит, это всё-таки из неизвестного публике проекта.
              Гугл порезал с выдачи проприетарные сорцы (было несколько вытечек). Вот там грепать надо.
              Ответить
              • > Гугл порезал
                Роман, верни ссылки!
                Ответить
                • Но сначала стену
                  Ответить
                • на ya.ru
                  Ответить
                  • То есть Rндекс не просто проксирует результаты гугла?
                    Ответить
                  • Яндекс по запросу "KmdfDeallocate" выдаёт одну ссылку. Угадайте с нуля раз какую. Кстати, его AI исправляет запрос, считая, что я сделал опечатку, поэтому приходится нажимать "Отменить". Вот нахрена этот AI в поисковиках?

                    Гугл тоже выдаёт одну ссылку. Туда же.
                    Ответить

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