Обновить
84
Пётр@Error1024

Разработчик

0,1
Рейтинг
50
Подписчики
Отправить сообщение
Безусловно, есть и бОльшие функции нежели эта, данная функция пример функции имеющей большой «когнитивный» размер — очень много надо неочевидных связей держать в голове, написать ее было сложно, читать спустя время — не менее сложно. При том что имел дело с функциями под 700 строк, но достаточно линейными, чтобы не вызывать сложностей в написании/чтении.
Я бы рад не писать таких огромных функций, с кучей сущностей, однако далеко не всегда вызов функции «бесплатен».
код
// BEGIN $RawMaskBlit(WriteByte1, WriteByte2, WriteByte3, WriteByte4)$. Do not change this line!
void ZXRawMaskBlitCopy(ZXBitmapRef bitmap, int x, int y,
                   ZXBitmapRef src, int srcX, int srcY, int srcWidth, int srcHeight, ZXData maskData)
{
    /* dest and src */
    ZXData pScan, pSrcScan, pMaskScan, pScanEnd;
    ZXData p, pSrc, pMask;
    unsigned char b, m;
    int scan, srcScan;
    /* offsets, flags, etc */
    int offset, srcOffset, endPixels;
    int fullBytes, endLine;
    int compRealOffset, realOffset;
    int isRegular;
    
    /* calculate the sizes of scan lines */
    scan = BitmapScanSize(bitmap);
    srcScan = BitmapScanSize(src);
    
    /* get pointers to a byte corresponding to a pixel */
    pScan = BitmapPixelPtr(bitmap, x, y);
    pSrcScan = BitmapPixelPtr(src, srcX, srcY);
    pMaskScan = PixelPtrData(maskData, srcScan, srcX, srcY);
    /* calculating end vertical line */
    endLine = y + srcHeight;
    
    /* bitmap offset */
    offset = x % 8;
    /* src offset */
    srcOffset = srcX % 8;
    
    /* get information about how much pixels should be shifted, */
    /* important: when (offset < srcOffset) one byte is completely absorbed when outputting the left byte */
    if(offset >= srcOffset)
        realOffset = offset - srcOffset;
    else
        realOffset = 8 - (srcOffset - offset);
    compRealOffset = 8 - realOffset;
    
    /* count of full-size bytes */
    fullBytes = CalcFullBytes(x, srcWidth);
    /* offset end pixel */
    endPixels = (x + srcWidth) % 8;
    /* regular draw or not */
    /* a) snap to right colum */
    /* b) snap to left colum */
    isRegular = (offset + srcWidth >= 8) || (offset == 0);
    
    /* main loop y */
    for(; y < endLine; y++) {
        p = pScan;
        pSrc = pSrcScan;
        pMask = pMaskScan;
        
        /* take care of left byte */
        /* xxxxxxxx XXXXXXXX xxxxxxxx */
        /* ^ we here */
        if(offset != 0) {
            if (offset >= srcOffset) {
                b = *pSrc >> realOffset;
                m = *pMask >> realOffset;
                
                /* need next byte if we haven't real offset */
                if(realOffset == 0) {
                    pSrc++;
                    pMask++;
                }
            }
            else {
                b = (*pSrc << compRealOffset) |
                (*(pSrc + 1) >> realOffset);
                m = (*pMask << compRealOffset) |
                (*(pMask + 1) >> realOffset);
                /* we completely used a byte, take a new */
                pSrc++;
                pMask++;
            }
            
            /* combine dest and src */
            if(isRegular) {
                b = (*p & rByte[offset]) | (b & lByte[offset]);/* $WriteByte1$ */
                *p = (*p & ~m) | (b & m);
            }
            else {
                b = (*p & ~(rByte[srcWidth] >> offset)) | (b & (rByte[srcWidth] >> offset));/* $WriteByte2$ */
                *p = (*p & ~m) | (b & m);
            }
            
            p++;
        }
        
        /* main loop x */
        /* xxxxxxxx XXXXXXXX xxxxxxxx */
        /*          ^ we here */
        pScanEnd = p + fullBytes;
        if(realOffset != 0) {
            for(; p < pScanEnd; p++) {
                b = (*pSrc << compRealOffset) |
                (*(pSrc + 1) >> realOffset);
                m = (*pMask << compRealOffset) |
                (*(pMask + 1) >> realOffset);
                
                /* combine dest and src */
                b = b; /* $WriteByte3$ */
                *p = (*p & (~m)) | (b & m);
                
                pSrc++;
                pMask++;
            }
        }
        else {
            for(; p < pScanEnd; p++) {
                b = *pSrc;
                m = *pMask;
                
                /* combine dest and src */
                b = b; /* $WriteByte3$ */
                *p = (*p & (~m)) | (b & m);
                
                pSrc++;
                pMask++;
            }
        }
        
        /* take care of right byte */
        /* xxxxxxxx XXXXXXXX xxxxxxxx */
        /*                   ^ we here */
        if(isRegular && endPixels) {
            if(realOffset != 0) {
                b = *pSrc << compRealOffset;
                m = *pMask << compRealOffset;
                /* .. end pixel is double byte src */
                if(endPixels > realOffset) {
                    b |= *(pSrc + 1) >> realOffset;
                    m |= *(pMask + 1) >> realOffset;
                }
            }
            else {
                b = *pSrc;
                m = *pMask;
            }
            
            /* combine dest and src */
            b = (*p & lByte[endPixels]) | (b & rByte[endPixels]);  /* $WriteByte4$ */
            *p = (*p & (~m)) | (b & m);
        }
        pScan += scan;
        pSrcScan += srcScan;
        pMaskScan += srcScan;
    }
}
// END $RawMaskBlit$. Do not change this line!

