104 return array.length == len ? array.clone() : Arrays.copyOf(array, len);
105 }
106 return super.asArrayOfType(componentType);
107 }
108
109 private static boolean canWiden(final Class<?> type) {
110 return TypeUtilities.isWrapperType(type) &&
111 type != Boolean.class && type != Character.class;
112 }
113
114 @Override
115 public ContinuousArrayData convert(final Class<?> type) {
116 if (! canWiden(type)) {
117 final int len = (int)length();
118 return new ObjectArrayData(toObjectArray(false), len);
119 }
120 return this;
121 }
122
123 @Override
124 public void shiftLeft(final int by) {
125 System.arraycopy(array, by, array, 0, array.length - by);
126 }
127
128 @Override
129 public ArrayData shiftRight(final int by) {
130 final ArrayData newData = ensure(by + length() - 1);
131 if (newData != this) {
132 newData.shiftRight(by);
133 return newData;
134 }
135 System.arraycopy(array, 0, array, by, array.length - by);
136 return this;
137 }
138
139 @Override
140 public ArrayData ensure(final long safeIndex) {
141 if (safeIndex >= SparseArrayData.MAX_DENSE_LENGTH) {
142 return new SparseArrayData(this, safeIndex + 1);
143 }
144 final int alen = array.length;
145 if (safeIndex >= alen) {
146 final int newLength = ArrayData.nextSize((int)safeIndex);
|
104 return array.length == len ? array.clone() : Arrays.copyOf(array, len);
105 }
106 return super.asArrayOfType(componentType);
107 }
108
109 private static boolean canWiden(final Class<?> type) {
110 return TypeUtilities.isWrapperType(type) &&
111 type != Boolean.class && type != Character.class;
112 }
113
114 @Override
115 public ContinuousArrayData convert(final Class<?> type) {
116 if (! canWiden(type)) {
117 final int len = (int)length();
118 return new ObjectArrayData(toObjectArray(false), len);
119 }
120 return this;
121 }
122
123 @Override
124 public ArrayData shiftLeft(final int by) {
125 if (by >= length()) {
126 shrink(0);
127 } else {
128 System.arraycopy(array, by, array, 0, array.length - by);
129 }
130 setLength(Math.max(0, length() - by));
131 return this;
132 }
133
134 @Override
135 public ArrayData shiftRight(final int by) {
136 final ArrayData newData = ensure(by + length() - 1);
137 if (newData != this) {
138 newData.shiftRight(by);
139 return newData;
140 }
141 System.arraycopy(array, 0, array, by, array.length - by);
142 return this;
143 }
144
145 @Override
146 public ArrayData ensure(final long safeIndex) {
147 if (safeIndex >= SparseArrayData.MAX_DENSE_LENGTH) {
148 return new SparseArrayData(this, safeIndex + 1);
149 }
150 final int alen = array.length;
151 if (safeIndex >= alen) {
152 final int newLength = ArrayData.nextSize((int)safeIndex);
|