 |

31.03.2021, 10:12
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
|
|
|

31.03.2021, 13:59
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
C++:
Код:
struct
poolBitmap
{
unsigned
char
nId
:
7
;
bool
bEmpty
:
1
;
}
;
+0 это new CCopPed[n];
+4 это new poolBitmap[n];
+8 это n
+12 это номер самого последнего педа в пуле, т.е. может быть такая картина:
ped nullptr nullptr ped nullptr ped
По оффсету 12 будет лежать значение 6
UPD: возможно там будет не 6, а 1, как индекс первого свободного элемента куда можно воткнуть нового педа при создании, не помню точно
|
|
|

31.03.2021, 14:03
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Сообщение от KiN4StAt
C++:
Код:
struct
poolBitmap
{
unsigned
char
nId
:
7
;
bool
bEmpty
:
1
;
}
;
+0 это new CCopPed[n];
+4 это new poolBitmap[n];
+8 это n
+12 это номер самого последнего педа в пуле, т.е. может быть такая картина:
ped nullptr nullptr ped nullptr ped
По оффсету 12 будет лежать значение 6
UPD: возможно там будет не 6, а 1, как индекс первого свободного элемента куда можно воткнуть нового педа при создании, не помню точно
Как этим пользоваться?
|
|
|

31.03.2021, 14:16
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
|
|
|

31.03.2021, 14:28
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Первым же делом пошел смотреть Plugin SDK, создал тему, потому что не понял как это вообще работает и как этим пользоваться. Тупое копирование меня не устраивает
|
|
|

31.03.2021, 15:56
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
Сообщение от RECEIVER
Первым же делом пошел смотреть Plugin SDK, создал тему, потому что не понял как это вообще работает и как этим пользоваться. Тупое копирование меня не устраивает
Как-то так. (Я не эксперт в этом)
Простой пример:
[CODE]
#include
#include
using
std
::
cout
;
using
std
::
endl
;
union
CColor
{
unsigned
long
color
;
struct
{
// Сколько может уместиться байтов в unsigned long -> 4
unsigned
char
alpha
;
unsigned
char
red
;
unsigned
char
green
;
unsigned
char
blue
;
}
;
CColor
(
)
{
this
->
alpha
=
255
;
this
->
red
=
255
;
this
->
green
=
255
;
this
->
blue
=
255
;
cout
alpha
red
green
blue
color
Сложный пример:
[CODE]
#include
#include
using
std
::
cout
;
using
std
::
endl
;
union
tPoolObjectFlags
{
struct
{
// Сколько байтов может поместиться в unsigned char -> 1
// Здесь утверждать ничего не стану, ибо сам хз
unsigned
char
nId
:
7
;
bool
bEmpty
:
1
;
// Возможно, имеется виду размер типа поля поделить на кол-во битов. Т.е:
// sizeof(unsigned char) / 7 -> 255 / 7
// sizeof(bool) / 1 -> 1 / 1
}
;
unsigned
char
value
;
tPoolObjectFlags
(
)
{
unsigned
char
byteId
=
2
;
bool
bEmpty
=
true
;
this
->
value
=
value
|
(
byteId
)
;
this
->
value
=
value
|
(
bEmpty
nId
bEmpty
value
value
=
0
;
this
->
nId
=
2
;
this
->
bEmpty
=
true
;
cout
nId
bEmpty
value
|
|
|

31.03.2021, 16:02
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
[QUOTE="Musaigen"]
this->value = value | (byteId); this->value = value | (bEmpty
C++:
Код:
this
->
bEmpty
=
bEmpty
;
this
->
nId
=
byteId
;
|
|
|

31.03.2021, 17:23
|
|
Постоянный
Регистрация: 26.03.2016
Сообщений: 660
С нами:
5332594
Репутация:
163
|
|
Сообщение от Musaigen
struct { // Сколько байтов может поместиться в unsigned char -> 1 // Здесь утверждать ничего не стану, ибо сам хз unsigned char nId : 7; bool bEmpty : 1; // Возможно, имеется виду размер типа поля поделить на кол-во битов. Т.е: // sizeof(unsigned char) / 7 -> 255 / 7 // sizeof(bool) / 1 -> 1 / 1 }; unsigned char value;
Я тут вроде разобрался немного. nValue это unsigned char, его размер 1 байт, т.е. 8 бит. Первые 7 бит nValue будет занимать nId, последний - bEmpty.
|
|
|
|
 |
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|