/*
* Copyright (c) 2013-2014, Parallel Universe Software Co. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 3.0
* as published by the Free Software Foundation.
*/
/**
* <h2>Records - managed shared mutable state</h2>
*
* Here's an example record type definition:
*
* <pre>{@code
* class A {
* public static final RecordType<A> aType = RecordType.newType(A.class);
* public static final IntField<A> $id = stateType.intField("id");
* public static final DoubleField<A> $foo = stateType.doubleField("id", Field.TRANSIENT);
* public static final ObjectField<A, String> $name = stateType.objectField("name", String.class);
* public static final ObjectField<A, List<String>> $emails = stateType.objectField("emails", new TypeToken<List<String>() {});
* }
* }</pre>
*
* {@code A} is the type's <i>identifier class</i>. The fields are instances of {@link co.paralleluniverse.data.record.Field Field} and are, by convention,
* given identifiers that begin with a {@code $} to make it clear that they identify fields rather than values.
* <br/>
* A new record is instantiated by calling one of {@link co.paralleluniverse.data.record.RecordType RecordType}'s {@code newInstance} methods.
*
*/
package co.paralleluniverse.data.record;