From e33d1e9b9a531571a71fe8b16f157fc3275ee287 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 22 Jan 2014 11:23:20 +0100 Subject: reduce duplicate code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- Makefile | 1 + .../linkedlists/SinglyLinkedList.java | 124 +---------------- .../linkedlists/TaillessSinglyLinkedList.java | 98 +------------ src/datastructures/linkedlists/template | 152 +++++++++++++++++++++ 4 files changed, 157 insertions(+), 218 deletions(-) create mode 100644 src/datastructures/linkedlists/template diff --git a/Makefile b/Makefile index 427ddfa..6babc04 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ obj/%.java: src/%.java $(foreach F, $(PP), src/$(F)) $(GPP) -s £ < "$<" > "$@" +obj/datastructures/linkedlists/*.java: src/datastructures/linkedlists/template obj/algorithms/searching/MultiinterpolationSearch.class: obj/algorithms/searching/InterpolationSearch.class obj/algorithms/searching/MultibinarySearch.class: obj/algorithms/searching/BinarySearch.class diff --git a/src/datastructures/linkedlists/SinglyLinkedList.java b/src/datastructures/linkedlists/SinglyLinkedList.java index 137736c..50814c6 100644 --- a/src/datastructures/linkedlists/SinglyLinkedList.java +++ b/src/datastructures/linkedlists/SinglyLinkedList.java @@ -35,126 +35,6 @@ package datastructures.linkedlists; * @param The value stored in the structure */ public class SinglyLinkedList -{ - /** - * Node for the list - */ - public class Node - { - /** - * Constructor - * - * @param value The value to store in the list - */ - private Node(T value) - { - this.value = value; - } - - - - /** - * The value stored in the list by this node - */ - public T value; - - /** - * The next node in the list - */ - public Node next = null; - - } - - - - /** - * The first node in the list - */ - public Node head = null; - - /** - * The last node in the list - */ - public Node tail = null; - - - - /** - * Insert a value in the beginning of the list - * - * @param value The value to insert - * @return The node that has be created and inserted - */ - public Node insertBeginning(T value) - { - Node node = new Node(value); - node.next = this.head; - if (this.head == null) - this.tail = node; - this.head = node; - return node; - } - - /** - * Remove the node at the beginning of the list - * - * @return The node that has been removed - */ - public Node removeBeginning() - { - Node node = head; - if (node != null) - head = head.next; - if (this.tail == node) - this.tail = null; - return node; - } - - /** - * Insert a value after a specified, reference, node - * - * @param value The value to insert - * @param predecessor The reference node - * @return The node that has be created and inserted - */ - public Node insertAfter(T value, Node predecessor) - { - Node node = new Node(value); - node.next = predecessor.next; - predecessor.next = node; - if (this.tail == predecessor) - this.tail = node; - return node; - } - - /** - * Remove the node after a specified, reference, node - * - * @param predecessor The reference node - * @return The node that has been removed - */ - public Node removeAfter(Node predecessor) - { - Node node = predecessor.next; - if (node == null) - predecessor.next = node.next; - if (this.tail == node) - this.tail = predecessor; - return node; - } - - /** - * Insert a value in the end of the list - * - * @param value The value to insert - * @return The node that has be created and inserted - */ - public Node insertEnd(T value) - { - if (this.tail == null) - return insertBeginning(value); - return insertAfter(value, this.tail); - } - -} +£>export with_tail=1 +£>gpp -s £ < src/datastructures/linkedlists/template | sed -e '/^[/ ]\*/d' diff --git a/src/datastructures/linkedlists/TaillessSinglyLinkedList.java b/src/datastructures/linkedlists/TaillessSinglyLinkedList.java index 5dd92c0..a73ab72 100644 --- a/src/datastructures/linkedlists/TaillessSinglyLinkedList.java +++ b/src/datastructures/linkedlists/TaillessSinglyLinkedList.java @@ -34,100 +34,6 @@ package datastructures.linkedlists; * @param The value stored in the structure */ public class TaillessSinglyLinkedList -{ - /** - * Node for the list - */ - public class Node - { - /** - * Constructor - * - * @param value The value to store in the list - */ - private Node(T value) - { - this.value = value; - } - - - - /** - * The value stored in the list by this node - */ - public T value; - - /** - * The next node in the list - */ - public Node next = null; - - } - - - - /** - * The first node in the list - */ - public Node head = null; - - - - /** - * Insert a value in the beginning of the list - * - * @param value The value to insert - * @return The node that has be created and inserted - */ - public Node insertBeginning(T value) - { - Node node = new Node(value); - node.next = this.head; - this.head = node; - return node; - } - - /** - * Remove the node at the beginning of the list - * - * @return The node that has been removed - */ - public Node removeBeginning() - { - Node node = head; - if (node != null) - head = head.next; - return node; - } - - /** - * Insert a value after a specified, reference, node - * - * @param value The value to insert - * @param predecessor The reference node - * @return The node that has be created and inserted - */ - public Node insertAfter(T value, Node predecessor) - { - Node node = new Node(value); - node.next = predecessor.next; - predecessor.next = node; - return node; - } - - /** - * Remove the node after a specified, reference, node - * - * @param predecessor The reference node - * @return The node that has been removed - */ - public Node removeAfter(Node predecessor) - { - Node node = predecessor.next; - if (node == null) - predecessor.next = node.next; - return node; - } - -} +£>export with_tail=0 +£>gpp -s £ < src/datastructures/linkedlists/template | sed -e '/^[/ ]\*/d' diff --git a/src/datastructures/linkedlists/template b/src/datastructures/linkedlists/template new file mode 100644 index 0000000..4ea20ad --- /dev/null +++ b/src/datastructures/linkedlists/template @@ -0,0 +1,152 @@ +/* -*- java -*- */ +/** + * Copyright © 2014 Mattias Andrée (maandree@member.fsf.org) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +{ + /** + * Node for the list + */ + public class Node + { + /** + * Constructor + * + * @param value The value to store in the list + */ + private Node(T value) + { + this.value = value; + } + + + + /** + * The value stored in the list by this node + */ + public T value; + + /** + * The next node in the list + */ + public Node next = null; + + } + + + + /** + * The first node in the list + */ + public Node head = null; + +£>if (( with_tail )); then + /** + * The last node in the list + */ + public Node tail = null; +£>fi + + + + /** + * Insert a value in the beginning of the list + * + * @param value The value to insert + * @return The node that has be created and inserted + */ + public Node insertBeginning(T value) + { + Node node = new Node(value); + node.next = this.head; +£>if (( with_tail )); then + if (this.head == null) + this.tail = node; +£>fi + this.head = node; + return node; + } + + /** + * Remove the node at the beginning of the list + * + * @return The node that has been removed + */ + public Node removeBeginning() + { + Node node = head; + if (node != null) + head = head.next; +£>if (( with_tail )); then + if (this.tail == node) + this.tail = null; +£>fi + return node; + } + + /** + * Insert a value after a specified, reference, node + * + * @param value The value to insert + * @param predecessor The reference node + * @return The node that has be created and inserted + */ + public Node insertAfter(T value, Node predecessor) + { + Node node = new Node(value); + node.next = predecessor.next; + predecessor.next = node; +£>if (( with_tail )); then + if (this.tail == predecessor) + this.tail = node; +£>fi + return node; + } + + /** + * Remove the node after a specified, reference, node + * + * @param predecessor The reference node + * @return The node that has been removed + */ + public Node removeAfter(Node predecessor) + { + Node node = predecessor.next; + if (node == null) + predecessor.next = node.next; +£>if (( with_tail )); then + if (this.tail == node) + this.tail = predecessor; +£>fi + return node; + } + +£>if (( with_tail )); then + /** + * Insert a value in the end of the list + * + * @param value The value to insert + * @return The node that has be created and inserted + */ + public Node insertEnd(T value) + { + if (this.tail == null) + return insertBeginning(value); + return insertAfter(value, this.tail); + } +£>fi + +} + -- cgit v1.2.3-70-g09d2