Перейти к содержимому


Свернуть чат Чат Открыть чат во всплывающем окне

Yakim (Watco... : (4 дней назад) бугага
lz : (неделю назад) Вытаскивал из блока.
lz : (неделю назад) Блэт, мои серваки на амазоне под раздачу попали.
Yakim (Watco... : (2 недель назад) :ph34r:
Гость : (22 Март 2018 - 09:37) Благодарю :) (предпочитаю постоянный стабильный заработок)
Yakim (Watco... : (21 Март 2018 - 19:56) пхахаха
lz : (21 Март 2018 - 16:46) Может быть, хочешь знать, как поднять бабла?
lz : (21 Март 2018 - 16:46) Кстати, а проблем с доступом к джойказино у тебя нет?
lz : (21 Март 2018 - 16:02) Активировал.
Гость : (21 Март 2018 - 15:32) Проблемы с активацией аккаунта на форуме... =)
Yakim (Watco... : (19 Март 2018 - 21:37) :ph34r:
Yakim (Watco... : (01 Февраль 2018 - 21:44) ?
Yandersen : (01 Февраль 2018 - 19:04) Проблемы?..
Yakim (Watco... : (31 Январь 2018 - 13:18) Какие проблемы?
lz : (30 Январь 2018 - 16:17) Какие проблемы? Проблемы с другими движками?
GranMinigun : (30 Январь 2018 - 12:45) Где я предлагал заняться рефакторингом? Я спрашивал, в чём именно проблемы.
Гость : (30 Январь 2018 - 07:55) пускай они там как нибудь сами, без меня)
GranMinigun : (29 Январь 2018 - 21:19) Анрил с видимым исходным кодом таки. Но да, у СруДвижка только сырцы самого движка и свободны. А что конкретно за проблемы в коде СруДвижка? Я видел, что у них в планах провести рефакторинг в ближайший апдейт или два. С точки зрения инструментария, к слову, СруДвижок серьёзно подтянулся в последних версиях, я даже решил таки поближе ознакомиться. (А вообще, мне он понравился графическими технологиями, особенно подходом к освещению.)
Yakim (Watco... : (29 Январь 2018 - 18:01) люто плюсую Егор)
lz : (29 Январь 2018 - 14:29) Движок большой, функционала много, код качественный (не как у крузис енгине) и всё такое.
lz : (29 Январь 2018 - 14:28) Анреал открытый, взрослый, на С++. Пока проект некоммерческий денег заносить никому не надо.
lz : (29 Январь 2018 - 14:27) Да не, на самом деле у меня даже где-то описано, что графический движок можно заменить при необходимости.
lz : (29 Январь 2018 - 14:27) Потому что анреал - офигенная тема.
GranMinigun : (29 Январь 2018 - 01:03) Кстати, Егор. А почему выбор движка пал именно на UE4? Какие-то предпосылки к этому были?
lz : (27 Январь 2018 - 18:39) Я подумал на карту механоидов побольше добавить для фана, а надо ж запаковывать ещё.
lz : (27 Январь 2018 - 18:39) Спс, это я и писал)
GranMinigun : (27 Январь 2018 - 18:20) Только распаковщик. Сторонний. Точнее, его создал lz.
Гость : (27 Январь 2018 - 03:45) а интересно, есть ли где упаковщик для м1? в сдк или может где встроен в саму игру или редактор
Folgen : (19 Январь 2018 - 08:31) Спс.
GranMinigun : (19 Январь 2018 - 05:43) Готово. Добро пожаловать на форум, механоид.
GranMinigun : (19 Январь 2018 - 05:42) Указать, кого именно активировать, например.
Гость : (19 Январь 2018 - 00:49) Активируйте акк. Хз, нужно что-либо указывать дополнительно для этого в чате, или админы сами всех подряд активируют, кто в очереди на активацию?
GranMinigun : (13 Январь 2018 - 05:42) https://forums.unrea...sed-on-gis-data
Yakim (Watco... : (09 Январь 2018 - 00:24) Аа да? Ну окей)
GranMinigun : (08 Январь 2018 - 20:06) А это даже не обсуждается!
Yakim (Watco... : (08 Январь 2018 - 19:55) А кто сказал что мы пьянели?)
GranMinigun : (08 Январь 2018 - 19:48) Ну что, товарищи, протрезвели?
Yakim (Watco... : (02 Январь 2018 - 20:56) сяп)
Гость : (01 Январь 2018 - 23:57) Егорыч на праздники с каникул вернулся. За это тост! Всем маны!
lz : (30 Декабрь 2017 - 23:52) Наоборот.
Гость : (30 Декабрь 2017 - 23:16) Позвольте уточнить, для будущего наркомана прошлое это будущее или наоборот?
lz : (30 Декабрь 2017 - 22:08) Как ты его поймаешь, когда он знает, где ты его будешь ловить?
GranMinigun : (30 Декабрь 2017 - 09:12) Ловите наркомана из будущего!
PA3UJIb : (30 Декабрь 2017 - 06:37) С новым 2018 годом! А то старый-то 2018 мы и не видели даже
Yakim (Watco... : (29 Декабрь 2017 - 19:46) С наступающим)

Yandersen

Регистрация: 06 Июл 2014
OFFLINE Активность: неделю назад
*****

Мои темы

[asm.hpp] - библиотека базовых функций

18 Июль 2017 - 19:21

Простейшие функции, написанные по большей части прямо на ассемблере:

 

asm.hpp

 

Справочник:

unsigned int asmBestBufferSize( unsigned int DataSize )

Вычисляет рекомендуемый размер буффера для хранения данных указанного размера.

В случае DataSize=0 возвращает 0;

для 1/2/3/4 байт возвращает 4;

для 4 < DataSize <= 2^31 вычисляет результат путём округления вверх до ближайшей степени двойки (8 для 5/6/7/8, 16 для 9/10/.../16 и т.д.);

если DataSize > 2^31, возвращает 2^32-1 (максимум).

void asmCopyMemory( void* Destination, const void* Source, unsigned int ByteCount )

Улучшенный эквивалент стандартной memmove - копирует кусок памяти размером "ByteCount" из "Source" в "Destination". Не ругается на нулевые адреса в аргументах (ничего тогда не делает). Частичное наложение копируемых кусков допустимо.

void* asmCompareBuffers( const void* Buffer1, const void* Buffer2, unsigned int ByteCount )

Сравнивает два массива ("Buffer1" и "Buffer2") размером "ByteCount" побайтно и возвращает либо 0 (если массивы эквивалентны) либо адрес байта в первом массиве, который не эквивалентен соответствующему байту во втором массиве. Если адрес как минимум одного из массивов NULL, возвращённое значение равно нулю. Чтобы найти индекс различающихся байтов, отнимите от результата адрес первого массива.

unsigned int asmCountChars( const char *String )

Считает количество 8-битных символов в нуль-терминированной строке (эквивалент стандартной strlen). Если на входе NULL, возвращает 0.

char* asmFindChar( const char* String, char CharToFind )

Сканирует нуль-терминированную строку "String" пока не найдёт указанный байт "CharToFind". Если найдёт, вернёт его адрес, а не найдёт - тогда NULL. Нулевой указатель давать можно.

char* asmFindLastChar( const char* String, char CharToFind,
                       unsigned int *CalculatedStringLength = NULL,
                       unsigned int *TotalCharsFound = NULL )

Сканирует всю нуль-терминированную строку "String" в поисках последнего встреченного байта "CharToFind". Если найдёт, вернёт его адрес, а не найдёт - тогда NULL. Нулевой указатель давать можно. Поскольку функция так или иначе сканирует всю строку, то можно в дополнение узнать её длину (дав указатель на контейнер для переменной "CalculatedStringLength") и сколько всего искомых байтов встречено по пути ("TotalCharsFound").

void asmFillMemory( void* Ptr, char c, unsigned int ByteCount )

Заполняет "ByteCount" байт памяти начиная с адреса "Ptr" указанным байтом "с" (эквивалент стандартной memset).

void asmFillMemory( void* Buffer, const void* Item, unsigned int ItemSize, unsigned int ItemCount )

Заполняет массив "Buffer" указанным элементом "Item" в количестве "ItemCount" штук, каждый размером "ItemSize" байт. Если один из указателей NULL или общий размер массива больше 2^32-1 байт, копирования не произойдёт.

unsigned long long asmGetTimeStamp()

Возвращает 64-битный счётчик тактов процессора (обнуляется при перезагрузке системы).

char* asmSLIToStrBin( signed long int Value, char* Buffer )
char* asmULIToStrBin( unsigned long int Value, char* Buffer )
char* asmSLLIToStrBin( signed long long int Value, char* Buffer )
char* asmULLIToStrBin( unsigned long long int Value, char* Buffer )

Конвертирует 32-битное (64-битное) значение ("Value") в бинарный формат (0b101). Для конвертации нужен буффер "Buffer" размером в 35 (67) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта).

char* asmSLIToStrOct( signed long int Value, char* Buffer )
char* asmULIToStrOct( unsigned long int Value, char* Buffer )
char* asmSLLIToStrOct( signed long long int Value, char* Buffer )
char* asmULLIToStrOct( unsigned long long int Value, char* Buffer )

Конвертирует 32-битное (64-битное) значение ("Value") в восьмеричный формат (0101). Для конвертации нужен буффер "Buffer" размером в 13 (24) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта).

