using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Hack.Xenosaga.Common { public static class Extension { /// /// Ecrit un bloc d'octet dans le flux actuel en utilisant des données lues dans une mémoire tampon (la position du flux actuel reste inchangée). /// /// Mémoire tamon dans laquelle lire les données /// Dans buffer, offset d'octet de base zéro d'où commencer la copie des octets dans le flux actuel /// Nombre maximal d'octets à écrire /// Position dans le flux actuel où écrire les données public static void Write(this MemoryStream ms, byte[] buffer, int offset, int count, long position) { long pos = ms.Position; ms.Position = position; ms.Write(buffer, offset, count); ms.Position = pos; } /// /// Lit une séquence de 4 octets à partir du flux actuel et avance la position dans le flux du nombre d'octets lus. /// /// Valeur lue public static UInt32 Read(this MemoryStream ms) { UInt32 value = 0; for (int i = 0; i < 4; i++) value += (UInt32)(ms.ReadByte() << (i * 8) ); return value; } /// /// Pad a MemoryStream with a byte /// /// Modulo to use for the padding (default: 4) /// Value of the byte (default: 0) public static void Padding(this MemoryStream ms, int modulo = 4, byte value = 0) { long size = ms.Length; while (size % modulo != 0) { ms.WriteByte(value); size++; } } } }