public static CPackage *ConvertToCPackage( this NativeEnvironment e, Core.Package.Package package) { var pkg = e.AllocateStruct <CPackage>(); pkg->magic = e.ToCString(package.Magic); pkg->header_size = package.HeaderSize; pkg->entry_count = package.Entries.Count; if (package.Entries.Count == 0) { pkg->entries = null; return(pkg); } var entryArray = e.AllocateStructArray <CPackageEntry>(package.Entries.Count); for (var i = 0; i < package.Entries.Count; i++) { ConvertCPackageEntry(e, package.Entries[i], &entryArray[i]); } pkg->entries = entryArray; return(pkg); }
public Core.Package.Package ReadFrom(BinaryReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } var packageStart = reader.BaseStream.Position; var package = new Core.Package.Package { Magic = reader.ReadStringI32Size(maxLength: 32) }; ReadEntries(package.Entries, reader); var dataStart = (int)reader.BaseStream.Position; package.HeaderSize = (int)(dataStart - packageStart); if (!ReadEntryBytes) { return(package); } PopulateEntriesWithData(dataStart, package.Entries, reader); return(package); }
public Core.Package.Package ReadFromStream(Stream stream) { using (var reader = new BinaryReader(stream, Encoding.UTF8, true)) { var packageStart = stream.Position; var package = new Core.Package.Package { Magic = reader.ReadStringI32Size(32) }; ReadEntries(package.Entries, reader); var dataStart = (int)stream.Position; package.HeaderSize = (int)(dataStart - packageStart); if (!ReadEntryBytes) { return(package); } PopulateEntriesWithData(dataStart, package.Entries, reader); return(package); } }
public void WriteTo(BinaryWriter writer, Core.Package.Package package) { if (package == null) { throw new ArgumentNullException(nameof(package)); } if (writer == null) { throw new ArgumentNullException(nameof(writer)); } if (package.Entries.Count == 0) { throw new Exception("Package entries is empty"); } writer.WriteStringI32Size(package.Magic); WriteEntriesHeader(package.Entries, writer); WriteBody(package.Entries, writer); }