001 /*
002 * LAPIS lightweight structured text processing system
003 *
004 * Copyright (C) 1998-2002 Carnegie Mellon University,
005 * Copyright (C) 2003 Massachusetts Institute of Technology.
006 * All rights reserved.
007 *
008 * This library is free software; you can redistribute it
009 * and/or modify it under the terms of the GNU General
010 * Public License as published by the Free Software
011 * Foundation, version 2.
012 *
013 * LAPIS homepage: http://graphics.lcs.mit.edu/lapis/
014 */
015
016 package lapis;
017
018 import java.util.*;
019
020 /**
021 * Versions is a set of document versions from which a region set is derived. Contains
022 * at most one version per document (i.e., if v1!=v2 are in the set, then v1.doc != v2.doc).
023 * Versions is immutable.
024 */
025 public interface Versions {
026 /**
027 * @return an iterator over the set of document versions
028 */
029 public Iterator versions();
030
031 /**
032 * @return an iterator over the set of documents
033 */
034 public Iterator documents();
035
036 /**
037 * @return the number of versions (or equivalently, the number of documents) that Versions contains
038 */
039 public int getSize();
040
041 /**
042 * @param ver a document version
043 * @return true if ver is in Versions, false otherwise.
044 */
045 public boolean contains (DocumentVersion ver);
046
047 /**
048 * @param doc a document
049 * @return true if doc is in Versions, false otherwise.
050 */
051 public boolean contains (Document doc);
052
053 /**
054 * get doc's version, which is stored in Versions
055 * @param doc a document
056 * @return doc's version, which is stored in Versions, if doc is in Versions. null otherwise.
057 */
058 public DocumentVersion getVersion (Document doc);
059
060 /**
061 * @return true if obj is an instance of Versions and obj contains the same set of DocumentVersion as this.
062 * false otherwise.
063 */
064 public boolean equals (Object obj);
065
066 /**
067 * Test whether two Versions are compatible -- i.e., whether two region sets with those Versions can be
068 * safely combined without coordinate conversion.
069 * @param vs a Versions
070 * @return true if and only if for every document doc shared by this and vs, this.getVersion(doc) == vs.getVersion(doc).
071 */
072 public boolean compatible (Versions vs);
073 }