Prototype
E_RTN EMemory::SpaceInsertEach( ulonglong *pullSpaceCountInserted,
ulonglong ullSpaceToInsertSize,
ulonglong ullStepEach,
BOOL bStartAtFirst,
ulonglong ullOffset = 0,
ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

Cette fonction insère dans un intervalle de travail un espace de ullSpaceToInsertSize octet(s) à intervalle régulier. Tous les octets insérés ne sont pas nettoyés, donc leur valeur est partiellement indéterminée.

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

 

Argument

ulonglong *pullSpaceCountInserted

adresse d'une variable de type ulonglong où y sera stocké le nombre d'espace inséré (à 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).

ulonglong ullSpaceToInsertSize

taille qu'il faut insérer, en octets.

ulonglong ullStepEach

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 d'un espace de 3 octets à 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 d'un espace de 3 octets à 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 d'un espace de 3 octets à 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.SpaceInsertEach( &ullCount, 3, 1, FALSE ) ) )
  ETrace::DoEx( _T("Nombre d'espace inséré dans l'objet eMem0 = %I64u.\n\n"), ullCount );
eMem0.TraceEx( _T("eMem0") );

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

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

Sortie :

### Object EMemory 'eMem0' Trace #
# Object address='0x0012F320', 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 d'espace inséré dans l'objet eMem0 = 3.

### Object EMemory 'eMem0' Trace #
# Object address='0x0012F320', 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 CD CD CD 42 CD CD CD 43 CD CD CD .. .. .. .. [AÍÍÍBÍÍÍCÍÍÍ]
### End #

### Object EMemory 'eMem1' Trace #
# Object address='0x0012F308', 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 d'espace inséré dans l'objet eMem1 = 2.

### Object EMemory 'eMem1' Trace #
# Object address='0x0012F308', 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 CD CD CD 45 46 CD CD CD 47 48 .. .. .. .. .. [DÍÍÍEFÍÍÍGH]
### End #

### Object EMemory 'eMem2' Trace #
# Object address='0x0012F2F0', 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 d'espace inséré dans l'objet eMem2 = 0.

### Object EMemory 'eMem2' Trace #
# Object address='0x0012F2F0', 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 :

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
CD
?
CD
?
CD
?
42
B
CD
?
CD
?
CD
?
43
C
CD
?
CD
?
CD
?

Vue de l'objet eMem1 :

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
CD
?
CD
?
CD
?
45
E
46
F
CD
?
CD
?
CD
?
47
G
48
H

Vue de l'objet eMem2 :

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, 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 );
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