summaryrefslogtreecommitdiffstats
path: root/depends/libnbtplusplus/PRD.md
diff options
context:
space:
mode:
Diffstat (limited to 'depends/libnbtplusplus/PRD.md')
-rw-r--r--depends/libnbtplusplus/PRD.md60
1 files changed, 60 insertions, 0 deletions
diff --git a/depends/libnbtplusplus/PRD.md b/depends/libnbtplusplus/PRD.md
new file mode 100644
index 00000000..f7b46f1a
--- /dev/null
+++ b/depends/libnbtplusplus/PRD.md
@@ -0,0 +1,60 @@
+# 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