Add short-cut path taking when the paremter type is equal to own type
Change-Id: Ifbc3ea11c901b1496adcc8d0a372c86cd27969e2
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
index 9edfb5f..0585f69 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
@@ -109,9 +109,13 @@
@Override
public DiscreteResources add(DiscreteResources other) {
- Set<DiscreteResource> union = Sets.union(values(), other.values());
+ if (other instanceof EncodableDiscreteResources) {
+ return of(parent, Sets.union(this.values(), other.values()));
+ } else if (other instanceof EmptyDiscreteResources) {
+ return this;
+ }
- return of(parent, union);
+ return DiscreteResources.of(Sets.union(this.values(), other.values()));
}
@Override
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
index 4672d81..9c7292d 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
@@ -81,9 +81,13 @@
// returns a new instance, not mutate the current instance
@Override
public DiscreteResources add(DiscreteResources other) {
- Set<DiscreteResource> newValues = new LinkedHashSet<>(this.values);
- newValues.addAll(other.values());
- return new GenericDiscreteResources(newValues);
+ if (other instanceof GenericDiscreteResources) {
+ return new GenericDiscreteResources(Sets.union(this.values(), other.values()));
+ } else if (other instanceof EmptyDiscreteResources) {
+ return this;
+ }
+
+ return DiscreteResources.of(Sets.union(this.values(), other.values()));
}
@Override
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
index b229308..4862606 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/UnifiedDiscreteResources.java
@@ -93,6 +93,15 @@
@Override
public DiscreteResources add(DiscreteResources other) {
+ if (other instanceof UnifiedDiscreteResources) {
+ UnifiedDiscreteResources cast = (UnifiedDiscreteResources) other;
+ return new UnifiedDiscreteResources(
+ this.generics.add(cast.generics),
+ this.encodables.add(cast.encodables));
+ } else if (other instanceof EmptyDiscreteResources) {
+ return this;
+ }
+
return of(Sets.union(this.values(), other.values()));
}