UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FPropertyCombinationPack3 Class Reference

#include <PropertyCombinationSet.h>

Static Public Member Functions

static void Unpack (const uint32 Compressed, const uint32 *&OutValues, int &OutNum)
 
static uint32 Pack (const uint32 *Values, const int Num)
 

Static Public Attributes

static constexpr uint32 BitWidth = 3
 
static constexpr uint32 StorageBitCount = 5
 
static constexpr uint32 ArrayMax = 3
 
static constexpr uint32 MaxValue = (1 << BitWidth) - 1
 
static constexpr uint32 NumPackedValues = 19
 

Detailed Description

For a TPropertyCombinationSet over bitfields with three bits, there are 19 possible sets of non-redundant corners: 8 One Corner Lists: { [000], [001], [010], [011], [100], [101], [110], [111], Proof there are no more One Corner Lists: this set already contains every possible one-element list, for all legal values from 0 to 2 ^ BitWidth - 1 9 Two Corner Lists: [001,010], [001,100], [001,110], [010,100], [010,101], [011,100], [011,101], [011,110], [101,110], Proof there are no more Two Corner Lists: Each 0-property-set corner (000) is a redundant child of all other corners, 0 two corner lists contain it. Each 1-property-set corner is a redundant child of all other corners on its high-property face. On the low-property face, 000 is a redundant child, and the other 3 corners on the face are nonreundant. This adds 3x3 == 9 corners Each 2-property-set corner is a redundant child of 111. It is further a parent of the two redundant children formed by setting one of its lowbits to 0, plus 000. There are 3 remaining corners it is non-redundant with. This adds 3x3 == 9 corners. Each 3-property-set corner (111) is a redundant parent of all other corners, 0 two corner lists contain it. Divide by 2 since each of our elements above is double-counted for x,y and y,x 2 Three Corner Lists: [001,010,100], [011,101,110] } Proof there are no more Three Corner Lists: A 1-property-set corner can not be non-redundant with two 2-property-set corners; one of the two must necessarily include the 1-property-set as a high bit. 2 1-property-set corners can not be non-redundant with a 2-property-set corner; one of the two must necessarily be one of the 2-property-set's high bits. 0-property-set corner 000 and 3-property-set corner 111 can not be non-redundant in any lists > 1 element. There are (3 choose 1) == 3 1-property-set corners and (3 choose 2) == 3 2-property-set corners, so only one list of 3 corners for each of those. Proof there are no Four+ Corner Lists: We would have to add another corner to one of the Three Corner Lists, and by the proof for three corner lists, we're out of corners that could be added non-redundantly.

Member Function Documentation

◆ Pack()

static uint32 FPropertyCombinationPack3::Pack ( const uint32 Values,
const int  Num 
)
inlinestatic

◆ Unpack()

static void FPropertyCombinationPack3::Unpack ( const uint32  Compressed,
const uint32 *&  OutValues,
int &  OutNum 
)
inlinestatic

Member Data Documentation

◆ ArrayMax

constexpr uint32 FPropertyCombinationPack3::ArrayMax = 3
staticconstexpr

◆ BitWidth

constexpr uint32 FPropertyCombinationPack3::BitWidth = 3
staticconstexpr

◆ MaxValue

constexpr uint32 FPropertyCombinationPack3::MaxValue = (1 << BitWidth) - 1
staticconstexpr

◆ NumPackedValues

constexpr uint32 FPropertyCombinationPack3::NumPackedValues = 19
staticconstexpr

◆ StorageBitCount

constexpr uint32 FPropertyCombinationPack3::StorageBitCount = 5
staticconstexpr

The documentation for this class was generated from the following file: