bitset - Форум


Правила форума ·

  • Страница 1 из 1
  • 1
Форум » Warcraft III » Библиотека » bitset
bitset

SirNikolas

#1
bitset - это класс в языке C++, позволяющий оперировать каждым отдельным битом в числе. Это настолько полезная штука, что я решил реализовать ее в JASS. Конечно, у этой версии возможностей меньше, чем у оригинала, но для WarCraft это не важно.

Я сделал две версии - для vJASS (требуется JNGP) и для простого JASS2. Думаю, не надо говорить, какая из них более удобная и обладает большим функционалом.

В данный момент система поддерживает работу только с 30 битами (из 32), однако это будет исправлено в будущем.

Самое простое использование bitset - перевод чисел из десятичной системы счисления в двоичную и обратно:
Code
local bitset bs = bitset.create()
set bs.integer = 100
call BJDebugMsg("dec(" + I2S(bs.integer) + ") = bin(" + bs.string + ")")
set bs.string = "1100100"
call BJDebugMsg("dec(" + I2S(bs.integer) + ") = bin(" + bs.string + ")")
call bs.destroy()
Сначала нужно создать объект bitset и записать в его переменную этого типа. Затем мы можем получить доступ к десятичному представлению числа и двоичной строке, используя "<имя переменной>.integer" и "<имя переменной>.string". После использования объект необходимо уничтожить, иначе будет своеобразная утечка памяти.

Создавать bitset можно не только через .create():
Code
local bitset bs = bitset.create()//Создает bitset с нулевым начальным значением
local bitset bs2 = bitset.initialize(10)//Создает объект и присваивает начальное значение 10
local bitset bs3 = bitset.parse("10100")//Создает объект и присваивает начальное значение, соответствующее переданной двоичной строке, т. е. 20


Также с помощью этой системы можно получать или изменять конкретные биты в числе с помощью квадратных скобок:
Code
local bitset bs = bitset.initialize(10)//"1010"
set bs[0] = true
call BJDebugMsg(bs.string)//Выведет "1011"
set bs[1] = false
call BJDebugMsg(bs.string)//Выведет "1001"
set bs[3] = true
call BJDebugMsg(bs.string)//Выведет "1001" - значение не изменилось
if bs[2] == false then
     call BJDebugMsg("Третий бит равен 0")
endif
call bs.destroy()
Заметьте, что биты нумеруются справа налево, с нуля.

И, наконец, можно "вырезать" и "заменять" целые группы битов:
Code
local bitset bs = bitset.parse("10011100")//156
call BJDebugMsg(I2S(bs.cut(1, 3)))//Вырезает со второго по четвертый биты ("110"); выводит их десятичное представление - 6
call bs.replace(0, 2, 2)//Заменяет с первого по третий биты двоичной строкой, соответствующей числу 2 ("010")
call BJDebugMsg(bs.string)//Выведет "10011010"
call bs.destroy()


В демонстрационной карте приведено четыре примера практического применения класса bitset.

Скачать v1.0
Скачать v1.0 JASS2
"I will make this the first approved cJass-only resource here on the Hive" - Bribe about ALL.

H_A_PK

#2
Quote (SirNikolas)
перевод чисел из десятичной системы счисления в двоичную и обратно

:0, хм, лучшеб написал md5 хеширование информации, чем давать материал 8 класса )
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

Ty3uK

#4
И что хэширование информации даст? Если разрабатывать подпись карты, которая базируется на хэше карты или кэша, то да. А иначе, какой смысл шифровать данные? Я думаю мало людей хотят сломать тот же ткок
Аниме - такая вещь, которая балансирует на грани "надоевшего" и "нового" из-за Наруто в основном. © [DUOS]
GUI Must Die v1.1 | Arena Multiboard

H_A_PK

#5
Quote (Ty3uK)
И что хэширование информации даст? Если разрабатывать подпись карты, которая базируется на хэше карты или кэша, то да. А иначе, какой смысл шифровать данные? Я думаю мало людей хотят сломать тот же ткок

ну например я же давно хочу создать онлайн РПГ на 50 и более человек, там-то и нужно подобное
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

Ty3uK

#6
Для этого сначала желательно написать свою платформу типа гарены, которая позволить вертеть мультик варика на одном месте
Аниме - такая вещь, которая балансирует на грани "надоевшего" и "нового" из-за Наруто в основном. © [DUOS]
GUI Must Die v1.1 | Arena Multiboard

H_A_PK

#7
Quote (Ty3uK)
Для этого сначала желательно написать свою платформу типа гарены, которая позволить вертеть мультик варика на одном месте

я не говори что это не нужно D
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

Ty3uK

#8
Ну так а я и не сказал, что ты такое сказал. Я уточнил, что для разработки такого проекта нужна своя платформа. Хотя на хгм уже сделали это в одном проекте. Суть не в этом. Какой смысл в шифровании данных, если ты их еще нигде не используешь? О.о
Аниме - такая вещь, которая балансирует на грани "надоевшего" и "нового" из-за Наруто в основном. © [DUOS]
GUI Must Die v1.1 | Arena Multiboard

H_A_PK

#9
Ty3uK, саве лоад, зашифровка огромных строчек в одну небольшую)
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

Ty3uK

#10
Ну это офк, я и не спорю happy но мд5 больше оправдывает себя в шифрофке значимых данных. Имхо

Добавлено (21.12.11, 15:28)
---------------------------------------------
Ибо опять же, ткок еще никто не захотел ломать happy

Аниме - такая вещь, которая балансирует на грани "надоевшего" и "нового" из-за Наруто в основном. © [DUOS]
GUI Must Die v1.1 | Arena Multiboard

H_A_PK

#11
Ty3uK, но, мд5 хеширования ещё никто не писал на Jass
ушёл ломать tkok
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D
Форум » Warcraft III » Библиотека » bitset
  • Страница 1 из 1
  • 1
Поиск: