Кресты / Говнокод #8119 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 ohlol, (Updated )

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8