diff options
| author | ljfa-ag <ljfa-ag@web.de> | 2015-06-20 14:56:29 +0200 |
|---|---|---|
| committer | ljfa-ag <ljfa-ag@web.de> | 2015-06-20 14:56:29 +0200 |
| commit | 8458a8d07f5990c33c15acfa2ac316b0a9d6ede0 (patch) | |
| tree | ea83dbd502440d9ab9ff62593a9318d000012f55 | |
| parent | af7c4d99882e02b24698d3a2beac36f637f674c7 (diff) | |
| download | Project-Tick-8458a8d07f5990c33c15acfa2ac316b0a9d6ede0.tar.gz Project-Tick-8458a8d07f5990c33c15acfa2ac316b0a9d6ede0.zip | |
Add a Product Requirements Document
| -rw-r--r-- | Requirements.md | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Requirements.md b/Requirements.md new file mode 100644 index 0000000000..d869e3cecc --- /dev/null +++ b/Requirements.md @@ -0,0 +1,53 @@ +# 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. +- /RF40/ The need for insecure operations and manual memory management should + be minimized; references and `std::unique_ptr` should be preferred before + raw pointers. +- /RF50/ Move semantics are preferred before copy semantics. + +### 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 |
