Skip to content

Commit f8a0d1e

Browse files
committed
Merge remote-tracking branch 'origin/api-17' into api-18
2 parents 0a773a9 + 9962424 commit f8a0d1e

5 files changed

Lines changed: 380 additions & 10 deletions

File tree

src/main/java/org/spongepowered/api/data/persistence/DataContainer.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,91 @@ static DataContainer createNew(SafetyMode safety) {
5858
@Override
5959
DataContainer set(DataQuery path, Object value);
6060

61+
@Override
62+
default DataContainer set(DataQuery path, String value) {
63+
return this.set(path, (Object) value);
64+
}
65+
66+
@Override
67+
default DataContainer set(DataQuery path, boolean value) {
68+
return this.set(path, (Object) value);
69+
}
70+
71+
@Override
72+
default DataContainer set(DataQuery path, byte value) {
73+
return this.set(path, (Object) value);
74+
}
75+
76+
@Override
77+
default DataContainer set(DataQuery path, short value) {
78+
return this.set(path, (Object) value);
79+
}
80+
81+
@Override
82+
default DataContainer set(DataQuery path, int value) {
83+
return this.set(path, (Object) value);
84+
}
85+
86+
@Override
87+
default DataContainer set(DataQuery path, long value) {
88+
return this.set(path, (Object) value);
89+
}
90+
91+
@Override
92+
default DataContainer set(DataQuery path, float value) {
93+
return this.set(path, (Object) value);
94+
}
95+
96+
@Override
97+
default DataContainer set(DataQuery path, double value) {
98+
return this.set(path, (Object) value);
99+
}
100+
101+
@Override
102+
default DataContainer set(String key, Object value) {
103+
return this.set(DataQuery.of(key), value);
104+
}
105+
106+
@Override
107+
default DataContainer set(String key, String value) {
108+
return this.set(key, (Object) value);
109+
}
110+
111+
@Override
112+
default DataContainer set(String key, boolean value) {
113+
return this.set(key, (Object) value);
114+
}
115+
116+
@Override
117+
default DataContainer set(String key, byte value) {
118+
return this.set(key, (Object) value);
119+
}
120+
121+
@Override
122+
default DataContainer set(String key, short value) {
123+
return this.set(key, (Object) value);
124+
}
125+
126+
@Override
127+
default DataContainer set(String key, int value) {
128+
return this.set(key, (Object) value);
129+
}
130+
131+
@Override
132+
default DataContainer set(String key, long value) {
133+
return this.set(key, (Object) value);
134+
}
135+
136+
@Override
137+
default DataContainer set(String key, float value) {
138+
return this.set(key, (Object) value);
139+
}
140+
141+
@Override
142+
default DataContainer set(String key, double value) {
143+
return this.set(key, (Object) value);
144+
}
145+
61146
@Override
62147
DataContainer remove(DataQuery path);
63148
}

src/main/java/org/spongepowered/api/data/persistence/DataQuery.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
2828

29+
import java.util.ArrayList;
30+
import java.util.Collections;
2931
import java.util.Iterator;
3032
import java.util.List;
3133
import java.util.Objects;
@@ -34,7 +36,6 @@
3436
import java.util.function.Consumer;
3537
import java.util.regex.Pattern;
3638
import java.util.stream.Collectors;
37-
import java.util.stream.Stream;
3839

3940
/**
4041
* Represents a query that can be done on views. Queries do not depend on
@@ -80,7 +81,7 @@ private DataQuery(final String... parts) {
8081
* @param parts The parts
8182
*/
8283
private DataQuery(final List<String> parts) {
83-
this.parts = List.copyOf(parts);
84+
this.parts = parts;
8485
}
8586

8687
/**
@@ -132,7 +133,7 @@ public static DataQuery of(final List<String> parts) {
132133
if (parts.isEmpty()) {
133134
return DataQuery.EMPTY;
134135
}
135-
return new DataQuery(parts);
136+
return new DataQuery(List.copyOf(parts));
136137
}
137138

138139
/**
@@ -152,8 +153,10 @@ public List<String> parts() {
152153
* @return The constructed query
153154
*/
154155
public DataQuery then(final DataQuery that) {
155-
final var parts = Stream.concat(this.parts.stream(), that.parts.stream()).collect(Collectors.toUnmodifiableList());
156-
return new DataQuery(parts);
156+
final ArrayList<String> parts = new ArrayList<>(this.parts.size() + that.parts.size());
157+
parts.addAll(this.parts);
158+
parts.addAll(that.parts);
159+
return new DataQuery(Collections.unmodifiableList(parts));
157160
}
158161

159162
/**
@@ -164,8 +167,10 @@ public DataQuery then(final DataQuery that) {
164167
* @return The constructed query
165168
*/
166169
public DataQuery then(final String that) {
167-
final var parts = Stream.concat(this.parts.stream(), Stream.of(that)).collect(Collectors.toUnmodifiableList());
168-
return new DataQuery(parts);
170+
final ArrayList<String> parts = new ArrayList<>(this.parts.size() + 1);
171+
parts.addAll(this.parts);
172+
parts.add(that);
173+
return new DataQuery(Collections.unmodifiableList(parts));
169174
}
170175

171176
/**
@@ -192,7 +197,10 @@ public DataQuery pop() {
192197
if (this.parts.size() <= 1) {
193198
return DataQuery.of();
194199
}
195-
final var parts = this.parts.stream().limit(this.parts.size() - 1L).collect(Collectors.toUnmodifiableList());
200+
final ArrayList<String> parts = new ArrayList<>(this.parts.size() - 1);
201+
for (int i = 0; i < this.parts.size() - 1; i++) {
202+
parts.add(this.parts.get(i));
203+
}
196204
return new DataQuery(parts);
197205
}
198206

@@ -207,8 +215,11 @@ public DataQuery popFirst() {
207215
if (this.parts.size() <= 1) {
208216
return DataQuery.of();
209217
}
210-
final var parts = this.parts.stream().skip(1L).collect(Collectors.toUnmodifiableList());
211-
return new DataQuery(parts);
218+
final ArrayList<String> parts = new ArrayList<>(this.parts.size() - 1);
219+
for (int i = 1; i < this.parts.size(); i++) {
220+
parts.add(this.parts.get(i));
221+
}
222+
return new DataQuery(Collections.unmodifiableList(parts));
212223
}
213224

214225
/**

src/main/java/org/spongepowered/api/data/persistence/DataSerializable.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,16 @@ public interface DataSerializable {
5252
*/
5353
DataContainer toContainer();
5454

55+
/**
56+
* Serializes this object and applies the provided
57+
* data to the provided {@link DataView} instead of creating
58+
* a new {@link DataContainer}, reducing nested information.
59+
*
60+
* @param container The data view to serialize to
61+
* @return The provided data view, for chaining
62+
*/
63+
default DataView toView(DataView container) {
64+
this.toContainer().streamRootValues().forEach(entry -> container.set(entry.getKey(), entry.getValue()));
65+
return container;
66+
}
5567
}

0 commit comments

Comments
 (0)