コード例 #1
0
ファイル: PageObject.cs プロジェクト: koson/reader
        public void Serialize()
        {
            if (InfoObj != null)
            {
                Tags.Add(new UInt32Tag(TagId.ObjectInfoLink, InfoObj.ID));
            }

            if (LinkObj != null)
            {
                Tags.Add(new UInt32Tag(TagId.Link, LinkObj.ID));
            }

            uint[] ids = new uint[m_lstChildren.Count];
            int    i   = 0;

            foreach (BBeBObject c in m_lstChildren)
            {
                ids[i++] = c.ID;
            }
            Tags.Add(new UInt32ArrayTag(TagId.PageObjectIds, ids));

            StreamTagGroup  streamTags = new StreamTagGroup();
            MemoryStream    stream     = new MemoryStream();
            BBeBinaryWriter writer     = new BBeBinaryWriter(stream);

            BBeBSerializer.SerializeTags(m_StreamTags, writer);
            writer.Flush();

            byte[] data = new byte[writer.Position];
            Array.Copy(stream.GetBuffer(), data, writer.Position);
            streamTags.Data = data;

            Tags.Add(streamTags);
        }
コード例 #2
0
ファイル: TocObject.cs プロジェクト: koson/reader
        /// <summary>
        /// Serialize the list of TOC entries into a stream, and add that stream
        /// as a tag (really 3 tags) to this objects tags list.
        /// </summary>
        public void Serialize()
        {
            Tags.Add(new UInt16Tag(TagId.StreamFlags, (ushort)StreamContents.TableOfContents));

            Debug.Assert(FindFirstTag(TagId.StreamStart) == null);

            MemoryStream    stream = new MemoryStream();
            BBeBinaryWriter writer = new BBeBinaryWriter(stream);

            writer.Write((uint)m_Entries.Count);

            uint[] offsets = new uint[m_Entries.Count];

            // Now write out the entry offsets which we don't know yet
            // We'll come back later and overwrite
            foreach (uint offset in offsets)
            {
                writer.Write(offset);
            }

            writer.Flush();
            long dwEndOfTablePos = writer.BaseStream.Position;

            uint idx = 0;

            foreach (TocLabelEntry entry in m_Entries)
            {
                writer.Flush();
                offsets[idx] = (uint)(writer.Position - dwEndOfTablePos);

                writer.Write(entry.RefPage);
                writer.Write(entry.RefObj);
                writer.Write(entry.Text);

                idx++;
            }

            writer.Flush();
            long endPos = writer.Position;

            // Now go back and overwrite the offset table
            writer.Position = sizeof(uint);

            foreach (uint offset in offsets)
            {
                writer.Write(offset);
            }

            writer.Close();

            byte[] data = new byte[endPos];
            Array.Copy(stream.GetBuffer(), data, endPos);

            Tags.Add(new UInt32Tag(TagId.StreamSize, (uint)endPos));
            Tags.Add(new ByteArrayTag(TagId.StreamStart, data));
            Tags.Add(new IDOnlyTag(TagId.StreamEnd));
        }
コード例 #3
0
        public byte[] Serialize()
        {
            MemoryStream    stream = new MemoryStream();
            BBeBinaryWriter writer = new BBeBinaryWriter(stream);

            writer.Write(TagId.KomaPlot);
            writer.Write(m_wHeight);
            writer.Write(m_wWidth);
            writer.Write(m_dwRefObj);
            writer.Write(m_dwUnknown);
            writer.Flush();

            byte[] data = new byte[stream.Position];
            Array.Copy(stream.GetBuffer(), data, stream.Position);

            return(data);
        }