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

org.jgrapht.sux4j.AbstractSuccinctGraph Maven / Gradle / Ivy

There is a newer version: 1.5.2
Show newest version
/*
 * (C) Copyright 2020-2021, by Sebastiano Vigna and Contributors.
 *
 * JGraphT : a free Java graph-theory library
 *
 * See the CONTRIBUTORS.md file distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0, or the
 * GNU Lesser General Public License v2.1 or later
 * which is available at
 * http://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR LGPL-2.1-or-later
 */

package org.jgrapht.sux4j;

import java.io.Serializable;
import java.util.Set;
import java.util.function.Supplier;

import org.jgrapht.graph.AbstractGraph;

import it.unimi.dsi.bits.Fast;
import it.unimi.dsi.fastutil.ints.IntSets;
import it.unimi.dsi.fastutil.objects.ObjectSets;

/**
 * An abstract base class for all succinct implementations.
 *
 * 

* This class provides mutators throwing {@link UnsupportedOperationException} and operations * depending only on the number of vertices and edges. * * @param the graph edge type */ public abstract class AbstractSuccinctGraph extends AbstractGraph implements Serializable { private static final long serialVersionUID = 0L; protected static final String UNMODIFIABLE = "this graph is unmodifiable"; /** The number of vertices in the graph. */ protected final int n; /** The number of edges in the graph. */ protected final int m; /** The shift used to read sources in the successor list. */ protected final int sourceShift; /** The mask used to read targets in the successor list (lowest {@link #sourceShift} bits). */ protected final long targetMask; public AbstractSuccinctGraph(final int n, final int m) { super(); this.n = n; this.m = m; sourceShift = Fast.ceilLog2(n); targetMask = (1L << sourceShift) - 1; } @Override public Set vertexSet() { return IntSets.fromTo(0, n); } /** * Ensures that the specified vertex exists in this graph, or else throws exception. * * @param v vertex * @return true if this assertion holds. * @throws IllegalArgumentException if specified vertex does not exist in this graph. */ @Override protected boolean assertVertexExist(final Integer v) { if (v < 0 || v >= n) throw new IllegalArgumentException(); return true; } @Override public boolean containsVertex(final Integer v) { return v >= 0 && v < n; } @Override public Set getAllEdges(final Integer sourceVertex, final Integer targetVertex) { final E edge = getEdge(sourceVertex, targetVertex); return edge == null ? ObjectSets.emptySet() : ObjectSets.singleton(edge); } @Override public Supplier getVertexSupplier() { return null; } @Override public Supplier getEdgeSupplier() { return null; } @Override public E addEdge(final Integer sourceVertex, final Integer targetVertex) { throw new UnsupportedOperationException(UNMODIFIABLE); } @Override public boolean addEdge(final Integer sourceVertex, final Integer targetVertex, final E e) { throw new UnsupportedOperationException(UNMODIFIABLE); } @Override public Integer addVertex() { throw new UnsupportedOperationException(UNMODIFIABLE); } @Override public boolean addVertex(final Integer v) { throw new UnsupportedOperationException(UNMODIFIABLE); } @Override public E removeEdge(final Integer sourceVertex, final Integer targetVertex) { throw new UnsupportedOperationException(UNMODIFIABLE); } @Override public boolean removeEdge(final E e) { throw new UnsupportedOperationException(UNMODIFIABLE); } @Override public boolean removeVertex(final Integer v) { throw new UnsupportedOperationException(UNMODIFIABLE); } @Override public double getEdgeWeight(final E e) { return 1.0; } @Override public void setEdgeWeight(final E e, final double weight) { throw new UnsupportedOperationException(UNMODIFIABLE); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy