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

    +147

    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
    template<typename _Tp>
        pair<_Tp*, ptrdiff_t>
        get_temporary_buffer(ptrdiff_t __len)
        {
          const ptrdiff_t __max =
      __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
          if (__len > __max)
      __len = __max;
          
          while (__len > 0) 
      {
        _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp), 
                  std::nothrow));
        if (__tmp != 0)
          return std::pair<_Tp*, ptrdiff_t>(__tmp, __len);
        __len /= 2;                                    // !?!?!?!?!?!?!?!?
      }
          return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
        }
    
      template<typename _Tp>
        inline void
        return_temporary_buffer(_Tp* __p)
        { ::operator delete(__p, std::nothrow); }

    Запостил: CPPGovno, 02 Сентября 2011

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

    • Похоже на файл, плохо восстановленный реаниматором.
      Ответить
    • Если не удалось выделить сколько нужно, выделим сколько получится. Длина тоже возвращается.
      Ответить
    • Это редко используемая часть стандартной библиотеки C++.
      get_tempoprary_buffer возвращает кусок памяти размером, не превышающим запрошенный. Смысл в том, что вызывающему эту функцию в идеале нужен буфер размера N, но подойдет и буфер поменьше. К примеру, читаем данные из сокета.
      return_temporary_buffer этот буфер освобождает.

      Не говно. Просто не слишком полезная функциональность.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Он поставил поднос и присел перед кроватью, любуясь спящим Ромкой. Господи! Совсем же ещё несмыслёныш! А он за три дня уже умудрился избить его, отшлёпать и выпороть! Ну кто он после этого?
      Ответить

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