Advertisement
Guest User

Untitled

a guest
Sep 7th, 2016
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 0.99 KB | None | 0 0
  1. struct Set(T)
  2. {
  3.     alias stortype = typeof(1 << T.max);
  4.     private stortype storage;
  5.    
  6.     this(T val)
  7.     {
  8.         this |= val;
  9.     }
  10.    
  11.     void clear()
  12.     {
  13.         storage = 0;
  14.     }
  15.    
  16.     void opOpAssign(string op)(T val) if (op == "|" || op == "+")
  17.     {
  18.         storage |= (1 << cast(stortype)val);
  19.     }
  20.    
  21.     void opOpAssign(string op)(T val) if (op == "~" || op == "-")
  22.     {
  23.         storage &= ~(1 << cast(stortype)val);
  24.     }
  25.  
  26.     void opOpAssign(string op)(Set val) if (op == "|" || op == "+")
  27.     {
  28.         storage |= val.storage;
  29.     }
  30.    
  31.     void opOpAssign(string op)(Set val) if (op == "~" || op == "-")
  32.     {
  33.         storage &= ~val.storage;
  34.     }
  35.  
  36.     const bool opBinaryRight(string op)(T val) if (op == "in")
  37.     {
  38.         auto cval = (1 << cast(stortype)val);
  39.         return (storage & cval) == cval;
  40.     }
  41.  
  42.     const bool opBinary(string op)(Set val) if (op == "in")
  43.     {
  44.         return (val.storage & storage) == storage;
  45.     }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement