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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
class Screen
{
private:
        unsigned char *data; // do not move
        size_t size; // do not move

Запостил: USB USB, (Updated )

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

  • > do not move
    Don't move or I'll shoot!

    А почему нельзя двигать? Используются какие-то грязные хаки с доступом к полям по смещению от начала объекта?
    Ответить
      • Да даже если так, ну лежит в data указатель на видеопамять, ну и пусть себе лежит. Почему его нельзя переместить например за size?
        Ответить
        • тогда мемберы перестанут совпадать с layout-ом, который определен биосом адаптера

          получается такая структура с хелперами, если её подогнать под нужный layout и поставить указатель, то можно дальше без байтоёбства работать уже с пикселами

          в общем-то хак, но полезный
          Ответить
          • > тогда мемберы перестанут совпадать с layout-ом, который определен биосом адаптера
            > можно дальше без байтоёбства работать уже с пикселами

            Как байтоебство при работе с самой структурой Screen (которое осталось за кадром, но судя по don't move существует) связано с байтоебством при работе с пикселями (на которые указывает data)??
            Ответить
              • Где тут хелперы? Я вижу тупой указатель на массив байтов.
                Ответить
              • Или этот класс Screen накладывается на некоторую структуру (например заполняемую VESA вызовами), и затем у нее вызываются хелперы - методы для доступа к пикселям?

                Имхо классы не предназначены для наложения их на что-либо. И лучше наложить куда нужно структуру (при описании которой не забыт pragma pack!), и аккуратно скопировать нужные поля в поля класса.

                P.S. Пришел некий Вася Пупкин и добавил этому классу виртуальный метод. Кровь-кишки-распидорасило.

                Better safe than sorry...
                Ответить
            • mov edi, [ecx];
              mov ecx, [ecx + 4];

              Мда, все даже хуже чем мы тут обсуждали. Автор кода намертво пришил поля класса тупо потому, что не знал, как с ассемблера получить доступ к ним.
              Ответить
              • Лютые байтодрочеры. Тогда да, в самом деле хуже.
                Не встречал таких людей, которые ковыряли бы классы из ассемблера.
                Ответить
                • Интересно, а если автор кода писал бы на яве - он бы тоже писал очистку видеобуфера на ассемблере java машины?
                  Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8