Avoid extracting resoure set from backing range set

This is one of fixes for ONOS-4684

Change-Id: I93cd95317b985f98fd6e72a4f96c7f7d6857f279
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodedDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodedDiscreteResources.java
index 6e3f613..5ccb6d2 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodedDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodedDiscreteResources.java
@@ -32,6 +32,8 @@
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 /**
  * Represents discrete resources encoded by a codec.
  */
@@ -82,6 +84,15 @@
                 .orElse(false);
     }
 
+    EncodedDiscreteResources difference(EncodedDiscreteResources other) {
+        checkArgument(this.codec.getClass() == other.codec.getClass());
+
+        RangeSet<Integer> newRangeSet = TreeRangeSet.create(this.rangeSet);
+        newRangeSet.removeAll(other.rangeSet);
+
+        return new EncodedDiscreteResources(newRangeSet, this.codec);
+    }
+
     boolean isEmpty() {
         return rangeSet.isEmpty();
     }