soywiz

Ejemplo de SpaceAssigner1DUniqueAllocatorStream

Apr 23rd, 2011
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.53 KB | None | 0 0
  1. var OpenedFile = File.Open("file.bin", FileMode.Open);
  2. var PointerTableStream = new SliceStream(OpenedFile, 0x300);
  3. var SpaceAssigner1D = new SpaceAssigner1D();
  4. var SpaceAssigner1DUniqueAllocatorStream = new SpaceAssigner1DUniqueAllocatorStream(SpaceAssigner1D, new SliceStream(OpenedFile, 0x20000));
  5. // Esto crea dos espacios utilizables: 0x1000-0x1020 y 0x1030-0x1100
  6. {
  7.     SpaceAssigner1D.AddAvailable(0x1000, 0x1010);
  8.     SpaceAssigner1D.AddAvailable(0x1010, 0x1020);
  9.     SpaceAssigner1D.AddAvailable(0x1030, 0x1100);
  10. }
  11.  
  12. // UsedSpace1 y UsedSpace2 coinciden porque al tener el mismo contenido se reutiliza la dirección.
  13. {
  14.     var UsedSpace1 = SpaceAssigner1DUniqueAllocatorStream.AllocateUnique("Prueba", Encoding.UTF8);
  15.     var UsedSpace2 = SpaceAssigner1DUniqueAllocatorStream.AllocateUnique("Prueba", Encoding.UTF8);
  16.     var UsedSpace3 = SpaceAssigner1DUniqueAllocatorStream.AllocateUnique("Una prueba que no entra en el primer espacio por ser excesivamente larga", Encoding.UTF8);
  17.     // UsedSpace2 = UsedSpace1 = SpaceAssigner1D.Space(Min=0x1000, Max=0x1007)
  18.     // UsedSpace2 = SpaceAssigner1D.Space(Min=0x1030, Max=0x1030 + Longitud de la cadena + 1)
  19.     // Además en la posición 0x20000 + 0x1000 se habrá escrito "Prueba\0" y en 0x20000 + 0x1000 "Una prueba que no entra en el primer espacio por ser excesivamente larga\0"
  20.  
  21.     // Escribimos en la tabla de punteros.
  22.     PointerTableStream.Write((uint)UsedSpace1.Min);
  23.     PointerTableStream.Write((uint)UsedSpace2.Min);
  24.     PointerTableStream.Write((uint)UsedSpace3.Min);
  25. }
Add Comment
Please, Sign In to add comment