+ @Override
+ public final boolean contains(final YangInstanceIdentifier other) {
+ Preconditions.checkArgument(other != null, "other should not be null");
+
+ final Iterator<?> lit = getPathArguments().iterator();
+ final Iterator<?> oit = other.getPathArguments().iterator();
+
+ while (lit.hasNext()) {
+ if (!oit.hasNext()) {
+ return false;
+ }
+
+ if (!lit.next().equals(oit.next())) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public final String toString() {
+ /*
+ * The toStringCache is safe, since the object contract requires
+ * immutability of the object and all objects referenced from this
+ * object.
+ * Used lists, maps are immutable. Path Arguments (elements) are also
+ * immutable, since the PathArgument contract requires immutability.
+ * The cache is thread-safe - if multiple computations occurs at the
+ * same time, cache will be overwritten with same result.
+ */
+ String ret = toStringCache;
+ if (ret == null) {
+ final StringBuilder builder = new StringBuilder("/");
+ PathArgument prev = null;
+ for (PathArgument argument : getPathArguments()) {
+ if (prev != null) {
+ builder.append('/');
+ }
+ builder.append(argument.toRelativeString(prev));
+ prev = argument;
+ }
+
+ ret = builder.toString();
+ TOSTRINGCACHE_UPDATER.lazySet(this, ret);
+ }
+ return ret;
+ }
+