Open main menu

lensowiki β

Computer Science/61b/Homework/hw4/list/LockDList.java

< Computer Science‎ | 61b‎ | Homework‎ | hw4‎ | list
Revision as of 22:08, 26 April 2007 by Lensovet (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
This page contains computer code. Unlike all articles on the lensowiki, which are released under the GFDL, this code is released under the GPL.

Copyright 2006, 2007 Paul Borokhov. All rights reserved.

This code is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

The code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

//
//  LockDList.java
//  
//
//  Created by Paul Borokhov on 10/6/06.
//
package list;

public class LockDList extends DList {
	
	protected LockDListNode head;
	protected int size;
	
	protected LockDListNode newNode(Object item, DListNode prev, DListNode next) {
		return new LockDListNode(item, prev, next);
	}
	
	public LockDList() { // super() gets called regardless, so no need to do anything here (do we even need this at all?)
	}
	
	// inherit size() from super
	
	public void insertFront(Object item) {
		LockDListNode node = newNode(item, head, head.next);
		head.next.prev = node;
		head.next = node;
		size++;
	}
	
	public void insertBack(Object item) {
		LockDListNode node = newNode(item, head.prev, head);
		head.prev.next = node;
		head.prev = node;
		size++;
	}
	
	// inherit front() from super
	
	// inherit back() from super
	
	// inherit next() and prev() from super
	
	public void insertAfter(Object item, DListNode node) {
		if (node!=null && node instanceof LockDListNode) { 
			LockDListNode insertion = newNode(item, node, node.next);
			node.next.prev = insertion;
			node.next = insertion;
			size++;
		}
	}
	
	public void insertBefore(Object item, DListNode node) {
		if (node!=null && node instanceof LockDListNode) {
			LockDListNode insertion = newNode(item, node.prev, node);
			node.prev.next = insertion;
			node.prev = insertion;
			size++;
		}
	}
	
	public void remove(DListNode node) {
		if (node!=null && node instanceof LockDListNode && !node.locked) {
			super.remove(node);
		}
	}
	
	public void lockNode(LockDListNode node) {
		node.locked = true;
	}
}