package net.sourceforge.pain.db;
import java.io.*;
import java.util.*;
/**
 * Persistent Class for DbObject
 */
public interface DbClass {
	public PainDB getDB();
	public int getNumberOfFields();
	public String getClassName();
	/**
	 * @param n number of field
	 * @return field name
	 */
	public String getFieldName(int n);
	/**
	 * @param n number of field
	 * @return field type {@link DbType class constants}
	 */
	public byte getFieldType(int n);
	/**
     * @param weak ignores class extent modifications (new objects creation, object removal)
     * during iteration if 'weak' is true.
     * 'weak'==true will lead to ConcurredModificationExcepiton if class extend is changing
     * during iteration
     * Weak iterator will see all new objects created during it's traversal
     * WARN: weakIterator could throw IllegalStateException
     * if the 'next' object was removed between 'hasNext' and 'next' method call and there is
     * no more objects to iterate (should call these methods locally in code)
	 * @return Iterator instance to iterate all objects (not deleted)
	 * of this class in database
	 */
	public Iterator extentIterator(boolean weak);
    /** equal to extentIterator(false) */
    public Iterator extentIterator();
	/**
	 * @return number of objects for this DbClass in Database (without objects in deleted state)
	 */
	public int getNumberOfObjects();
	/**
	 * removes all objects for this class and dbClass itself
	 */
	public void delete();
	/**
	 * @return serializable class id.
	 */
	public Serializable getOid();
    /** this is optimization method
     * specially produced for PAiN Mud Codebase
     * for performance purpose
     * It use knowledge that index id for the class
     * stays the same whole DbClass instance lifetime
     * (But it couldbe reused after class removal)
     */
    public int pain_getIndexId();
}