static public void Write(this Stream stream, Atom atom)
{
var name = atom.Name.GetBytes();
stream.Write(name, 0, name.Length);
if (atom.HasValue) {
var value = atom.GetBytes();
var len = BitConverter.GetBytes(value.Length);
if (!BitConverter.IsLittleEndian) Array.Reverse(len);
stream.Write(len, 0, len.Length);
stream.Write(value, 0, value.Length);
}
else {
var cnt = BitConverter.GetBytes(0x80000000U | (uint)atom.Children.Count);
if (!BitConverter.IsLittleEndian) Array.Reverse(cnt);
stream.Write(cnt, 0, cnt.Length);
foreach (var child in atom.Children) {
Write(stream, child);
}
}
}