This is an automated email from the ASF dual-hosted git repository.
tison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-fury.git
The following commit(s) were added to refs/heads/main by this push:
new ca2f8734 chore(java): clean code for Fury ArrayAsList (#1560)
ca2f8734 is described below
commit ca2f8734dea82767a1fad7c18afe53162adf3006
Author: Shawn Yang <[email protected]>
AuthorDate: Wed Apr 24 16:15:38 2024 +0800
chore(java): clean code for Fury ArrayAsList (#1560)
---
.../apache/fury/serializer/ArraySerializers.java | 7 +-
.../fury/serializer/collection/ArrayAsList.java | 124 ---------------------
.../collection/FuryArrayAsListSerializer.java | 93 +++++++++++++++-
3 files changed, 95 insertions(+), 129 deletions(-)
diff --git
a/java/fury-core/src/main/java/org/apache/fury/serializer/ArraySerializers.java
b/java/fury-core/src/main/java/org/apache/fury/serializer/ArraySerializers.java
index cf8790ed..6ed4284d 100644
---
a/java/fury-core/src/main/java/org/apache/fury/serializer/ArraySerializers.java
+++
b/java/fury-core/src/main/java/org/apache/fury/serializer/ArraySerializers.java
@@ -27,7 +27,6 @@ import org.apache.fury.resolver.ClassInfo;
import org.apache.fury.resolver.ClassInfoHolder;
import org.apache.fury.resolver.ClassResolver;
import org.apache.fury.resolver.RefResolver;
-import org.apache.fury.serializer.collection.ArrayAsList;
import org.apache.fury.serializer.collection.CollectionFlags;
import org.apache.fury.serializer.collection.FuryArrayAsListSerializer;
import org.apache.fury.type.Type;
@@ -545,14 +544,14 @@ public class ArraySerializers {
public static final class StringArraySerializer extends Serializer<String[]>
{
private final StringSerializer stringSerializer;
private final FuryArrayAsListSerializer collectionSerializer;
- private final ArrayAsList<String> list;
+ private final FuryArrayAsListSerializer.ArrayAsList<String> list;
public StringArraySerializer(Fury fury) {
super(fury, String[].class);
stringSerializer = new StringSerializer(fury);
collectionSerializer = new FuryArrayAsListSerializer(fury);
collectionSerializer.setElementSerializer(stringSerializer);
- list = new ArrayAsList<>(0);
+ list = new FuryArrayAsListSerializer.ArrayAsList<>(0);
}
@Override
@@ -571,7 +570,7 @@ public class ArraySerializers {
// TODO reference support
// this method won't throw exception.
int flags = collectionSerializer.writeNullabilityHeader(buffer, list);
- list.setArray(null); // clear for gc
+ list.clearArray(); // clear for gc
StringSerializer stringSerializer = this.stringSerializer;
if ((flags & CollectionFlags.HAS_NULL) != CollectionFlags.HAS_NULL) {
for (String elem : value) {
diff --git
a/java/fury-core/src/main/java/org/apache/fury/serializer/collection/ArrayAsList.java
b/java/fury-core/src/main/java/org/apache/fury/serializer/collection/ArrayAsList.java
deleted file mode 100644
index 443ebc67..00000000
---
a/java/fury-core/src/main/java/org/apache/fury/serializer/collection/ArrayAsList.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.fury.serializer.collection;
-
-import java.util.AbstractList;
-import java.util.Iterator;
-import java.util.Objects;
-import java.util.RandomAccess;
-import org.apache.fury.annotation.Internal;
-
-/**
- * A List which wrap a Java array like `java.util.Arrays.ArrayList`, but allow
to replace wrapped
- * array. Used for serialization only, do not use it in other scenarios.
- */
-@Internal
-public class ArrayAsList<E> extends AbstractList<E> implements RandomAccess,
java.io.Serializable {
- private E[] array;
- private int size;
-
- @SuppressWarnings("unchecked")
- public ArrayAsList(int size) {
- array = (E[]) new Object[size];
- }
-
- public ArrayAsList(E[] array) {
- this.array = Objects.requireNonNull(array);
- size = array.length;
- }
-
- @Override
- public int size() {
- return size;
- }
-
- @Override
- public boolean add(E e) {
- array[size++] = e;
- return true;
- }
-
- @Override
- public E get(int index) {
- return array[index];
- }
-
- @Override
- public E set(int index, E element) {
- E prev = array[index];
- array[index] = element;
- return prev;
- }
-
- public void setArray(E[] a) {
- this.array = a;
- }
-
- public E[] getArray() {
- return array;
- }
-
- @Override
- public int indexOf(Object o) {
- E[] array = this.array;
- if (o == null) {
- for (int i = 0; i < array.length; i++) {
- if (array[i] == null) {
- return i;
- }
- }
- } else {
- for (int i = 0; i < array.length; i++) {
- if (o.equals(array[i])) {
- return i;
- }
- }
- }
- return -1;
- }
-
- @Override
- public boolean contains(Object o) {
- return indexOf(o) >= 0;
- }
-
- /** Returns original array without copy. */
- @Override
- public Object[] toArray() {
- return array;
- }
-
- @Override
- public Iterator<E> iterator() {
- return new Iterator<E>() {
- private int index;
-
- @Override
- public boolean hasNext() {
- return index < array.length;
- }
-
- @Override
- public E next() {
- return array[index++];
- }
- };
- }
-}
diff --git
a/java/fury-core/src/main/java/org/apache/fury/serializer/collection/FuryArrayAsListSerializer.java
b/java/fury-core/src/main/java/org/apache/fury/serializer/collection/FuryArrayAsListSerializer.java
index dd11d0df..727cb811 100644
---
a/java/fury-core/src/main/java/org/apache/fury/serializer/collection/FuryArrayAsListSerializer.java
+++
b/java/fury-core/src/main/java/org/apache/fury/serializer/collection/FuryArrayAsListSerializer.java
@@ -19,7 +19,10 @@
package org.apache.fury.serializer.collection;
+import java.util.AbstractList;
import java.util.Collection;
+import java.util.Iterator;
+import java.util.RandomAccess;
import org.apache.fury.Fury;
import org.apache.fury.annotation.Internal;
import org.apache.fury.memory.MemoryBuffer;
@@ -28,7 +31,8 @@ import org.apache.fury.type.Type;
/** Serializer for {@link ArrayAsList}. Helper for serialization of other
classes. */
@Internal
@SuppressWarnings("rawtypes")
-public final class FuryArrayAsListSerializer extends
CollectionSerializer<ArrayAsList> {
+public final class FuryArrayAsListSerializer
+ extends CollectionSerializer<FuryArrayAsListSerializer.ArrayAsList> {
public FuryArrayAsListSerializer(Fury fury) {
super(fury, ArrayAsList.class, true);
}
@@ -43,4 +47,91 @@ public final class FuryArrayAsListSerializer extends
CollectionSerializer<ArrayA
setNumElements(numElements);
return new ArrayAsList(numElements);
}
+
+ /**
+ * A List which wrap a Java array like `java.util.Arrays.ArrayList`, but
allow to replace wrapped
+ * array. Used for serialization only, do not use it in other scenarios.
+ */
+ @Internal
+ public static class ArrayAsList<E> extends AbstractList<E>
+ implements RandomAccess, java.io.Serializable {
+ private static final Object[] EMPTY = new Object[0];
+
+ private E[] array;
+ private int size;
+
+ @SuppressWarnings("unchecked")
+ public ArrayAsList(int size) {
+ array = (E[]) new Object[size];
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean add(E e) {
+ array[size++] = e;
+ return true;
+ }
+
+ @Override
+ public E get(int index) {
+ return array[index];
+ }
+
+ @SuppressWarnings("unchecked")
+ public void clearArray() {
+ size = 0;
+ array = (E[]) EMPTY;
+ }
+
+ public void setArray(E[] a) {
+ array = a;
+ size = a.length;
+ }
+
+ public E[] getArray() {
+ return array;
+ }
+
+ @Override
+ public E set(int index, E element) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public int indexOf(Object o) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ throw new UnsupportedOperationException();
+ }
+
+ /** Returns original array without copy. */
+ @Override
+ public Object[] toArray() {
+ return array;
+ }
+
+ @Override
+ public Iterator<E> iterator() {
+ return new Iterator<E>() {
+ private int index;
+
+ @Override
+ public boolean hasNext() {
+ return index < array.length;
+ }
+
+ @Override
+ public E next() {
+ return array[index++];
+ }
+ };
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]