técnica de parseo - jacquesfauquex/DCKV GitHub Wiki

El metodo lee los atributos sucesivamente hasta encontrar un tag >= lastdatasettag o hasta superar lo largo predefinido de una secuencia o de un item.

El attributo SQ tiene tratamiento especifico. Una vez evacuado el caso de SQ vacío, arranca el loop de items y recursion de parseo de dataset

dataset loop ( <length or <tag )
|
+------------+------------+
|            |            |
attr vl      attr vll     SQ
                          |
   +----------+-----------+------------+
   |          |           |            |
   0000       lengthCero  item loop    ffff
                          |
               +----------+----------+
               |          |          |
               00000000++ dataset    ffffffff--

variables y recursión

Por ejemplo el buffer kbuf está referido también por attrstruct y por itemstruct instanciados dentro de una recursión.

kbuf        0 -------- -------- -------- -------- -------- ... 148

primer nivel
attrstruct    gGuUrrll
itemstruct             gGuUrrll

secundo nivel
attrstruct             gGuUrrll
itemstruct                      gGuUrrll

tercer nivel
attrstruct                      gGuUrrll
itemstruct                               gGuUrrll

...
  • attrstruct es un slice de 8 bytes del buffer kbuf, que puede servir para lectura de stream. Leimos del stream directamente a attrstruct, rellenando así de a 8 bytes el buffer principal kbuf directamente desde el stream, sin copia secundaría. Es sumamente eficiente en cuanto a memoria. Más aún porque se usa el mismo attrstruct para todos los attrs de un dataset.
  • la existencia de attrstruct e itemstruct permite hacer la transición entre un nivel de recursión y el siguiente dentro de una secuencia. Lo que era itemstruct en un nivel de la recursion pasa a ser attrstruct en el siguiente nivel.

En resumen, el buffer kbuf se modifica permanente a la ocasión del parseo de cada uno de los attributos de todas las profundidades. Se toman "instantaneas" fijas de mismo al momento de registrar cada attributo. El key tiene largo de un múltiple de 8 bytes (8 para el primer nivel, 16 para el segundo y así sucesivamente).