package io.eiren.util.ann;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * <p>
 * Означает что поле используется для временных или быстро изменяющихся
 * переменных.
 * </p>
 * <p>
 * Поле помеченное этой аннотацией не влияет на долгосрочное состояние объекта,
 * не участвует в сериализации, вычислении equals и hashCode, не определяет
 * поведение объекта для внешнего кода. Поэтому такие поля не должны
 * использоваться внешним кодом, их состояние имеет смысл только для самого
 * объекта в котором они объявлены.
 * </p>
 * Примеры:
 * <ul>
 * <li>Временный объект, который используется в методах для внутренних
 * вычислений. Например векторные и матричные вычисления.</li>
 * <li>Внутренний флаг для мультитрединга. Например, флаг апдейта графического
 * состояния взводимый из игрового потока.</li>
 * <li>Выведенное значение или структура, которое инициализируется самим
 * объектом по фиксированному правилу. Например, производное значение от
 * переменной параметризующей объект. Инициализируемый в конструкторе lookup
 * table.</li>
 * </ul>
 * 
 * @author tort32
 */
@Retention(value = RetentionPolicy.SOURCE)
@Target({ ElementType.FIELD })
public @interface Transient {

}
