All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.w3c.cci2.SortedMaps Maven / Gradle / Ivy

There is a newer version: 2.18.10
Show newest version
/*
 * ====================================================================
 * Project:     openMDX, http://www.openmdx.org/
 * Description: Sorted Maps 
 * Owner:       OMEX AG, Switzerland, http://www.omex.ch
 * ====================================================================
 *
 * This software is published under the BSD license as listed below.
 * 
 * Copyright (c) 2006-2013, OMEX AG, Switzerland
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or
 * without modification, are permitted provided that the following
 * conditions are met:
 * 
 * * Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 * 
 * * Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in
 *   the documentation and/or other materials provided with the
 *   distribution.
 * 
 * * Neither the name of the openMDX team nor the names of its
 *   contributors may be used to endorse or promote products derived
 *   from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 * 
 * ------------------
 * 
 * This product includes software developed by other organizations as
 * listed in the NOTICE file.
 */
package org.w3c.cci2;

import java.io.Serializable;
import java.util.Collections;
import java.util.SortedMap;
import java.util.TreeMap;

/**
 * Sorted Maps
 */
public class SortedMaps {

    /**
     * Constructor
     */
    private SortedMaps() {
        // Avoid instantiation
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    private static final SparseArray EMPTY_SPARSE_ARRAY = unmodifiableSparseArray(new TreeMap());

    /**
     * Returns a SparseArray backed by the specified sorted map.
     * Changes to the returned sparse array "write through" to the sorted map.
     * Setting a value to null is propagated as
     * remove operation. The returned sparse array is
     * Serializable.
     * 
     * @param s
     *            the sorted map by which the sparse array will be backed.
     * 
     * @return a sparse array view of the specified sorted map.
     */
    public static  SparseArray asSparseArray(
        SortedMap s
    ) {
        return new AsSparseArray(s);
    }

    /**
     * Returns an empty sparse array
     * 
     * @return an an empty sparse array
     */
    @SuppressWarnings("unchecked")
    public static  SparseArray emptySparseArray() {
        return EMPTY_SPARSE_ARRAY;
    }

    /**
     * Returns a SparseArray containing a single element
     * 
     * @param element
     *            the single element
     * 
     * @return an unmodifiable SparseArray containing the single element
     */
    public static  SparseArray singletonSparseArray(E element) {
        return unmodifiableSparseArray(
            new TreeMap(
                Collections.singletonMap(Integer.valueOf(0), element)
            )
        );
    }

    /**
     * Returns a SparseArray backed by the specified sorted map.
     * The returned sparse array is Serializable.
     * 
     * @param s
     *            the sorted map by which the sparse array will be backed.
     * 
     * @return an unmodifiable sparse array view of the specified sorted map.
     */
    public static  SparseArray unmodifiableSparseArray(
        SortedMap s
    ) {
        return asSparseArray(
            Collections.unmodifiableSortedMap(s)
        );
    }

    
    //------------------------------------------------------------------------
    // Class AsSparseArray
    //------------------------------------------------------------------------

    /**
     * TreeMap based SparseArray implementation.
     */
    static class AsSparseArray
        extends AbstractSparseArray
        implements Serializable {

        /**
         * Constructor
         *
         * @param delegate
         */
        AsSparseArray(
            SortedMap delegate
        ) {
            this.delegate = delegate;
        }

        /**
         * Implements Serializable
         */
        private static final long serialVersionUID = -162457543630599238L;

        /**
         * The sorted map by which the sparse array will is backed
         */
        private final SortedMap delegate;

        /*
         * (non-Javadoc)
         * 
         * @see org.w3c.cci2.AbstractSparseArray#delegate()
         */
        @Override
        protected SortedMap delegate() {
            return this.delegate;
        }

        /* (non-Javadoc)
         * @see org.w3c.cci2.AbstractSparseArray#newInstance(int, java.util.SortedMap)
         */
        @Override
        protected SparseArray subArray(
            SortedMap delegate
        ) {
            return new AsSparseArray<>(delegate);
        }

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy