/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.jikesrvm.compilers.opt.util; final class SpaceEffGraphNodeListHeader { SpaceEffGraphNodeList _first; SpaceEffGraphNodeList _last; SpaceEffGraphNodeList first() { return _first; } SpaceEffGraphNodeList last() { return _last; } public void append(SpaceEffGraphNode node) { SpaceEffGraphNodeList p = new SpaceEffGraphNodeList(); p._node = node; SpaceEffGraphNodeList last = _last; if (last == null) { // will be the case for first edge. _first = p; _last = p; } else { // there is at least one node. last._next = p; p._prev = last; // doubly linked list. _last = p; } } public boolean add(SpaceEffGraphNode node) { SpaceEffGraphNodeList p = first(); SpaceEffGraphNodeList prev = first(); if (p == null) { // will be the case for first node. p = new SpaceEffGraphNodeList(); p._node = node; _first = p; _last = p; return true; } while (p != null) { if (p._node == node) { // node already in list. return false; } prev = p; p = p._next; } prev._next = new SpaceEffGraphNodeList(); prev._next._node = node; prev._next._prev = prev; // doubly linked list. _last = prev._next; return true; } }