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

    +154

    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    class Allocator
    {
    public:
      
      virtual void *Alloc (size_t) = 0;
      virtual void Dealloc (void *) = 0;
    
      struct Allocation
      {
        Allocator *m_pAllocator[1];
    
        static void Dealloc (void *ptr)
        {
          if (ptr)
            ((Allocator **)ptr)[-1]->Dealloc (((Allocator **)ptr)-1);
        }
      };
    };
    
    class UsesAllocator
    {
    public:
      void *operator new (size_t aSize,Allocator &aAllocator)
      {
        Allocator::Allocation *pResult =
          (Allocator::Allocation *)
          aAllocator.Alloc (aSize+sizeof (Allocator::Allocation));
        if (!pResult) throw std::bad_alloc ();
        pResult->m_pAllocator[0] = &aAllocator;
        return pResult->m_pAllocator+1;
      }
    
      void *operator new [] (size_t aSize,Allocator &aAllocator)
      {
        Allocator::Allocation *pResult =
          (Allocator::Allocation *)
          aAllocator.Alloc (aSize+sizeof (Allocator::Allocation));
        if (!pResult) throw std::bad_alloc ();
        pResult->m_pAllocator[0] = &aAllocator;
        return pResult->m_pAllocator+1;
      }
    
      void operator delete (void *ptr,Allocator &)
      { Allocator::Allocation::Dealloc (ptr); }
    
      void operator delete (void *ptr)
      { Allocator::Allocation::Dealloc (ptr); }
    
      void operator delete [] (void *ptr,Allocator &)
      { Allocator::Allocation::Dealloc (ptr); }
    
      void operator delete [] (void *ptr)
      { Allocator::Allocation::Dealloc (ptr); }
    };
    ...
    
    class MyClass: /*virtual*/ public UsesAllocator
    {
    public:
      ...
    };
    ...
    MyClass *PROFIT = new (allocatorOfOurInterest) MyClass (...);

    http://www.gamedev.ru/flame/forum/?id=153274

    >Посоны! Оказывается, оператор new можно перегружать!

    Запостил: ohlol, 08 Октября 2011

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

    • ORLY?
      Ответить
    • Дали дураку в руки стеклянный хуй...
      Ответить
    • Почему на гейсдеве столько быдлокодеров?
      Ответить
    • Самый сок [-1]
      Ответить
    • Посоны! Оказывается, гейдевщики заперлись на говнокод и минусуют своё говно!
      Ответить
    • показать все, что скрытоПодовляющее число гейдевщиков пишут на плюсах.
      Все плюсисты, как мы уже когда то выяснили, - пидорасы.
      _____________Отсюда вывод:
      \/
      ГЕЙдев.сру - отличное название для их сайта.
      Ответить
    • Это ж С++...
      Ответить
    • Вот интересно, Pushkoff там и пушков здесь -- один и тот же человек? По-моему наш пушков тоже был из геймдева.
      Ответить
    • ios_base — это ведь база для iOS, верно?
      Ответить
      • Речь про киску?
        Ответить
        • мокреньку


          Кстати, а ты знаешь, что кроме ios была еще catos?
          Когда сиська купила производителя свитчей каталиста, там была своя ос, и немного другие команды.
          Ответить
          • К сожалению, не знаю операционок для такого оборудования. Но заметил, чтопри трассировке маршрутов иногда всплывают имена типа cat1, cat2, cat3 etc. Всё думал, в честь каких котов их назвали. А это Каталист, оказывается.

            Из похожего: на строительной технике Caterpillar красуется надпись CAT.
            Ответить
            • надеюся, это не категории витой пары.


              Да, роутинг свитчи (aka level 3 switchs в терминлогии сиси) могут делать несложный роутинг, потому они видны в трейсах иногда.

              Роутинг это обычо:
              1. узреть в ethernet кадре IP заголовок с DST
              2. накласть нанего маску тупым AND
              3. получить по табле маршрутизации (FIB или как оно там) адрес куда дальше слать

              Причем это всё чуть ли не хардварно делалось

              Всякую хитрую питушню вроде протоколов маршрутизации, стейтфуйл файрволов, сурс роутинга и манглинга свичи не умели.

              Но правда так было цать лет назад. Может быть ща уже умеют
              Ответить
      • Hello, Mr Pubseekoff
        Ответить
        • Pubsubhubbub
          Ответить
          • Вот в первую ссылку ткнул, и сразу в пхп

            https://github.com/pubsubhubbub/wordpress-pubsubhubbub/blob/master/tests/test-functions.php


            Сука, чо с этим людями не так??

            Ведь написал же, закоммитил, программистом себя считает
            Ответить
            • Я тоже когда первый тест пишу, то максимально простым, чтоб просто запускался. А потом наращиваю мясом.
              Ответить
              • Я тоже когда первый тест пишу, то максимально простым, чтоб просто запускался. А потом уже надо писать второй тест, потом третий...

                ftfy
                Ответить
                • Я когда код пишу, то пишу его максимально грязно, просто чтоб запускался. А потом

                  а потом нужо новый код писать, а потом еще один, и еще
                  Ответить
              • >тест пишу

                А у меня некоторые коллеги тестов не пишут. Говорят, тесты тормозят, мигают, не решают всех проблем, все протстировать невозможно, их надо поддерживать, и вообще QA найдет баги, если они там есть, так зачем тратить время на тесты?

                Я обычно лёд прикладываю
                Ответить
        • Нужно поменять себя имя на Шоманик Пабсиков. Интересно, ктонить врубица?
          Ответить
      • Нет, для IOS.
        Ответить
        • А в чём отличие?
          Ответить
        • Darwin который?
          Ответить
          • циско - полнейшие куколды, которые позволяли яббле пиздить у них свои трейдмарки
            Ответить
            • Зато циски тоже кое-кого выебли

              см историю про CARP, сицску, IETF, IANA и Тео конечно же Де Раата
              Ответить

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