Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }