Pull to refresh

Comments 11

рослин уместила 12 булевых свойств и одно байтовое, в единственное ushort поле.

12 бит плюс 8 бит равно 16 бит?

Почти, само свойство(SmallSlotCount) возвращает байт, но получает она его путем чтение только 4 битов из ushort data - то есть получается 12 + 4

Поддержка структур присутствует, класс тут сделан чисто ради примера. Вообще если будете использовать структуры с этой библиотекой, то поля желательно самостоятельно создавать и через FieldName=nameof ссылаться на них

Выглядит полезно.

Но вопрос порядка полей? при интеропе он очень важен.

К сожалению это нельзя контролировать, однако вы можете заранее создать поля в нужном порядке, а потом через FieldName = nameof указывать уже на существующие поля

Пример того как это можно сделать https://github.com/Asaicraft/PropertyBitPack/blob/master/PropertyBitPack.Example/PackedStruct.cs

ааа, понятно, увы и ах, на данный момент это не возможно, мб следует добавить такую фичу

Порядок бит будет соответствовать порядку свойств в классе/структуре. Source generator обрабатывает их последовательно по тексту кода и назначает биты тоже последовательно.

Так бы сюда просится свойство атрибута, определяющее порядок/номер бита, но ту как-то еще дополнительные проверки на коллизии надо прикрутить тогда и, желательно, чтобы они срабатывали прямо в IDE. Кстати, это позволит решить проблему с пропуском бит, которые сейчас решаются только созданием фейковых полей, насколько я вижу. Минус в том, что и так все довольно перегружено выглядит (модификаторы partial плюс атрибуты с параметрами), так и еще и этот параметр добавится.

Обычно для этого используют enum с аттрибутом [Flag]. В чем отличие/преимущество предложенного подхода?

Если у вас только булевые значение, то скорее всего обычного энама хватит, но можно же комбинировать, в рослине например для этого используеться ushort где первые 12 битов хранят флаги(тот самый энам) а остальные 4 бита под SlotCount, таким образом можно немного с экономить памяти

Sign up to leave a comment.

Articles