Advertisement
Lynix

Bitset - Nazara Engine

Mar 17th, 2015
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. NzBitset<> bitset1("00110010");
  2. NzBitset<> bitset2("1100");
  3. NzBitset<> bitset3;
  4.  
  5. // On peut effectuer des opérations sur deux bitsets de taille différente
  6. bitset2 ^= bitset1; // 0011 1110
  7.  
  8. // Le test d'égalité ne vérifie que les bits activés, ainsi deux bitsets n'ont pas besoin d'avoir la même taille pour être équivalents
  9. // de la même façon que (uint8) 00001100 == (uint16) 00000000 00001100
  10. bitset2 == NzBitset<>("111110") // true
  11.  
  12. // Il existe aussi des méthodes permettant d'agir comme si le bitset n'avait pas de limite de taille:
  13. bitset2.Set(10, true); // assert failed
  14. bitset2.UnboundedSet(10, true); // 100 0011 1110
  15. bitset2.UnboundedTest(42); // false (les bits en dehors du bitset sont considérés comme ayant une valeur de 0)
  16.  
  17. // Opérations élémentaires
  18. bitset2.Count(); // 6 bits activés
  19. bitset2.FindFirst(); // 1 (indice du premier bit activé)
  20. bitset2.FindNext(5); // 10 (indice du premier bit activé à partir du bit X)
  21. // Une boucle for sur les bits activés ressemble donc à
  22. // for (unsigned int i = bitset2.FindFirst(); i != bitset2.npos; i = bitset2.FindNext(i))
  23.  
  24. // Et pour finir, des méthodes permettant d'éviter les allocations dynamiques inutiles
  25. // Cet opérateur va former un bitset temporaire, allouant la place requise pour stocker le résultat avant de le déplacer dans bitset3
  26. bitset3 = bitset1 & bitset2; // 000 0011 0010
  27.  
  28. // Cette méthode va directement stocker le résultat dans bitset3, et n'allouer que si bitset3 n'est pas assez grand pour le résultat
  29. bitset3.PerformsAND(bitset1, bitset2);
  30.  
  31. // À noter que le receveur peut être envoyé comme argument sans problème
  32. bitset3.PerformsXOR(bitset3, bitset3); // 000 0000 0000
  33. bitset3.TestNone(); // true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement