protected override Stream OpenStream(AccessMode accessMode) { var memoryStream = new ExtendingMemoryStream(); if (accessMode.HasFlag(AccessMode.Read)) { memoryStream.Write(mBuffer, 0, mBuffer.Length); } if (accessMode.HasFlag(AccessMode.Append)) { memoryStream.OnClose += (o, e) => { var l = mBuffer.Length; mBuffer = new byte[l + memoryStream.Length]; memoryStream.Write(mBuffer, l, (int)memoryStream.Length); }; } else if (accessMode.HasFlag(AccessMode.Write)) { memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.OnClose += (o, e) => { mBuffer = memoryStream.ToArray(); }; } return(memoryStream); }
public static void MakeAccessible(this ParamDef parameter, AccessMode mode) { if (parameter.IsAccessible(mode)) { return; } ParamAttributes attributes = parameter.Attributes; if (mode.HasFlag(AccessMode.Read)) { attributes &= ~ParamAttributes.Out; } if (mode.HasFlag(AccessMode.Write)) { attributes &= ~ParamAttributes.In; } parameter.Attributes = attributes; }
protected override Stream OpenStream(StringKey key, AccessMode accessMode) { if (accessMode.HasFlag(AccessMode.Write) || accessMode.HasFlag(AccessMode.Append)) { throw new NotSupportedException("Writing objects to embedded BLOB stores is not supported."); } var completeName = mName.Concat(key).ToString("."); var stream = mAssembly.GetManifestResourceStream(completeName); if (stream == null) { return(new MemoryStream()); } return(stream); }
protected override Stream OpenStream(StringKey key, AccessMode accessMode) { if (accessMode.HasFlag(AccessMode.Append)) { throw new NotSupportedException("Appending is not supported for compressed BLOB stores."); } var completeName = mThisFolderName.Concat(key).ToString("\\"); if (!Exists(key)) { if (accessMode == AccessMode.Read) { return(new MemoryStream()); } AddElement(key); return(mArchive.CreateEntry(completeName).Open()); } return(mArchive.GetEntry(completeName).Open()); }
public static bool IsAccessible(this ParamDef parameter, AccessMode mode) => !(mode.HasFlag(AccessMode.Read) && parameter.IsOut || mode.HasFlag(AccessMode.Write) && parameter.IsIn);