org.w3c.cci2.SortedMaps Maven / Gradle / Ivy
/*
* ====================================================================
* 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);
}
}
}