char* asmSLIToStrHex( signed long int Value, char* Buffer )
char* asmULIToStrHex( unsigned long int Value, char* Buffer )
char* asmSLLIToStrHex( signed long long int Value, char* Buffer )
char* asmULLIToStrHex( unsigned long long int Value, char* Buffer )

Конвертирует 32-битное (64-битное) значение ("Value") в шестнадцатеричный формат (0x101). Для конвертации нужен буффер "Buffer" размером в 11 (19) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта).

char* asmULIToStrDec( unsigned long int Value, char* Buffer )
char* asmSLIToStrDec( signed long int Value, char* Buffer )
char* asmULLIToStrDec( unsigned long long int Value, char* Buffer )
char* asmSLLIToStrDec( signed long log int Value, char* Buffer )

Конвертирует 32-битное (64-битное) значение ("Value") в десятичный формат (320, -783). Для конвертации нужен буффер "Buffer" размером в 11 или 12 (21 или 22) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта).

char* asmFToStrDec( float Value, char* Buffer )
char* asmDToStrDec( double Value, char* Buffer )

Конвертирует float (double) значение ("Value") в формат с плавающей запятой (2., -1.23456e-12, 6.e3). Для конвертации нужен буффер "Buffer" размером в 17 (25) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта). Количество значащих цифр для типа float - 9 (до 8 после запятой), для double - 17 (до 16 после запятой).