ТРИЗ еще при Сталине начали разрабатывать в СССР!

Вот это аргумент, а ещё при Сталине запретили генетику, и объявили о том что Ленин жив.
Я так понимаю на проводе поколение ЕГЭ? Ник как бэ подтверждает это.

Именно, а ещё я благодарен ЕГЭ что смог поступить в ВУЗ, находящийся в другом городе, что без ЕГЭ было бы невозможно.
Я смотрю появилась очередная разрекламированная фигня — «ТРИЗ». Для понимания которой конечно же надо пройти платные курсы.
А вот и первые отголоски ардруинозации повсеместной, промышленный девайс представляет из себя — набор шилдов.
Какой же убогий весь этот новый модный дизайн.
Вот выложу я кусочек фильма с моим лицом, а потом ваши же SONY-ковские копирасты, на мой канал на ютубе наедут.
Здесь должна быть шутка про то, что «все азиаты на одно лицо». Но ее здесь нет.
Так путь и напишут об этом, в открытом виде — «Российская сборка свободной операционной системы LINUX». А сейчас вводят людей в заблуждение, что это созданная с нуля ОС и пакет программ для нее. Это меня и бесит.
С совка еще тянется — практически вся наша «Советская» электроника/микросхемы/программы — нагло скомуниженные «аналоги» западных.
Как же вы задолбали все со своим js и вебом не к месту.
Как же у меня горит от «российского» софта для импортозамещения, в котором наше от силы — иконки, локализация, скин, пару багофич.
Ну а заказчикам это лишний повод задуматься — если у поставщика нет сертификата ФСТЭК, так ли он хорош, как рассказывает о себе?

Ме..., ну такое себе.
Ааа, ну все ясно теперь, очередной сравнительно законный способ отъема денег.
И еще, я здесь никому ничего не продаю и не предлагаю, никого ни в чем не убеждаю.

Вы как бизнес-тренер отлично понимаете, что статьи на данном ресурсе делают вам имя, а для бизнес тренера имя — самое главное:)
Что-то кому-то доказывать я не буду, ибо мне от вас ничего не нужно.

Я не прошу что-либо мне доказывать, я лишь хочу понять, вы практик или нет.(я о технических проектах, и изобретениях)
Кстати, я извиняюсь за нескромный вопрос, но все же — у вас есть примеры успешных технических/рационализаторских проектов, на которые не жалко оставить здесь ссылку?
Щас ну ооочень много бизнес тренеров, людей дающих мастер классы и т.д. но не имеющих по факту не одного реального, успешного проекта, кроме этой тренинговой деятельности.
Используется не датчик (компонент) а рамка (готовое изделие), которая протестирована и прекрасно работает. Зачем тестировать то, что уже давно протестировано? Я использовал эти рамки в другом проекте (по прямому назначению), все работает и соответствует…

Прямое назначение у рамок — как я понял сенсорный экран, там явно другие требования к точности и отсутствию периодических глюков, пыле-влаго защищенности.
Стоимость фирменных устройств взята не с потолка, да, большой процент может быть стоимостью бренда, но не в разы.
Ах да, еще поддержка, гарантийный ремонт, наличие необходимых деталей в момент поломки — это тоже не бесплатно.
Может я чего-то не понимаю, но ведь часто именно на стадии прототипирования, не на «бумаге», а в «железе» начинает рости стоимость, сильно.
Сегодня «да, китайские датчики сойдут», а завтра на тестировании прототипа «ой, а они не соответствуют своим техническим характеристикам, врут, в зависимости от фазы луны, и требуют переодической калибровки», и это только одна из возможных проблем.
Потом может всплыть то, что, они быстро засоряются на пыльном складу, ломаются от легкого прикосновения.
Ах да… корпус — это отдельная песня!
Embarcadero Rad Studio (C++Bulder) — по прежнему — один из лучших инструментов для написания C кода :)
Они еще те кидалы, на Chaos Constructions 2017 кинули всех(не уверен точно, но вроде как на $$$), в первую очередь посетителей, отказавшись выступать в последний момент, из-за «неправильного» звука на площадке.
<ИМХО>Поэтому, я только убедился в том, что реперы, в большинстве своем — мрази.</ИМХО>

Информация

В рейтинге
3 976-й
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Зарегистрирован
Активность

Специализация

Разработчик приложений, Траблшутер
От 4 000 $