+// Loads an std::vector<T> of size num_elements from a file.
+template<typename T>
+static void LoadStructVector(FILE *src_file, size_t num_elems, std::vector<T>& dest)
+{
+ size_t structsread = 0;
+ dest.resize(num_elems);
+ structsread = fread(dest.data(), sizeof(T), num_elems, src_file);
+ if (structsread != num_elems)
+ Fatal("Only read %u structs (expected %u)!", structsread, num_elems);
+}
+
+// Saves an std::vector<T> to a file. Size must be saves separately.
+template<typename T>
+static void SaveStructVector(FILE *dst_file, std::vector<T>& src)
+{
+ size_t written = 0;
+ written = fwrite(src.data(), sizeof(T), src.size(), dst_file);
+ if (written != src.size())
+ Fatal("Only wrote %u structs (expected %u)!", written, src.size());
+}
+
+static void WriteChunkHeader(FILE *dst_file, DocChunkTypes type, uint32_t size)
+{
+ size_t written = 0;
+ written = fwrite(&type, sizeof(type), 1, dst_file);
+ if (written != 1)
+ Fatal("Could not write Chunk header! (ID)");
+ written = fwrite(&size, sizeof(size), 1, dst_file);
+ if (written != 1)
+ Fatal("Could not write Chunk header (size)!");
+}
+
+static bool ReadChunkHeader(FILE *src_file, DocChunkTypes& type, uint32_t& size)
+{
+ if (fread(&type, sizeof(DocChunkTypes), 1, src_file) != 1)
+ return false;
+ if (fread(&size, sizeof(uint32_t), 1, src_file) != 1)
+ return false;
+ return true;
+}
+