From 38693e1d6ca7f05d9488348ddf298488d1cc0995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 6 Sep 2015 23:35:58 +0200 Subject: GH-1047 parse world files and integrate MCEdit with world page --- depends/libnbtplusplus/PRD.md | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 depends/libnbtplusplus/PRD.md (limited to 'depends/libnbtplusplus/PRD.md') 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 -- cgit v1.2.3