void Write(IList <CANamedArgument> namedArgs) { if (namedArgs == null || namedArgs.Count > 0x1FFFFFFF) { helper.Error("Too many custom attribute named arguments"); namedArgs = Array2.Empty <CANamedArgument>(); } writer.WriteCompressedUInt32((uint)namedArgs.Count); for (int i = 0; i < namedArgs.Count; i++) { Write(namedArgs[i]); } }
/// <inheritdoc/> protected override void WriteToImpl(DataWriter writer) { if (originalData != null) { writer.WriteBytes(originalData); } else { writer.WriteByte(0); } uint offset = originalData != null ? (uint)originalData.Length : 1; foreach (var data in cached) { int rawLen = GetRawDataSize(data); if (userRawData != null && userRawData.TryGetValue(offset, out var rawData)) { if (rawData.Length != rawLen) { throw new InvalidOperationException("Invalid length of raw data"); } writer.WriteBytes(rawData); } else { writer.WriteCompressedUInt32((uint)data.Length); writer.WriteBytes(data); } offset += (uint)rawLen; } }
void WriteString(DataWriter writer, string s) { writer.WriteCompressedUInt32((uint)s.Length * 2 + 1); byte last = 0; for (int i = 0; i < s.Length; i++) { ushort c = (ushort)s[i]; writer.WriteUInt16(c); if (c > 0xFF || (1 <= c && c <= 8) || (0x0E <= c && c <= 0x1F) || c == 0x27 || c == 0x2D || c == 0x7F) { last = 1; } } writer.WriteByte(last); }
/// <inheritdoc/> public IEnumerable <KeyValuePair <uint, byte[]> > GetAllRawData() { var memStream = new MemoryStream(); var writer = new DataWriter(memStream); uint offset = originalData != null ? (uint)originalData.Length : 1; foreach (var data in cached) { memStream.Position = 0; memStream.SetLength(0); writer.WriteCompressedUInt32((uint)data.Length); writer.WriteBytes(data); yield return(new KeyValuePair <uint, byte[]>(offset, memStream.ToArray())); offset += (uint)memStream.Length; } }
uint WriteCompressedUInt32(DataWriter writer, uint value) => writer.WriteCompressedUInt32(helper, value);