equal
  deleted
  inserted
  replaced
  
    
    
    12   | 
    12   | 
    13 #include <invalid.h>  | 
    13 #include <invalid.h>  | 
    14   | 
    14   | 
    15 namespace hugo { | 
    15 namespace hugo { | 
    16   | 
    16   | 
         | 
    17   /// \brief A map with "small integers" as value set which can enumarate it  | 
         | 
    18   /// value classes  | 
    17   | 
    19   | 
    18   /// \todo Decide whether we need all the range checkings!!!  | 
    20   /// \todo Decide whether we need all the range checkings!!!  | 
         | 
    21   | 
         | 
    22   /// \todo Implement dynamic map behaviour. Is it necessary? Yes it is.  | 
    19   | 
    23   | 
    20   template<typename KeyIntMap, uint8_t N, typename Val = uint8_t>  | 
    24   template<typename KeyIntMap, uint8_t N, typename Val = uint8_t>  | 
    21   class IterableMap { | 
    25   class IterableMap { | 
    22   public:  | 
    26   public:  | 
    23   | 
    27   | 
    82   | 
    86   | 
    83     void set(const KeyType& k, Val n) { | 
    87     void set(const KeyType& k, Val n) { | 
    84       // FIXME: range check?  | 
    88       // FIXME: range check?  | 
    85       size_t a = base[k];  | 
    89       size_t a = base[k];  | 
    86       if(a < bounds[N-1]) { | 
    90       if(a < bounds[N-1]) { | 
    87 	base.set(k, move(a, find(a), n));  | 
    91 	move(a, find(a), n);  | 
    88       }  | 
    92       }  | 
    89       else { | 
    93       else { | 
    90 	insert(k, n);  | 
    94 	insert(k, n);  | 
    91       }  | 
    95       }  | 
    92     }  | 
    96     }  | 
    93   | 
    97   | 
    94     void insert(const KeyType& k, Val n) { | 
    98     void insert(const KeyType& k, Val n) { | 
    95       data.push_back(k);  | 
    99       data.push_back(k);  | 
    96       base.set(k, move(bounds[N-1]++, N-1, n));  | 
   100       base.set(k, move(bounds[N-1]++, N-1, n));  | 
         | 
   101     }  | 
         | 
   102   | 
         | 
   103     /// This func is not very usable, but necessary to implement   | 
         | 
   104     /// dynamic map behaviour.  | 
         | 
   105     void remove(const KeyType& k) { | 
         | 
   106       size_t a = base[k];  | 
         | 
   107       if(a < bounds[N-1]) { | 
         | 
   108 	move(a, find(a), N);  | 
         | 
   109 	data.pop_back();  | 
         | 
   110 	base.set(k, -1);  | 
         | 
   111       }  | 
    97     }  | 
   112     }  | 
    98   | 
   113   | 
    99     iterator begin(Val n) const { | 
   114     iterator begin(Val n) const { | 
   100       return data.begin() + (n ? bounds[n-1] : 0);  | 
   115       return data.begin() + (n ? bounds[n-1] : 0);  | 
   101     }  | 
   116     }  |