# NPC core ```plantuml class RepositoryFactory class Repository { +addStructure() +removeStructure() +getStructure() } class StackModelFactory class StackModel { +getBinary():byte[] +getStructures():Structure[] +addStructure() +removeStructure() } class StructureFactory class Structure { -name -description -fields -data +putData(Field, data) +validateData(Field, data) +updateData() } class FieldFactory{ + createField() + createFieldBinaryInformation() + createFieldLogicalInformation() + createFieldVisualInformation() + createFieldRepresentation() } class Field { - owningStructure - binary - logical - visual - representation } class RandomAccessBinary { - binaryData + setBytes(uint position, std::vector data) + setByte(uint position, uint8_t data) + setBit(uint64_t position, bool value) + setBit(uint bytePosition, uint bitPosition, bool value) + setBits(uint64_t position, uint bits, uint value) + setBits(uint bytePosition, uint bitPosition, uint bits, uint value) + getByte(uint position) + getBytes(uint position, uint bytes) + getBit(uint64_t position) + getBit(uint bytePosition, uint bitPosition) + getBits(uint64_t position, uint bits) + getBits(uint bytePosition, uint bitPosition, uint bits) + get_uint32(uint position) + get_uint16(uint position) + get_uint64(uint position) + get_float(uint position) + get_double(uint position) + get_string(uint position, uint length) + get_hex_string(uint position, uint length) + get_hex_string() } RepositoryFactory --> Repository : creates > StackModelFactory --> StackModel: creates > StructureFactory --> Structure : creates > StackModel *-- Structure Repository *-- Structure FieldFactory --> Field : creates > Structure *-- Field StackModel *-- "1" RandomAccessBinary ```