/*
 * @author Ranides Atterwim <ranides@gmail.com>
 * @copyright Ranides Atterwim
 * @license WTFPL
 * @url http://ranides.net/projects/cquery
 */
package net.ranides.assira.enums;

/**
 * Interfejs, który może być implentowany przez typy enum. Pozwala każdej wartości
 * {@code enum} przypisać wartość liczbową, która może być np traktowana jako 
 * unikalny klucz identyfikujący stałą. Interfejs używany np w klasie {@link EnumUtils}
 * @author ranides
 */
public interface EnumInt {
    
    /**
     * Zwraca wartość liczbową, która jest powiązana ze stałą zdefiniowaną w klasie
     * {@code enum}. Nie istnieją formalne wymagania względem zwracanej wartości,
     * ale mile widziane jest, aby każda stała zwracała inną wartość - a najlepiej
     * jeszcze, aby każda stała zwracała liczbę, która ma ustawiony inny bit.
     * Wtedy {@code enum} może być potraktowana jako bezpieczna maska bitowa. 
     * Bardzo podobną funkcjonalność oferuje klasyczny kontener EnumSet, ale w nim
     * nie mamy kontroli nad tym, który bit jest powiązany z którą stałą.
     * 
     * @return 
     */
    int toEnumKey();
    
}
