2.3 KiB
2.3 KiB
libnbt++2 Product Requirements Document
Purpose
Provide a C++ interface for working with NBT data, particularly originating from Minecraft.
Scope
External Minecraft utilities that read or manipulate parts of savefiles, such as:
- (Graphical) NBT editors
- Inventory editors
- Tools for reading or changing world metadata
- Map editors and visualizers
Definitions, Acronyms and Abbreviations
- libnbt++1: The predecessor of libnbt++2.
- Minecraft: A sandbox voxel world game written in Java, developed by Mojang.
- Mojang's implementation: The NBT library written in Java that Mojang uses in Minecraft.
- NBT: Named Binary Tag. A binary serialization format used by Minecraft.
- Tag: A data unit in NBT. Can be a number, string, array, list or compound.
Product Functions
- /RF10/ Reading and writing NBT data files/streams with or without compression.
- /RF20/ Representing NBT data in memory and allowing programs to read or manipulate it in all the ways that Mojang's implementation and libnbt++1 provide.
- /RF30/ A shorter syntax than in libnbt++1 and preferrably also Mojang's implementation.
- /RF35/ Typesafe operations (no possibly unwanted implicit casts), in case of incompatible types exceptions should be thrown.
- /RF40/ The need for insecure operations and manual memory management should
be minimized; references and
std::unique_ptr
should be preferred before raw pointers. - /RF55/ A wrapper for tags that provides syntactic sugar is preferred
before raw
std::unique_ptr
values. - /RF50/ Move semantics are preferred before copy semantics.
- /RF55/ Copying tags should be possible, but only in an explicit manner.
- /RF60/ Checked conversions are preferred, unchecked conversions may be possible but discouraged.
Product Performance
- /RP10/ All operations on (not too large) NBT data should not be slower than their counterparts in Mojang's implementation.
- /RP20/ The library must be able to handle all possible NBT data that Mojang's implementation can create and handle.
- /RP30/ Often used operations on large Lists, Compounds and Arrays must be of at most O(log n) time complexity if reasonable. Other operations should be at most O(n).
Quality Requirements
- Functionality: good
- Reliability: normal
- Usability: very good
- Efficiency: good
- Changeability: normal
- Transferability: normal