//String public bool findString(IffTag tag, ref string result, SeekPos seekPos = SeekPos.BEGIN) { //Begin chunk if (!findChunk(tag, seekPos)) { return(false); } //Read switch (currentChunk.type) { case IffWriter.ChunkType.UTF8: { //Read data byte[] bytes = reader.ReadBytes((int)currentChunk.size); result = System.Text.Encoding.UTF8.GetString(bytes); break; } default: { Debug.Assert(false); endChunk(); return(false); } } //End endChunk(); //Return return(true); }
TYPE readStruct <TYPE>(IffTag tag, TYPE defaultValue, SeekPos seekPos = SeekPos.BEGIN) where TYPE : struct { TYPE result = defaultValue; if (findStruct <TYPE>(tag, ref result, seekPos)) { return(result); } else { return(defaultValue); } }
public string readString(IffTag tag, string defaultValue, SeekPos seekPos = SeekPos.BEGIN) { string value = ""; if (findString(tag, ref value, seekPos)) { return(value); } else { return(defaultValue); } }
public Single readFloat32(IffTag tag, Single defaultValue, SeekPos seekPos = SeekPos.BEGIN) { Single value = 0; if (findFloat32(tag, ref value, seekPos)) { return(value); } else { return(defaultValue); } }
public Double readFloat64(IffTag tag, Double defaultValue, SeekPos seekPos = SeekPos.BEGIN) { Double value = 0; if (findFloat64(tag, ref value, seekPos)) { return(value); } else { return(defaultValue); } }
public byte readInt8(IffTag tag, byte defaultValue, SeekPos seekPos = SeekPos.BEGIN) { byte value = 0; if (findInt8(tag, ref value, seekPos)) { return(value); } else { return(defaultValue); } }
public Int64 readInt64(IffTag tag, Int64 defaultValue, SeekPos seekPos = SeekPos.BEGIN) { Int64 value = 0; if (findInt64(tag, ref value, seekPos)) { return(value); } else { return(defaultValue); } }
public UInt32 readUInt32(IffTag tag, UInt32 defaultValue, SeekPos seekPos = SeekPos.BEGIN) { UInt32 value = 0; if (findUInt32(tag, ref value, seekPos)) { return(value); } else { return(defaultValue); } }
//Read public bool readBool(IffTag tag, bool defaultValue, SeekPos seekPos = SeekPos.BEGIN) { bool value = false; if (findBool(tag, ref value, seekPos)) { return(value); } else { return(defaultValue); } }
public bool findFloat64(IffTag tag, ref Double result, SeekPos seekPos = SeekPos.BEGIN) { //Begin chunk if (!findChunk(tag, seekPos)) { return(false); } //Parse result = BitConverter.ToDouble(parseNumeric(), 0); //Return endChunk(); return(true); }
public bool findInt8(IffTag tag, ref byte result, SeekPos seekPos = SeekPos.BEGIN) { //Begin chunk if (!findChunk(tag, seekPos)) { return(false); } //Parse result = parseNumeric()[0]; //Return endChunk(); return(true); }
public void seekChunk(Int32 offset, SeekPos seekPos) { offset += (Int32)currentChunk.dataPos; SeekOrigin way; switch (seekPos) { default: case SeekPos.BEGIN: way = SeekOrigin.Begin; break; case SeekPos.CURRENT: way = SeekOrigin.Current; break; case SeekPos.END: way = SeekOrigin.End; break; } stream.Seek(offset, way); }
//Struct bool findStruct <TYPE>(IffTag tag, ref TYPE data, SeekPos seekPos = SeekPos.BEGIN) where TYPE : struct { //Begin chunk if (!findChunk(tag, seekPos)) { return(false); } //Read switch (currentChunk.type) { case IffWriter.ChunkType.BINARY: { //Check size int structSize = Marshal.SizeOf(data); if (currentChunk.size != structSize) { Debug.Assert(false); return(false); } //Read data byte[] bytes = reader.ReadBytes(structSize); GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned); data = (TYPE)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(TYPE)); handle.Free(); //End break; } default: { Debug.Assert(false); endChunk(); return(false); } } //End endChunk(); //Return return(true); }
public byte[] readBytes(IffTag tag, byte[] defaultValue, SeekPos seekPos = SeekPos.BEGIN) { if (findChunk(tag, seekPos)) { if (currentChunk.type != IffWriter.ChunkType.BINARY) { endChunk(); return(defaultValue); } else { var data = reader.ReadBytes((int)currentChunk.size); endChunk(); return(data); } } //Return default return(defaultValue); }
//Standard Chunks public bool findChunk(IffTag tag, SeekPos seekPos = SeekPos.BEGIN) { if (chunkStack.Count != 0) { //Move stream to beginning of chunk if (seekPos == SeekPos.BEGIN) { stream.Seek(currentChunk.dataPos, SeekOrigin.Begin); } //Look for the chunk while (true) { //Read in chunk header Chunk chunk = new Chunk(); if (!readChunk(ref chunk)) { return(false); } //Check if tag if (chunk.tag == tag.value) { //Push chunk chunkStack.Add(chunk); currentChunk = chunk; //Return return(true); } else { //Otherwise, skip this tag stream.Seek(chunk.size, SeekOrigin.Current); } } } else { //Read in chunk header Chunk chunk = new Chunk(); if (!readChunk(ref chunk)) { return(false); } //Check if tag if (chunk.tag == tag.value) { //Push chunk chunkStack.Add(chunk); currentChunk = chunk; //Return return(true); } else { return(false); } } }