int asmDToStrDec( double Value, char* Buffer, int Digits )

Переводит значение ("Value") в формат

[целочисленное_значение] * 10[экспонента]

с указанным количеством цифр ("Digits") в целочисленном значении и сохраняет эту часть в буффер ("Buffer") в виде нуль-терминированной строки цифр (для отрицательных значений первым будет знак минус), а экспоненту функция возвращает. Размер буффера должен быть на два байта больше чем запрошенное количество цифр ("Digits").

unsigned long long int asmStrBinToInt( char* String )
unsigned long long int asmStrOctToInt( char* String )
unsigned long long int asmStrHexToInt( char* String )

Декодирует значение, записанное в бинарном/восьмеричном/шестнадцатеричном формате как 64-битное целочисленное беззнаковое.

signed long long int asmStrDecToInt( char* String )

Декодирует значение, записанное в десятеричном формате как 64-битное целочисленное. Допускает использование +/- знаков.

double asmStrDecToDouble( char* String )

Декодирует значение, записанное в десятеричном формате с плавающей запятой и экспонентой.


О субфоруме Code Lab

18 Июль 2017 - 14:59

Форум для публикации наработок на С++, имеющих потенциал оказаться полезными другим пользователям.

 

Рекомендуемый формат публикации - отдельный топик под каждый ресурс (отдельный файл с кодом или группа логически связанных файлов, как то хеадер с DLL-кой или LIB-ом). В первом посте должна быть ссылка на сторонний ресурс для скачивания (не грузите всё сюда, плиз).

 

Если публикуете мелочь (типа код какой-нить убер-полезной функции или сверх-ценный алгоритм), можете просто включить код прямо в пост внутрь соответствующего тега.

 

Заглавный пост несёт функцию общего описания публикуемого материала. Документацию по пользованию можно либо включить в пост, либо дать ссылку на документ с нею (либо сторонний сайт).

 

Не забывайте о тегах для создаваемого топика.