0
|
1 using UnityEngine;
|
|
2 using System.Collections;
|
|
3 using System.Collections.Generic;
|
|
4 using System;
|
|
5
|
|
6 public class List<T> : System.Collections.Generic.List<T>, IEnumerable<T> {
|
|
7 private Node<T> head;
|
|
8 T[] _array;
|
|
9 T Count;
|
|
10
|
|
11
|
|
12 public List() {
|
|
13 this.head = new headNode<T>();
|
|
14 }
|
|
15
|
|
16 // この部分がだめ。safeVarargsの部分
|
|
17 public List(T attributes) {
|
|
18 List<T> list = new List<T> ();
|
|
19 //for (int i = 0; i < Convert.ToInt32(attributes.Count); i++) {
|
|
20 list = list.addLast (attributes);
|
|
21 //}
|
|
22 this.head = list.getHead();
|
|
23 }
|
|
24
|
|
25 private List(Node<T> head) {
|
|
26 this.head = head;
|
|
27 }
|
|
28
|
|
29 public Node<T> getHead() {
|
|
30 return head;
|
|
31 }
|
|
32
|
|
33 public List<T> add(int num, T attribute) {
|
|
34 Node<T> newHead = head.add(0, num, attribute);
|
|
35 if (newHead == null)
|
|
36 return this;
|
|
37 return new List<T>(newHead);
|
|
38 }
|
|
39
|
|
40 public List<T> addLast(T attribute) {
|
|
41 Node<T> newHead = head.addLast(attribute);
|
|
42 return new List<T>(newHead);
|
|
43 }
|
|
44
|
|
45
|
|
46 public T index(int num) {
|
|
47 int count = 0;
|
|
48 Node<T> currentNode = head.getNext();
|
|
49 while (currentNode != null) {
|
|
50 if (count == num)
|
|
51 return currentNode.getAttribute();
|
|
52 currentNode = currentNode.getNext();
|
|
53 count++;
|
|
54 }
|
|
55 return default(T);
|
|
56 }
|
|
57
|
|
58 public IEnumerator<T> iterator() {
|
|
59 Node<T> currentNode = head.getNext();
|
|
60 while (currentNode.getAttribute() != null) {
|
|
61 yield return (T)currentNode.getAttribute();
|
|
62 currentNode = currentNode.getNext();
|
|
63 }
|
|
64 }
|
|
65
|
|
66
|
|
67 public List<T> delete(int num) {
|
|
68 Node<T> newNode = head.delete(0, num);
|
|
69 if (newNode == null)
|
|
70 return this;
|
|
71 return new List<T>(newNode);
|
|
72 }
|
|
73
|
|
74 public List<T> replace(int num, T attribute) {
|
|
75 Node<T> newHead = head.replaceNode(0, num, attribute);
|
|
76 if (newHead == null)
|
|
77 return this;
|
|
78 return new List<T>(newHead);
|
|
79 }
|
|
80
|
|
81 public T tail() {
|
|
82 return index(length() - 1);
|
|
83 }
|
|
84
|
|
85 // java code head.
|
|
86 public T headList() {
|
|
87 return index(0);
|
|
88 }
|
|
89
|
|
90 public List<T> deleteLast() {
|
|
91 return delete(head.length() - 1);
|
|
92 }
|
|
93
|
|
94 public List<T> deleteHead() {
|
|
95 return delete(0);
|
|
96 }
|
|
97
|
|
98 public int length() {
|
|
99 return head.length();
|
|
100 }
|
|
101
|
|
102 public string toString() {
|
|
103 string pathString = "<";
|
|
104 //IEnumerator<T> iterator = reverseIterator();
|
|
105 while (true) {
|
|
106 // pathString += iterator.next();
|
|
107 // if (iterator.hasNext())
|
|
108 // pathString += ",";
|
|
109 // else
|
|
110 // break;
|
|
111 }
|
|
112 pathString += ">";
|
|
113 return pathString;
|
|
114 }
|
|
115
|
|
116 public List<T> append(List<T> list) {
|
|
117 IEnumerator<T> iterator = list.iterator();
|
|
118 List<T> newList = this;
|
|
119 while (iterator.MoveNext()) {
|
|
120 T attribute = iterator.Current;
|
|
121 newList = newList.addLast(attribute);
|
|
122 }
|
|
123 return newList;
|
|
124 }
|
|
125
|
|
126 // public IEnumerator<T> iterator() {
|
|
127 // Node<T> currentNode = head.getNext();
|
|
128 // while (currentNode != null) {
|
|
129 // yield return currentNode;
|
|
130 // currentNode = currentNode.getNext();
|
|
131 // }
|
|
132 // }
|
|
133 }
|