Prototype
E_RTN EMemory::ByteInsertEach( ulonglong *pullByteCountInserted,
uchar ucByteToInsert,
ulonglong ullStepEach,
BOOL bStartAtFirst,
ulonglong ullOffset = 0,
ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

Cette fonction insère dans l'intervalle de travail l'octet ucByteToInsert à 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 octet TOUS LES INTERVALLES REGULIERS (voir l'exemple pour l'objet eMem3).

 

Argument

ulonglong *pullByteCountInserted

adresse d'une variable de type ulonglong où y sera stocké le nombre d'octets inséré.

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

ucByteToInsert

octet à 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 de l'octet 0x58 ("X" 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 de l'octet 0x58 ("X" 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).

Insertion de l'octet 0x58 ("X" en ASCII) à intervalle régulier de trois 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).

Enfin, insertion de l'octet 0x58 ("X" en ASCII) à intervalle régulier de quatre octets sur l'ensemble de l'espace de travail d'un objet EMemory (eMem3) alloué d'une taille 3 octets contenant les données 0x4C, 0x4D et 0x4E ("LMN" 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
EMemory eMem3( "LMN", 3 ); // objet EMemory alloué de 3 octets
ulonglong ullCount;

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

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

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

eMem3.TraceEx( _T("eMem3") );
if ( eOk( eMem3.ByteInsertEach( &ullCount, 'X', 4, FALSE ) ) )
  ETrace::DoEx( _T("Nombre d'octets 'X' inséré dans l'objet eMem3 = %I64u.\n\n"), ullCount );
eMem3.TraceEx( _T("eMem3") );

Sortie :

### Object EMemory 'eMem0' Trace #
# Object address='0x0012F404', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000004', 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 d'octets 'X' inséré dans l'objet eMem0 = 3.

### Object EMemory 'eMem0' Trace #
# Object address='0x0012F404', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000004', workspace size='6' byte(s).
# Array data from offset '0x00000000' to offset '0x00000005', length=6 byte(s).
# Offset start 0x00000000 41 58 42 58 43 58 .. .. .. .. .. .. .. .. .. .. [AXBXCX]
### End #

### Object EMemory 'eMem1' Trace #
# Object address='0x0012F3EC', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000004', 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 d'octets 'X' inséré dans l'objet eMem1 = 2.

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

### Object EMemory 'eMem2' Trace #
# Object address='0x0012F3D4', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000004', 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 d'octets 'X' inséré dans l'objet eMem2 = 1.

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

### Object EMemory 'eMem3' Trace #
# Object address='0x0012F3BC', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000004', workspace size='3' byte(s).
# Array data from offset '0x00000000' to offset '0x00000002', length=3 byte(s).
# Offset start 0x00000000 4C 4D 4E .. .. .. .. .. .. .. .. .. .. .. .. .. [LMN]
### End #

Nombre d'octets 'X' inséré dans l'objet eMem3 = 0.

### Object EMemory 'eMem3' Trace #
# Object address='0x0012F3BC', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000004', workspace size='3' byte(s).
# Array data from offset '0x00000000' to offset '0x00000002', length=3 byte(s).
# Offset start 0x00000000 4C 4D 4E .. .. .. .. .. .. .. .. .. .. .. .. .. [LMN]
### End #

Vue :

Vue de l'objet eMem0 avant et après 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
  41
A
58
X
42
B
58
X
43
C
58
X

Vue de l'objet eMem1 avant et après 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
  44
D
58
X
45
E
46
F
58
X
47
G
48
H

Vue de l'objet eMem2 avant et après 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 03
  49
I
4A
J
4B
K
58
X

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

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02
  4C
L
4D
M
4E
N

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02
  4C
L
4D
M
4E
N

 

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::BlockInsertEach( ulonglong *pullBlockCountInserted, void *pBlockToInsert, ulonglong ullBlockToInsertSize, ulonglong ullStepEach, BOOL bStartAtFirst, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

 

Minimum
Version 1.0.0