ulvis.paste.net

Paste Search Dynamic
Recent pastes
set black
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <class Type>
  5. struct Proxy {
  6.         Proxy(const Type *p) : p((uintptr_t)p) { }
  7.  
  8.         void SetBlack() { p |= 1; }
  9.         void SetRed() { p &= ~3; }
  10.  
  11.         bool IsBlack() { return (p & 3) == 1; }
  12.  
  13.         Type & operator*() { return *(reinterpret_cast<Type *>(p & ~3)); }
  14.         Type * operator->() { return reinterpret_cast<Type *>(p & ~3); }
  15.  
  16.         uintptr_t p;
  17.  
  18. };
  19.  
  20. class Apa {
  21. public:
  22.         void Speak() { std::cout << "oh oh oh!!!" << std::endl; }
  23. };
  24.  
  25. int main() {
  26.         int a = 11, b = 1;
  27.         Apa *apa = new Apa;
  28.         Proxy<int> pp(&b);
  29.         Proxy<Apa> apaProxy(apa);
  30.  
  31.         apaProxy.SetBlack();
  32.  
  33.         apaProxy->Speak();
  34.  
  35.         std::cout << pp.p << std::endl;
  36.         pp.SetBlack();
  37.         pp.SetRed();
  38.         std::cout << pp.p << " " << pp.IsBlack() << std::endl;
  39.  
  40.         std::cout << *pp << std::endl;
  41.         return 0;
  42. }
Parsed in 0.007 seconds