Prototype
E_RTN EMemory::SpaceSwap( ulonglong ullOffsetDest,
ulonglong ullOffsetDestSize,
ulonglong ullOffsetSource,
ulonglong ullOffsetSourceSize );

Cette fonction intervertit le bloc d'octets d'une taille de ullOffsetDestSize situé à l'offset ullOffsetDest avec le bloc d'octets d'une taille de ullOffsetSourceSize situé à l'offset ullOffsetSource.

Les deux blocs d'octets peuvent avoir une taille différente.

Attention, les blocs d'octets à intervertir ne peuvent se chevaucher. Par exemple pour les données "ABCDEFG", si l'on effectue une inversion de l'offset 1 et de l'offset 3 (tout deux d'une taille de 3 octets), l'erreur erMemAreaRide sera retournée car les deux blocs partagent l'offset 3. En effet le premier bloc concerne les données "BCD" et le deuxième bloc concerne les données "DEF", les deux blocs ont en commun la donnée "D".

 

Argument

ulonglong ullOffsetDest

offset du bloc d'octets destination à intervertir.

ulonglong ullOffsetDestSize

taille du bloc d'octets destination à intervertir.

ulonglong ullOffsetSource

offset du bloc d'octets source à intervertir.

ulonglong ullOffsetSourceSize

taille du bloc d'octets source à intervertir.

 

Retour

E_RTN

voir la section retour de la librairie Eclat.

 

Exemple

Description :

Interversion du bloc d'octets situé à l'offset 3 sur une étendue de 4 octets et du bloc d'octets à l'offset 9 sur une étendue de 3 octets d'un objet EMemory alloué de 6 octets d'espace de travail contenant les données 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B et 0x4C ("ABCDEFGHIJKL" en ASCII).

Code :

EMemory eMem( "ABCDEFGHIJKL", 12 ); // objet EMemory alloué de 12 octets

eMem.TraceEx( _T("eMem") );
eMem.SpaceSwap( 3, 4, 9, 3 );
eMem.TraceEx( _T("eMem") );

Sortie :

### Object EMemory 'eMem' Trace #
# Object address='0x0012F37C', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000002', workspace size='12' byte(s).
# Array data from offset '0x00000000' to offset '0x0000000B', length=12 byte(s).
# Offset start 0x00000000 41 42 43 44 45 46 47 48 49 4A 4B 4C .. .. .. .. [ABCDEFGHIJKL]
### End #

### Object EMemory 'eMem' Trace #
# Object address='0x0012F37C', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000002', workspace size='12' byte(s).
# Array data from offset '0x00000000' to offset '0x0000000B', length=12 byte(s).
# Offset start 0x00000000 41 42 43 4A 4B 4C 48 49 44 45 46 47 .. .. .. .. [ABCJKLHIDEFG]
### End #

Vue :

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
42
B
43
C
44
D
45
E
46
F
47
G
48
H
49
I
4A
J
4B
K
4C
L

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
42
B
43
C
4A
J
4B
K
4C
L
48
H
49
I
44
D
45
E
46
F
47
G

 

Voir aussi
E_RTN EMemory::SpaceSwap( ulonglong ullOffsetDest, ulonglong ullOffsetSource );
E_RTN EMemory::SpaceSwap( ulonglong ullOffsetDest, ulonglong ullOffsetSource, ulonglong ullOffsetDestSourceSize );
E_RTN EMemory::SpaceSwapSymetric( ulonglong ullSpaceToSwapSize, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );
E_RTN EMemory::SpaceSwapAdjacent( ulonglong ullSpaceToSwapSize, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

 

Minimum
Version 1.0.0