Javolution 6.0.0 java
FastTableImpl.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.util.internal.table;
10 
11 import java.util.Iterator;
12 import java.util.NoSuchElementException;
13 
15 
21 public class FastTableImpl<E> extends TableView<E> {
22 
24  private class IteratorImpl implements Iterator<E> {
25  private int currentIndex = -1;
26  private int nextIndex;
27 
28  @Override
29  public boolean hasNext() {
30  return nextIndex < size;
31  }
32 
33  @Override
34  @SuppressWarnings("unchecked")
35  public E next() {
36  if (nextIndex >= size) throw new NoSuchElementException();
38  return (E) fractal.get(currentIndex);
39  }
40 
41  @Override
42  public void remove() {
43  if (currentIndex < 0) throw new IllegalStateException();
45  nextIndex--;
46  currentIndex = -1;
47  }
48  }
49 
50  private static final long serialVersionUID = 0x600L; // Version.
51  private transient int capacity; // Actual memory allocated is usually far less than capacity since inner fractal tables can be null.
53  private transient FractalTableImpl fractal; // Null if empty (capacity 0)
54  private transient int size;
55 
57  super(null); // Root class.
58  this.comparator = comparator;
59  }
60 
61  @Override
62  public boolean add(E element) {
64  return true;
65  }
66 
67  @Override
68  public void add(int index, E element) {
69  if ((index < 0) || (index > size)) indexError(index);
70  checkUpsize();
71  if (index >= (size >> 1)) {
72  fractal.shiftRight(element, index, size - index);
73  } else {
74  fractal.shiftLeft(element, index - 1, index);
75  fractal.offset--;
76  }
77  size++;
78  }
79 
80  @Override
81  public void addFirst(E element) {
82  checkUpsize();
83  fractal.offset--;
84  fractal.set(0, element);
85  size++;
86  }
87 
88  @Override
89  public void addLast(E element) {
90  checkUpsize();
91  fractal.set(size++, element);
92  }
93 
94  @Override
95  public void clear() {
96  fractal = null;
97  capacity = 0;
98  size = 0;
99  }
100 
101  @Override
102  public FastTableImpl<E> clone() { // Make a copy.
104  copy.addAll(this);
105  return copy;
106  }
107 
108  @Override
110  return comparator;
111  }
112 
113  @SuppressWarnings("unchecked")
114  @Override
115  public E get(int index) {
116  if ((index < 0) && (index >= size)) indexError(index);
117  return (E) fractal.get(index);
118  }
119 
120  @Override
121  public E getFirst() {
122  if (size == 0) emptyError();
123  return get(0);
124  }
125 
126  @Override
127  public E getLast() {
128  if (size == 0) emptyError();
129  return get(size - 1);
130  }
131 
132  @Override
133  public Iterator<E> iterator() {
134  return new IteratorImpl();
135  }
136 
137  @SuppressWarnings("unchecked")
138  @Override
139  public E remove(int index) {
140  if ((index < 0) || (index >= size)) indexError(index);
141  E removed = (E) fractal.get(index);
142  if (index >= (size >> 1)) {
143  fractal.shiftLeft(null, size - 1, size - index - 1);
144  } else {
145  fractal.shiftRight(null, 0, index);
146  fractal.offset++;
147  }
148  size--;
149  return removed;
150  }
151 
152  @SuppressWarnings("unchecked")
153  @Override
154  public E removeFirst() {
155  if (size == 0) emptyError();
156  E first = (E) fractal.set(0, null);
157  fractal.offset++;
158  size--;
159  return first;
160  }
161 
162  @SuppressWarnings("unchecked")
163  @Override
164  public E removeLast() {
165  if (size == 0) emptyError();
166  E last = (E) fractal.set(--size, null);
167  return last;
168  }
169 
170  @SuppressWarnings("unchecked")
171  @Override
172  public E set(int index, E element) {
173  if ((index < 0) && (index >= size)) indexError(index);
174  return (E) fractal.set(index, element);
175  }
176 
177  @Override
178  public int size() {
179  return size;
180  }
181 
182  private void checkUpsize() {
183  if (size >= capacity) upsize();
184  }
185 
187  @SuppressWarnings("unchecked")
188  private void readObject(java.io.ObjectInputStream s)
189  throws java.io.IOException, ClassNotFoundException {
190  s.defaultReadObject(); // Deserialize comparator.
191  int n = s.readInt();
192  for (int i = 0; i < n; i++)
193  addLast((E) s.readObject());
194  }
195 
196  private void upsize() {
197  fractal = (fractal == null) ? new FractalTableImpl() : fractal.upsize();
199  }
200 
202  private void writeObject(java.io.ObjectOutputStream s)
203  throws java.io.IOException {
204  s.defaultWriteObject(); // Serialize comparator.
205  s.writeInt(size);
206  for (int i = 0; i < size; i++)
207  s.writeObject(fractal.get(i));
208  }
209 
210 }
javolution
javolution.util.internal.table.FastTableImpl.FastTableImpl
FastTableImpl(Equality<? super E > comparator)
Definition: FastTableImpl.java:56
javolution.util.internal.table.FastTableImpl.iterator
Iterator< E > iterator()
Definition: FastTableImpl.java:133
javolution.util.internal.table.FractalTableImpl.set
Object set(int index, Object element)
Definition: FractalTableImpl.java:63
javolution.util.internal.table.FastTableImpl.writeObject
void writeObject(java.io.ObjectOutputStream s)
Definition: FastTableImpl.java:202
javolution.util.internal.table.FractalTableImpl
Definition: FractalTableImpl.java:19
javolution.util.internal.table.FastTableImpl.IteratorImpl.next
E next()
Definition: FastTableImpl.java:35
javolution.util.internal.table.FastTableImpl.fractal
transient FractalTableImpl fractal
Definition: FastTableImpl.java:53
javolution.util.internal.table.FastTableImpl.IteratorImpl.hasNext
boolean hasNext()
Definition: FastTableImpl.java:29
javolution.util.internal.table.FastTableImpl.IteratorImpl
Definition: FastTableImpl.java:24
javolution.util.internal.table.FastTableImpl.upsize
void upsize()
Definition: FastTableImpl.java:196
javolution.util.internal.table.FastTableImpl.IteratorImpl.nextIndex
int nextIndex
Definition: FastTableImpl.java:26
javolution.util.internal.table.FastTableImpl.size
int size()
Definition: FastTableImpl.java:178
javolution.util.internal.table.TableView
Definition: TableView.java:25
javolution.util.internal.table.FastTableImpl.comparator
Equality<? super E > comparator()
Definition: FastTableImpl.java:109
javolution.util.internal.table.FastTableImpl.comparator
final Equality<? super E > comparator
Definition: FastTableImpl.java:52
javolution.util.internal.table.TableView.addAll
boolean addAll(int index, Collection<? extends E > c)
Definition: TableView.java:40
javolution.util.internal.table.FastTableImpl.readObject
void readObject(java.io.ObjectInputStream s)
Definition: FastTableImpl.java:188
javolution.util.internal.table.FastTableImpl.add
boolean add(E element)
Definition: FastTableImpl.java:62
javolution.util.internal.table.FastTableImpl.clone
FastTableImpl< E > clone()
Definition: FastTableImpl.java:102
javolution.util.internal.table.FractalTableImpl.get
Object get(int index)
Definition: FractalTableImpl.java:57
javolution.util.function.Equality
Definition: Equality.java:39
javolution.util.internal.table.FastTableImpl.removeLast
E removeLast()
Definition: FastTableImpl.java:164
javolution.util.internal.table.FractalTableImpl.capacity
int capacity()
Definition: FractalTableImpl.java:51
javolution.util.internal.table.FastTableImpl.remove
E remove(int index)
Definition: FastTableImpl.java:139
javolution.util.internal.table.TableView.element
final E element()
Definition: TableView.java:68
javolution.util.function
Definition: Consumer.java:9
javolution.util.internal.table.FastTableImpl.removeFirst
E removeFirst()
Definition: FastTableImpl.java:154
javolution.util.internal.table.TableView.indexError
void indexError(int index)
Definition: TableView.java:255
javolution.util.internal.table.FastTableImpl.add
void add(int index, E element)
Definition: FastTableImpl.java:68
javolution.util.internal.table.FastTableImpl.getFirst
E getFirst()
Definition: FastTableImpl.java:121
javolution.util.internal.table.FastTableImpl
Definition: FastTableImpl.java:21
javolution.util.internal.table.FastTableImpl.addFirst
void addFirst(E element)
Definition: FastTableImpl.java:81
javolution.util.internal.table.FractalTableImpl.upsize
FractalTableImpl upsize()
Definition: FractalTableImpl.java:133
javolution.util.internal.table.FractalTableImpl.shiftRight
void shiftRight(Object inserted, int first, int length)
Definition: FractalTableImpl.java:104
javolution.util.internal.table.FastTableImpl.serialVersionUID
static final long serialVersionUID
Definition: FastTableImpl.java:50
javolution.util.internal.table.FractalTableImpl.shiftLeft
void shiftLeft(Object inserted, int last, int length)
Definition: FractalTableImpl.java:73
javolution.util.internal.table.FastTableImpl.getLast
E getLast()
Definition: FastTableImpl.java:127
javolution.util.internal.table.FastTableImpl.checkUpsize
void checkUpsize()
Definition: FastTableImpl.java:182
javolution.util.internal.table.FractalTableImpl.offset
int offset
Definition: FractalTableImpl.java:26
javolution.util.internal.table.FastTableImpl.addLast
void addLast(E element)
Definition: FastTableImpl.java:89
javolution.util.internal.table.TableView.emptyError
void emptyError()
Definition: TableView.java:250
javolution.util.internal.table.FastTableImpl.capacity
transient int capacity
Definition: FastTableImpl.java:51
javolution.util.internal.table.FastTableImpl.size
transient int size
Definition: FastTableImpl.java:54
javolution.util
Definition: FastBitSet.java:9
javolution.util.internal.table.FastTableImpl.clear
void clear()
Definition: FastTableImpl.java:95
javolution.util.internal.table.FastTableImpl.IteratorImpl.currentIndex
int currentIndex
Definition: FastTableImpl.java:25