[ create a new paste ] login | about

Link: http://codepad.org/MK9Uh0vZ    [ raw code | output | fork ]

AaronMiller - C, pasted on Sep 26:
#include <stdio.h>

#define XOR_SWAP(a, b) (((a) == (b)) || (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b))))
#define XOR_PTRSWAP(a,b) {\
  union { void *p; size_t n; } __tA_##a = { .p=(void *)(a) },\
                               __tB_##b = { .p=(void *)(b) };\
  XOR_SWAP(__tA_##a.n, __tB_##b.n);\
  a = __tA_##a.p; b = __tB_##b.p;\
}

void *codepad_warning_avoid(size_t n) {
  union { void *p; size_t n; } x;

  x.n = n;
  return x.p;
}

int main() {
/*
  union { void *p; size_t n; } a = { .n=0x12345678 }, b = { .n=0xABCD9876 };

  printf("%p,%p\n", a.p,b.p);
  XOR_SWAP(a.n, b.n);
  printf("%p,%p\n", a.p,b.p);
*/
  void *a, *b;

  a = codepad_warning_avoid(0x12345678);
  b = codepad_warning_avoid(0xABCD9876);

  printf("%p,%p\n", a,b);
  XOR_PTRSWAP(a, b);
  printf("%p,%p\n", a,b);

  return 0;
}


Output:
1
2
0x12345678,0xabcd9876
0xabcd9876,0x12345678


Create a new paste based on this one


Comments: