annotate Main/jungle-main/data/list/List.cs @ 28:9588ad364fdd

Last commit before change.
author Kazuma Takeda
date Wed, 18 Jan 2017 19:53:29 +0900
parents 1f99e150f336
children f2ea780b3e80
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
1 using UnityEngine;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
2 using System.Collections;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
3 using System.Collections.Generic;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
4 using System;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
5
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
6 namespace JungleDB {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
7 public class List<T> : IEnumerable<T> {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
8 private readonly Node<T> head;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
9
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
10 public List() {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
11 this.head = new headNode<T>();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
12 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
13
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
14 // T...はC#だとparamsらしい 可変引数型というみたいだ
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
15 public List(params T[] attributes) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
16 List<T> list = new List<T> ();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
17 foreach (T attribute_local in attributes) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
18 list = list.addLast (attribute_local);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
19 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
20 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
21
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
22 private List(Node<T> head) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
23 this.head = head;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
24 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
25
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
26 public Node<T> getHead() {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
27 return head;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
28 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
29
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
30 public List<T> add(int num, T attribute) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
31 Node<T> newHead = head.add(0, num, attribute);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
32 if (newHead == null)
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
33 return this;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
34 return new List<T>(newHead);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
35 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
36
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
37 public List<T> addLast(T attribute) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
38 Node<T> newHead = head.addLast(attribute);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
39 return new List<T>(newHead);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
40 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
41
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
42
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
43 public T index(int num) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
44 int count = 0;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
45 Node<T> currentNode = head.getNext();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
46 while (currentNode != null) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
47 if (count == num) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
48 return currentNode.getAttribute ();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
49 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
50 currentNode = currentNode.getNext();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
51 count++;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
52 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
53 return default(T);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
54 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
55
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
56 public IEnumerator<T> iterator() {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
57 Node<T> currentNode = head.getNext();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
58 int count = 0;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
59 int len = currentNode.length();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
60 while (len != count) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
61 yield return (T)currentNode.getAttribute();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
62 currentNode = currentNode.getNext ();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
63 count++;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
64 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
65 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
66
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
67 IEnumerator IEnumerable.GetEnumerator()
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
68 {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
69 return this.GetEnumerator();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
70 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
71
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
72 public IEnumerator<T> GetEnumerator()
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
73 {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
74 return iterator ();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
75 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
76
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
77
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
78 public List<T> delete(int num) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
79 Node<T> newNode = head.delete(0, num);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
80 if (newNode == null)
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
81 return this;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
82 return new List<T>(newNode);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
83 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
84
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
85 public List<T> replace(int num, T attribute) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
86 Node<T> newHead = head.replaceNode(0, num, attribute);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
87 if (newHead == null)
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
88 return this;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
89 return new List<T>(newHead);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
90 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
91
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
92 public T tail() {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
93 return index(length() - 1);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
94 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
95
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
96 // java code head.
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
97 public T headList() {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
98 return index(0);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
99 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
100
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
101 public List<T> deleteLast() {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
102 return delete(head.length() - 1);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
103 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
104
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
105 public List<T> deleteHead() {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
106 return delete(0);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
107 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
108
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
109 public int length() {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
110 return head.length();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
111 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
112
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
113 public List<T> append(List<T> list) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
114 IEnumerator<T> iterator = list.iterator();
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
115 List<T> newList = this;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
116 while (iterator.MoveNext()) {
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
117 T attribute = iterator.Current;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
118 newList = newList.addLast(attribute);
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
119 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
120 return newList;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
121 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
122 }
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
123 }