001/**
002 * SealedAlgebraicStructure.java
003 *
004 * Copyright (c) 2004-2012, Nicole C. Tedesco.  All rights reserved.
005 *
006 * Licensed under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at:
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019package net.sf.jaccumulator;
020
021import java.util.Collection;
022
023/**
024 * A read-only algebraic {@link AlgebraicStructure structure}
025 *
026 * @since JAccumulator 4.0
027 * @author Nicole Tedesco (<a
028 *         href="mailto:Nicole@NicoleTedesco.com">Nicole@NicoleTedesco.com</a>)
029 */
030public interface SealedAlgebraicStructure extends StructureProperties
031{
032    /**
033     * @return the general semantic interpretation strategy of the configuration
034     *         of elements in this structure
035     */
036    public Domain getDomain();
037
038    /**
039     * @return
040     *      a lemma defining the general implementation approach for this
041     *      structure
042     */
043    public StructureStrategy getStructureStrategy();
044
045    /**
046     * Returns the number of elements in this algebraic structure as a
047     * {@code long} scalar. If the structure contains more than
048     * {@link Long#MAX_VALUE} elements, returns {@code Long.MAX_VALUE}.
049     *
050     * @return the number of elements in this algebraic structure as a
051     *         {@code long} scalar
052     * @see Collection#size()
053     * @see #size()
054     */
055    public long longSize();
056
057    /**
058     * Returns the number of elements in this algebraic structure.  If the
059     * structure contains more than {@link Integer#MAX_VALUE } elements, returns
060     * {@code Integer.MAX_VALUE}.
061     *
062     * @return the number of elements in this algebraic structure
063     *
064     * @see Collection#size()
065     */
066    public int size();
067}