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

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

Cette fonction considère que le bloc d'octets source et destination ont la même taille.

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 sur 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 ullOffsetSource

offset du bloc d'octets source à intervertir.

ulonglong ullOffsetDestSourceSize

taille du bloc d'octets source et destination à intervertir.

 

Retour

E_RTN

voir la section retour de la librairie Eclat.

 

Exemple

Description :

Interversion du bloc d'octets à l'offset 2 sur un étendue de 3 octets et du bloc d'octets à l'offset 7 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( 2, 7, 3 );
eMem.TraceEx( _T("eMem") );

Sortie :

### Object EMemory 'eMem' Trace #
# Object address='0x0012F398', 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='0x0012F398', 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 48 49 4A 46 47 43 44 45 4B 4C .. .. .. .. [ABHIJFGCDEKL]
### 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
48
H
49
I
4A
J
46
F
47
G
43
C
44
D
45
E
4B
K
4C
L

 

Voir aussi
E_RTN EMemory::SpaceSwap( ulonglong ullOffsetDest, ulonglong ullOffsetSource );
E_RTN EMemory::SpaceSwap( ulonglong ullOffsetDest, ulonglong ullOffsetDestSize, ulonglong ullOffsetSource, ulonglong ullOffsetSourceSize );
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