Prototype
E_RTN EMemory::BlockInsertEach( ulonglong *pullBlockCountInserted,
void *pBlockToInsert,
ulonglong ullBlockToInsertSize,
ulonglong ullStepEach,
BOOL bStartAtFirst,
ulonglong ullOffset = 0,
ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

Cette fonction insère dans l'intervalle de travail le bloc d'octets pBlockToInsert à intervalle régulier d'une taillle de ullStepEach octet(s).

Si l'intervalle de travail est inférieur à l'intervalle régulier, cette fonction ne fait rien car elle insère un bloc d'octets TOUS LES INTERVALLES REGULIERS (voir l'exemple pour l'objet eMem2).

 

Argument

ulonglong *pullBlockCountInserted

adresse d'une variable de type ulonglong où y sera stocké le nombre de bloc d'octets insérés (à ne pas confondre avec octet(s) inséré(s)).

Si cette information ne vous intéresse pas cet argument peut être NULL (la fonction ne retournera pas d'erreur à ce propos).

void *pBlockToInsert

adresse du bloc d'octets à insérer.

ulonglong ullBlockToInsertSize

taille du bloc d'octets à insérer.

ulonglong ullStepEach

taille de l'intervalle régulier d'insertion.

BOOL bStartAtFirst

commencer l'insertion à partir de l'offset de départ.

Dans ce cas, spécifiez la valeur TRUE.

ulonglong ullOffset = 0

offset de départ de l'intervalle de travail d'insertion.

ulonglong ullOffsetSize = EMemory::SizeUpToEnd

étendue de l'intervalle de travail d'insertion.

 

Retour

E_RTN

voir la section retour de la librairie Eclat.

 

Exemple

Description :

Insertion du bloc d'octets 0x58, 0x59 et 0x5A ("XYZ" en ASCII) à intervalle régulier d'un octet sur l'ensemble de l'espace de travail d'un objet EMemory (eMem0) alloué d'une taille 3 octets contenant les données 0x41, 0x42 et 0x43 ("ABC" en ASCII).

Insertion du bloc d'octets 0x58, 0x59 et 0x5A ("XYZ" en ASCII) à intervalle régulier de deux octets dans l'intervalle de travail de l'offset 1 sur une étendue de 3 octets d'un objet EMemory (eMem1) alloué d'une taille 5 octets contenant les données 0x44, 0x45, 0x46, 0x47 et 0x48 ("DEFGH" en ASCII).

Enfin, insertion du bloc d'octets 0x58, 0x59 et 0x5A ("XYZ" en ASCII) à intervalle régulier de quatre octets sur l'ensemble de l'espace de travail d'un objet EMemory (eMem2) alloué d'une taille 3 octets contenant les données 0x49, 0x4A et 0x4B ("IJK" en ASCII). L'objet n'a pas assez d'espace de travail pour que cette dernière insertion soit effective.

Code :

EMemory eMem0( "ABC", 3 ); // objet EMemory alloué de 3 octets
EMemory eMem1( "DEFGH", 5 ); // objet EMemory alloué de 5 octets
EMemory eMem2( "IJK", 3 ); // objet EMemory alloué de 3 octets
ulonglong ullCount;

eMem0.TraceEx( _T("eMem0") );
if ( eOk( eMem0.BlockInsertEach( &ullCount, "XYZ", 3, 1, FALSE ) ) )
  ETrace::DoEx( _T("Nombre de bloc d'octets \"XYZ\" inséré dans l'objet eMem0 = %I64u.\n\n"), ullCount );
eMem0.TraceEx( _T("eMem0") );

eMem1.TraceEx( _T("eMem1") );
if ( eOk( eMem1.BlockInsertEach( &ullCount, "XYZ", 3, 2, TRUE, 1, 3 ) ) )
  ETrace::DoEx( _T("Nombre de bloc d'octets \"XYZ\" inséré dans l'objet eMem1 = %I64u.\n\n"), ullCount );
eMem1.TraceEx( _T("eMem1") );

eMem2.TraceEx( _T("eMem2") );
if ( eOk( eMem2.BlockInsertEach( &ullCount, "XYZ", 3, 4, FALSE ) ) )
  ETrace::DoEx( _T("Nombre de bloc d'octets \"XYZ\" inséré dans l'objet eMem2 = %I64u.\n\n"), ullCount );
eMem2.TraceEx( _T("eMem2") );

Sortie :

### Object EMemory 'eMem0' Trace #
# Object address='0x0012F42C', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000001', workspace size='3' byte(s).
# Array data from offset '0x00000000' to offset '0x00000002', length=3 byte(s).
# Offset start 0x00000000 41 42 43 .. .. .. .. .. .. .. .. .. .. .. .. .. [ABC]
### End #

Nombre de bloc d'octets "XYZ" inséré dans l'objet eMem0 = 3.

### Object EMemory 'eMem0' Trace #
# Object address='0x0012F42C', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000001', workspace size='12' byte(s).
# Array data from offset '0x00000000' to offset '0x0000000B', length=12 byte(s).
# Offset start 0x00000000 41 58 59 5A 42 58 59 5A 43 58 59 5A .. .. .. .. [AXYZBXYZCXYZ]
### End #

### Object EMemory 'eMem1' Trace #
# Object address='0x0012F414', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000001', workspace size='5' byte(s).
# Array data from offset '0x00000000' to offset '0x00000004', length=5 byte(s).
# Offset start 0x00000000 44 45 46 47 48 .. .. .. .. .. .. .. .. .. .. .. [DEFGH]
### End #

Nombre de bloc d'octets "XYZ" inséré dans l'objet eMem1 = 2.

### Object EMemory 'eMem1' Trace #
# Object address='0x0012F414', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000001', workspace size='11' byte(s).
# Array data from offset '0x00000000' to offset '0x0000000A', length=11 byte(s).
# Offset start 0x00000000 44 58 59 5A 45 46 58 59 5A 47 48 .. .. .. .. .. [DXYZEFXYZGH]
### End #

### Object EMemory 'eMem2' Trace #
# Object address='0x0012F3FC', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000001', workspace size='3' byte(s).
# Array data from offset '0x00000000' to offset '0x00000002', length=3 byte(s).
# Offset start 0x00000000 49 4A 4B .. .. .. .. .. .. .. .. .. .. .. .. .. [IJK]
### End #

Nombre de bloc d'octets "XYZ" inséré dans l'objet eMem2 = 0.

### Object EMemory 'eMem2' Trace #
# Object address='0x0012F3FC', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000001', workspace size='3' byte(s).
# Array data from offset '0x00000000' to offset '0x00000002', length=3 byte(s).
# Offset start 0x00000000 49 4A 4B .. .. .. .. .. .. .. .. .. .. .. .. .. [IJK]
### End #

Vue :

Vue de l'objet eMem0 avant et après l'insertion :

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02
  41
A
42
B
43
C

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02 03 04 05 06 07 08 09 0A 0B
  41
A
58
X
59
Y
5A
Z
42
B
58
X
59
Y
5A
Z
43
C
58
X
59
Y
5A
Z

Vue de l'objet eMem1 avant et après l'insertion :

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02 03 04
  44
D
45
E
46
F
47
G
48
H

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02 03 04 05 06 07 08 09 0A
  44
D
58
X
59
Y
5A
Z
45
E
46
F
58
X
59
Y
5A
Z
47
G
48
H

Vue de l'objet eMem2 avant et après l'insertion :

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02
  49
I
4A
J
4B
K

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02
  49
I
4A
J
4B
K

 

Voir aussi
E_RTN EMemory::SpaceInsert( ulonglong ullSpaceToInsertSize, ulonglong ullOffset );
E_RTN EMemory::SpaceInsert( ulonglong ullSpaceToInsertSize, ulonglong ullOffset, uchar ucByteToFill );
E_RTN EMemory::SpaceInsert( ulonglong ullSpaceToInsertSize, ulonglong ullOffset, void *pBlockToFill, ulonglong ullBlockToFillSize );
E_RTN EMemory::ByteInsert( uchar ucByteToInsert, ulonglong ullOffset = 0 );
E_RTN EMemory::BlockInsert( void *pBlockToInsert, ulonglong ullBlockToInsertSize, ulonglong ullOffset = 0 );
E_RTN EMemory::SpaceInsertEach( ulonglong *pullSpaceCountInserted, ulonglong ullSpaceToInsertSize, ulonglong ullStepEach, BOOL bStartAtFirst, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );
E_RTN EMemory::SpaceInsertEach( ulonglong *pullSpaceCountInserted, ulonglong ullSpaceToInsertSize, ulonglong ullStepEach, BOOL bStartAtFirst, uchar ucByteToFill, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );
E_RTN EMemory::SpaceInsertEach( ulonglong *pullSpaceCountInserted, ulonglong ullSpaceToInsertSize, ulonglong ullStepEach, BOOL bStartAtFirst, void *pBlockToFill, ulonglong ullBlockToFillSize, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );
E_RTN EMemory::ByteInsertEach( ulonglong *pullByteCountInserted, uchar ucByteToInsert, ulonglong ullStepEach, BOOL bStartAtFirst, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

 

Minimum
Version 1.0.0