LazyStringArrayList.java
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 package com.google.protobuf;
32 
33 import java.util.AbstractList;
34 import java.util.ArrayList;
35 import java.util.Arrays;
36 import java.util.Collection;
37 import java.util.Collections;
38 import java.util.List;
39 import java.util.RandomAccess;
40 
61 public class LazyStringArrayList extends AbstractProtobufList<String>
62  implements LazyStringList, RandomAccess {
63 
64  private static final LazyStringArrayList EMPTY_LIST = new LazyStringArrayList();
65 
66  static {
67  EMPTY_LIST.makeImmutable();
68  }
69 
70  static LazyStringArrayList emptyList() {
71  return EMPTY_LIST;
72  }
73 
74  // For compatibility with older runtimes.
75  public static final LazyStringList EMPTY = EMPTY_LIST;
76 
77  private final List<Object> list;
78 
80  this(DEFAULT_CAPACITY);
81  }
82 
83  public LazyStringArrayList(int initialCapacity) {
84  this(new ArrayList<Object>(initialCapacity));
85  }
86 
88  list = new ArrayList<Object>(from.size());
89  addAll(from);
90  }
91 
92  public LazyStringArrayList(List<String> from) {
93  this(new ArrayList<Object>(from));
94  }
95 
96  private LazyStringArrayList(ArrayList<Object> list) {
97  this.list = list;
98  }
99 
100  @Override
102  if (capacity < size()) {
103  throw new IllegalArgumentException();
104  }
105  ArrayList<Object> newList = new ArrayList<Object>(capacity);
106  newList.addAll(list);
107  return new LazyStringArrayList(newList);
108  }
109 
110  @Override
111  public String get(int index) {
112  Object o = list.get(index);
113  if (o instanceof String) {
114  return (String) o;
115  } else if (o instanceof ByteString) {
116  ByteString bs = (ByteString) o;
117  String s = bs.toStringUtf8();
118  if (bs.isValidUtf8()) {
119  list.set(index, s);
120  }
121  return s;
122  } else {
123  byte[] ba = (byte[]) o;
124  String s = Internal.toStringUtf8(ba);
125  if (Internal.isValidUtf8(ba)) {
126  list.set(index, s);
127  }
128  return s;
129  }
130  }
131 
132  @Override
133  public int size() {
134  return list.size();
135  }
136 
137  @Override
138  public String set(int index, String s) {
139  ensureIsMutable();
140  Object o = list.set(index, s);
141  return asString(o);
142  }
143 
144  @Override
145  public void add(int index, String element) {
146  ensureIsMutable();
147  list.add(index, element);
148  modCount++;
149  }
150 
151  private void add(int index, ByteString element) {
152  ensureIsMutable();
153  list.add(index, element);
154  modCount++;
155  }
156 
157  private void add(int index, byte[] element) {
158  ensureIsMutable();
159  list.add(index, element);
160  modCount++;
161  }
162 
163  @Override
164  public boolean addAll(Collection<? extends String> c) {
165  // The default implementation of AbstractCollection.addAll(Collection)
166  // delegates to add(Object). This implementation instead delegates to
167  // addAll(int, Collection), which makes a special case for Collections
168  // which are instances of LazyStringList.
169  return addAll(size(), c);
170  }
171 
172  @Override
173  public boolean addAll(int index, Collection<? extends String> c) {
174  ensureIsMutable();
175  // When copying from another LazyStringList, directly copy the underlying
176  // elements rather than forcing each element to be decoded to a String.
177  Collection<?> collection =
178  c instanceof LazyStringList ? ((LazyStringList) c).getUnderlyingElements() : c;
179  boolean ret = list.addAll(index, collection);
180  modCount++;
181  return ret;
182  }
183 
184  @Override
185  public boolean addAllByteString(Collection<? extends ByteString> values) {
186  ensureIsMutable();
187  boolean ret = list.addAll(values);
188  modCount++;
189  return ret;
190  }
191 
192  @Override
193  public boolean addAllByteArray(Collection<byte[]> c) {
194  ensureIsMutable();
195  boolean ret = list.addAll(c);
196  modCount++;
197  return ret;
198  }
199 
200  @Override
201  public String remove(int index) {
202  ensureIsMutable();
203  Object o = list.remove(index);
204  modCount++;
205  return asString(o);
206  }
207 
208  @Override
209  public void clear() {
210  ensureIsMutable();
211  list.clear();
212  modCount++;
213  }
214 
215  @Override
216  public void add(ByteString element) {
217  ensureIsMutable();
218  list.add(element);
219  modCount++;
220  }
221 
222  @Override
223  public void add(byte[] element) {
224  ensureIsMutable();
225  list.add(element);
226  modCount++;
227  }
228 
229  @Override
230  public Object getRaw(int index) {
231  return list.get(index);
232  }
233 
234  @Override
236  Object o = list.get(index);
238  if (b != o) {
239  list.set(index, b);
240  }
241  return b;
242  }
243 
244  @Override
245  public byte[] getByteArray(int index) {
246  Object o = list.get(index);
247  byte[] b = asByteArray(o);
248  if (b != o) {
249  list.set(index, b);
250  }
251  return b;
252  }
253 
254  @Override
255  public void set(int index, ByteString s) {
256  setAndReturn(index, s);
257  }
258 
259  private Object setAndReturn(int index, ByteString s) {
260  ensureIsMutable();
261  return list.set(index, s);
262  }
263 
264  @Override
265  public void set(int index, byte[] s) {
266  setAndReturn(index, s);
267  }
268 
269  private Object setAndReturn(int index, byte[] s) {
270  ensureIsMutable();
271  return list.set(index, s);
272  }
273 
274  private static String asString(Object o) {
275  if (o instanceof String) {
276  return (String) o;
277  } else if (o instanceof ByteString) {
278  return ((ByteString) o).toStringUtf8();
279  } else {
280  return Internal.toStringUtf8((byte[]) o);
281  }
282  }
283 
284  private static ByteString asByteString(Object o) {
285  if (o instanceof ByteString) {
286  return (ByteString) o;
287  } else if (o instanceof String) {
288  return ByteString.copyFromUtf8((String) o);
289  } else {
290  return ByteString.copyFrom((byte[]) o);
291  }
292  }
293 
294  private static byte[] asByteArray(Object o) {
295  if (o instanceof byte[]) {
296  return (byte[]) o;
297  } else if (o instanceof String) {
298  return Internal.toByteArray((String) o);
299  } else {
300  return ((ByteString) o).toByteArray();
301  }
302  }
303 
304  @Override
305  public List<?> getUnderlyingElements() {
306  return Collections.unmodifiableList(list);
307  }
308 
309  @Override
310  public void mergeFrom(LazyStringList other) {
311  ensureIsMutable();
312  for (Object o : other.getUnderlyingElements()) {
313  if (o instanceof byte[]) {
314  byte[] b = (byte[]) o;
315  // Byte array's content is mutable so they should be copied rather than
316  // shared when merging from one message to another.
317  list.add(Arrays.copyOf(b, b.length));
318  } else {
319  list.add(o);
320  }
321  }
322  }
323 
324  private static class ByteArrayListView extends AbstractList<byte[]> implements RandomAccess {
325  private final LazyStringArrayList list;
326 
328  this.list = list;
329  }
330 
331  @Override
332  public byte[] get(int index) {
333  return list.getByteArray(index);
334  }
335 
336  @Override
337  public int size() {
338  return list.size();
339  }
340 
341  @Override
342  public byte[] set(int index, byte[] s) {
343  Object o = list.setAndReturn(index, s);
344  modCount++;
345  return asByteArray(o);
346  }
347 
348  @Override
349  public void add(int index, byte[] s) {
350  list.add(index, s);
351  modCount++;
352  }
353 
354  @Override
355  public byte[] remove(int index) {
356  Object o = list.remove(index);
357  modCount++;
358  return asByteArray(o);
359  }
360  }
361 
362  @Override
363  public List<byte[]> asByteArrayList() {
364  return new ByteArrayListView(this);
365  }
366 
367  private static class ByteStringListView extends AbstractList<ByteString> implements RandomAccess {
368  private final LazyStringArrayList list;
369 
371  this.list = list;
372  }
373 
374  @Override
375  public ByteString get(int index) {
376  return list.getByteString(index);
377  }
378 
379  @Override
380  public int size() {
381  return list.size();
382  }
383 
384  @Override
385  public ByteString set(int index, ByteString s) {
386  Object o = list.setAndReturn(index, s);
387  modCount++;
388  return asByteString(o);
389  }
390 
391  @Override
392  public void add(int index, ByteString s) {
393  list.add(index, s);
394  modCount++;
395  }
396 
397  @Override
398  public ByteString remove(int index) {
399  Object o = list.remove(index);
400  modCount++;
401  return asByteString(o);
402  }
403  }
404 
405  @Override
406  public List<ByteString> asByteStringList() {
407  return new ByteStringListView(this);
408  }
409 
410  @Override
412  if (isModifiable()) {
413  return new UnmodifiableLazyStringList(this);
414  }
415  return this;
416  }
417 }
com.google.protobuf.LazyStringArrayList.ByteArrayListView.add
void add(int index, byte[] s)
Definition: LazyStringArrayList.java:349
com.google.protobuf.LazyStringArrayList.LazyStringArrayList
LazyStringArrayList()
Definition: LazyStringArrayList.java:79
com.google.protobuf.LazyStringList
Definition: LazyStringList.java:46
com.google.protobuf.LazyStringArrayList.getUnderlyingElements
List<?> getUnderlyingElements()
Definition: LazyStringArrayList.java:305
com.google.protobuf.LazyStringArrayList.asByteArrayList
List< byte[]> asByteArrayList()
Definition: LazyStringArrayList.java:363
com.google.protobuf.LazyStringArrayList.EMPTY_LIST
static final LazyStringArrayList EMPTY_LIST
Definition: LazyStringArrayList.java:64
com.google.protobuf.UnmodifiableLazyStringList
Definition: UnmodifiableLazyStringList.java:47
com.google.protobuf.LazyStringArrayList.EMPTY
static final LazyStringList EMPTY
Definition: LazyStringArrayList.java:75
com.google.protobuf.LazyStringArrayList.ByteArrayListView.size
int size()
Definition: LazyStringArrayList.java:337
com.google.protobuf.LazyStringArrayList.ByteArrayListView.list
final LazyStringArrayList list
Definition: LazyStringArrayList.java:325
s
XmlRpcServer s
com.google.protobuf.LazyStringArrayList.addAllByteString
boolean addAllByteString(Collection<? extends ByteString > values)
Definition: LazyStringArrayList.java:185
com.google.protobuf.LazyStringArrayList.LazyStringArrayList
LazyStringArrayList(int initialCapacity)
Definition: LazyStringArrayList.java:83
com.google.protobuf.LazyStringArrayList.list
final List< Object > list
Definition: LazyStringArrayList.java:77
com.google.protobuf.LazyStringArrayList.getUnmodifiableView
LazyStringList getUnmodifiableView()
Definition: LazyStringArrayList.java:411
com.google.protobuf.LazyStringArrayList.mutableCopyWithCapacity
LazyStringArrayList mutableCopyWithCapacity(int capacity)
Definition: LazyStringArrayList.java:101
com.google.protobuf.LazyStringArrayList.getByteString
ByteString getByteString(int index)
Definition: LazyStringArrayList.java:235
com.google.protobuf.LazyStringArrayList.mergeFrom
void mergeFrom(LazyStringList other)
Definition: LazyStringArrayList.java:310
com.google.protobuf.LazyStringArrayList.ByteStringListView.add
void add(int index, ByteString s)
Definition: LazyStringArrayList.java:392
com.google.protobuf.LazyStringArrayList.setAndReturn
Object setAndReturn(int index, ByteString s)
Definition: LazyStringArrayList.java:259
b
GLboolean GLboolean GLboolean b
Definition: glcorearb.h:3228
values
GLenum GLsizei GLsizei GLint * values
Definition: glcorearb.h:3591
com.google.protobuf.LazyStringArrayList.add
void add(int index, ByteString element)
Definition: LazyStringArrayList.java:151
com.google.protobuf.LazyStringArrayList.getByteArray
byte[] getByteArray(int index)
Definition: LazyStringArrayList.java:245
com.google.protobuf.LazyStringArrayList.asString
static String asString(Object o)
Definition: LazyStringArrayList.java:274
com.google.protobuf.LazyStringArrayList.add
void add(ByteString element)
Definition: LazyStringArrayList.java:216
com.google.protobuf.Internal.toStringUtf8
static String toStringUtf8(byte[] bytes)
Definition: Internal.java:190
com.google.protobuf.LazyStringArrayList.remove
String remove(int index)
Definition: LazyStringArrayList.java:201
com.google.protobuf.LazyStringArrayList.getRaw
Object getRaw(int index)
Definition: LazyStringArrayList.java:230
com.google.protobuf.LazyStringArrayList.ByteStringListView.size
int size()
Definition: LazyStringArrayList.java:380
com.google.protobuf.LazyStringArrayList.LazyStringArrayList
LazyStringArrayList(ArrayList< Object > list)
Definition: LazyStringArrayList.java:96
com.google.protobuf.LazyStringArrayList.setAndReturn
Object setAndReturn(int index, byte[] s)
Definition: LazyStringArrayList.java:269
com.google.protobuf.Internal.isValidUtf8
static boolean isValidUtf8(ByteString byteString)
Definition: Internal.java:175
com.google.protobuf.LazyStringArrayList.addAllByteArray
boolean addAllByteArray(Collection< byte[]> c)
Definition: LazyStringArrayList.java:193
com.google.protobuf.LazyStringArrayList.asByteStringList
List< ByteString > asByteStringList()
Definition: LazyStringArrayList.java:406
java
com.google.protobuf.LazyStringArrayList.asByteString
static ByteString asByteString(Object o)
Definition: LazyStringArrayList.java:284
com.google.protobuf.LazyStringArrayList.LazyStringArrayList
LazyStringArrayList(LazyStringList from)
Definition: LazyStringArrayList.java:87
com.google.protobuf.LazyStringArrayList.LazyStringArrayList
LazyStringArrayList(List< String > from)
Definition: LazyStringArrayList.java:92
com.google.protobuf.LazyStringArrayList.size
int size()
Definition: LazyStringArrayList.java:133
com.google.protobuf.LazyStringArrayList.clear
void clear()
Definition: LazyStringArrayList.java:209
com.google.protobuf.LazyStringArrayList.add
void add(int index, String element)
Definition: LazyStringArrayList.java:145
com.google.protobuf.LazyStringArrayList.addAll
boolean addAll(int index, Collection<? extends String > c)
Definition: LazyStringArrayList.java:173
com.google.protobuf.LazyStringArrayList.ByteArrayListView
Definition: LazyStringArrayList.java:324
com.google.protobuf.LazyStringArrayList.ByteStringListView
Definition: LazyStringArrayList.java:367
com.google.protobuf.Internal
Definition: Internal.java:54
com.google.protobuf.LazyStringArrayList.add
void add(byte[] element)
Definition: LazyStringArrayList.java:223
com.google.protobuf.LazyStringList.getUnderlyingElements
List<?> getUnderlyingElements()
com.google.protobuf.Internal.toByteArray
static byte[] toByteArray(String value)
Definition: Internal.java:185
com.google.protobuf.LazyStringArrayList
Definition: LazyStringArrayList.java:61
index
GLuint index
Definition: glcorearb.h:3055
com.google.protobuf.LazyStringArrayList.add
void add(int index, byte[] element)
Definition: LazyStringArrayList.java:157
com.google.protobuf.LazyStringArrayList.addAll
boolean addAll(Collection<? extends String > c)
Definition: LazyStringArrayList.java:164
com.google.protobuf.LazyStringArrayList.ByteStringListView.list
final LazyStringArrayList list
Definition: LazyStringArrayList.java:368
com.google.protobuf.Internal.ProtobufList.isModifiable
boolean isModifiable()
com.google.protobuf.LazyStringArrayList.asByteArray
static byte[] asByteArray(Object o)
Definition: LazyStringArrayList.java:294
com.google.protobuf.ByteString
Definition: ByteString.java:67


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:55