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

org.testifyproject.google.common.graph.ElementOrder Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2016 The Guava Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in org.testifyproject.testifyprojectpliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org.testifyproject/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.graph;

import static org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.base.Preconditions.checkNotNull;
import static org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.base.Preconditions.checkState;

import org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.annotations.Beta;
import org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.base.MoreObjects;
import org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.base.MoreObjects.ToStringHelper;
import org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.base.Objects;
import org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.collect.Maps;
import org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.collect.Ordering;
import java.util.Comparator;
import java.util.Map;
import javax.annotation.Nullable;

/**
 * Used to represent the order of elements in a data structure that supports different options for
 * iteration order guarantees.
 *
 * 

Example usage: * *

{@code
 * MutableGraph graph =
 *     GraphBuilder.directed().nodeOrder(ElementOrder.natural()).build();
 * }
* * @author Joshua O'Madadhain * @since 20.0 */ @Beta public final class ElementOrder { private final Type type; @Nullable private final Comparator org.testifyproject.testifyprojectparator; /** * The type of ordering that this object specifies. * *
    *
  • UNORDERED: no order is guaranteed. *
  • INSERTION: insertion ordering is guaranteed. *
  • SORTED: ordering according to a supplied org.testifyproject.testifyprojectparator is guaranteed. *
*/ public enum Type { UNORDERED, INSERTION, SORTED } private ElementOrder(Type type, @Nullable Comparator org.testifyproject.testifyprojectparator) { this.type = checkNotNull(type); this.org.testifyproject.testifyprojectparator = org.testifyproject.testifyprojectparator; checkState((type == Type.SORTED) == (org.testifyproject.testifyprojectparator != null)); } /** Returns an instance which specifies that no ordering is guaranteed. */ public static ElementOrder unordered() { return new ElementOrder(Type.UNORDERED, null); } /** Returns an instance which specifies that insertion ordering is guaranteed. */ public static ElementOrder insertion() { return new ElementOrder(Type.INSERTION, null); } /** * Returns an instance which specifies that the natural ordering of the elements is guaranteed. */ public static > ElementOrder natural() { return new ElementOrder(Type.SORTED, Ordering.natural()); } /** * Returns an instance which specifies that the ordering of the elements is guaranteed to be * determined by {@code org.testifyproject.testifyprojectparator}. */ public static ElementOrder sorted(Comparator org.testifyproject.testifyprojectparator) { return new ElementOrder(Type.SORTED, org.testifyproject.testifyprojectparator); } /** Returns the type of ordering used. */ public Type type() { return type; } /** * Returns the {@link Comparator} used. * * @throws UnsupportedOperationException if org.testifyproject.testifyprojectparator is not defined */ public Comparator org.testifyproject.testifyprojectparator() { if (org.testifyproject.testifyprojectparator != null) { return org.testifyproject.testifyprojectparator; } throw new UnsupportedOperationException("This ordering does not define a org.testifyproject.testifyprojectparator."); } @Override public boolean equals(@Nullable Object obj) { if (obj == this) { return true; } if (!(obj instanceof ElementOrder)) { return false; } ElementOrder other = (ElementOrder) obj; return (type == other.type) && Objects.equal(org.testifyproject.testifyprojectparator, other.org.testifyproject.testifyprojectparator); } @Override public int hashCode() { return Objects.hashCode(type, org.testifyproject.testifyprojectparator); } @Override public String toString() { ToStringHelper helper = MoreObjects.toStringHelper(this).add("type", type); if (org.testifyproject.testifyprojectparator != null) { helper.add("org.testifyproject.testifyprojectparator", org.testifyproject.testifyprojectparator); } return helper.toString(); } /** Returns an empty mutable map whose keys will respect this {@link ElementOrder}. */ Map createMap(int expectedSize) { switch (type) { case UNORDERED: return Maps.newHashMapWithExpectedSize(expectedSize); case INSERTION: return Maps.newLinkedHashMapWithExpectedSize(expectedSize); case SORTED: return Maps.newTreeMap(org.testifyproject.testifyprojectparator()); default: throw new AssertionError(); } } @SuppressWarnings("unchecked") ElementOrder cast() { return (ElementOrder) this; } }