@fluid-experimental/property-properties 2.70.0-360374 → 2.70.0-361092

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/properties/arrayProperty.d.ts +2 -2
  2. package/dist/properties/arrayProperty.js +2 -2
  3. package/dist/properties/arrayProperty.js.map +1 -1
  4. package/dist/properties/containerProperty.d.ts +2 -2
  5. package/dist/properties/containerProperty.js +2 -2
  6. package/dist/properties/containerProperty.js.map +1 -1
  7. package/dist/properties/indexedCollectionBaseProperty.d.ts +2 -2
  8. package/dist/properties/indexedCollectionBaseProperty.js +2 -2
  9. package/dist/properties/indexedCollectionBaseProperty.js.map +1 -1
  10. package/dist/properties/intProperties.d.ts.map +1 -1
  11. package/dist/properties/intProperties.js +5 -6
  12. package/dist/properties/intProperties.js.map +1 -1
  13. package/dist/properties/mapProperty.d.ts +2 -2
  14. package/dist/properties/mapProperty.js +2 -2
  15. package/dist/properties/mapProperty.js.map +1 -1
  16. package/dist/properties/valueProperty.d.ts +2 -2
  17. package/dist/properties/valueProperty.js +2 -2
  18. package/dist/properties/valueProperty.js.map +1 -1
  19. package/dist/propertyFactory.js +6 -6
  20. package/dist/propertyFactory.js.map +1 -1
  21. package/dist/test/tsconfig.tsbuildinfo +1 -1
  22. package/lib/properties/arrayProperty.d.ts +2 -2
  23. package/lib/properties/arrayProperty.js +2 -2
  24. package/lib/properties/arrayProperty.js.map +1 -1
  25. package/lib/properties/containerProperty.d.ts +2 -2
  26. package/lib/properties/containerProperty.js +2 -2
  27. package/lib/properties/containerProperty.js.map +1 -1
  28. package/lib/properties/indexedCollectionBaseProperty.d.ts +2 -2
  29. package/lib/properties/indexedCollectionBaseProperty.js +2 -2
  30. package/lib/properties/indexedCollectionBaseProperty.js.map +1 -1
  31. package/lib/properties/intProperties.d.ts.map +1 -1
  32. package/lib/properties/intProperties.js +5 -6
  33. package/lib/properties/intProperties.js.map +1 -1
  34. package/lib/properties/mapProperty.d.ts +2 -2
  35. package/lib/properties/mapProperty.js +2 -2
  36. package/lib/properties/mapProperty.js.map +1 -1
  37. package/lib/properties/valueProperty.d.ts +2 -2
  38. package/lib/properties/valueProperty.js +2 -2
  39. package/lib/properties/valueProperty.js.map +1 -1
  40. package/lib/propertyFactory.js +6 -6
  41. package/lib/propertyFactory.js.map +1 -1
  42. package/package.json +6 -8
@@ -1 +1 @@
1
- {"version":3,"file":"arrayProperty.js","sourceRoot":"","sources":["../../src/properties/arrayProperty.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview Definition of the array property class\n */\n\nconst {\n\tArrayChangeSetIterator,\n\tChangeSet,\n\tPathHelper,\n\tTypeIdHelper,\n} = require(\"@fluid-experimental/property-changeset\");\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst { UniversalDataArray, ConsoleUtils } = require(\"@fluid-experimental/property-common\");\nconst _ = require(\"lodash\");\nconst { cloneDeep: deepCopy } = _;\n\nconst { deserializeNonPrimitiveArrayElements } = require(\"../containerSerializer\");\nconst { validationsEnabled } = require(\"../enableValidations\");\n\nconst { AbstractStaticCollectionProperty } = require(\"./abstractStaticCollectionProperty\");\nconst { BaseProperty } = require(\"./baseProperty\");\nconst { LazyLoadedProperties: Property } = require(\"./lazyLoadedProperties\");\n\nvar MODIFIED_STATE_FLAGS = BaseProperty.MODIFIED_STATE_FLAGS;\n\n// Some global constant objects that are used to indicate a few special\n// cases for the dirty object. If there are no entries in the pending and\n// dirty changesets, but the array still has a pending or dirty state\n// flag we use these objects to indicate this state. This happens for custom\n// type array, for which the children have been changed.\n// By using these special objects we avoid the memory overhead of having a separate\n// object for each array in this state.\nvar DIRTY_AND_PENDING_CHILD_CHANGES = {\n\tpending: undefined,\n\tdirty: undefined,\n\tflags: MODIFIED_STATE_FLAGS.PENDING_CHANGE | MODIFIED_STATE_FLAGS.DIRTY,\n};\nvar PENDING_CHILD_CHANGES = {\n\tpending: undefined,\n\tdirty: undefined,\n\tflags: MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n};\nvar DIRTY_CHILD_CHANGES = {\n\tpending: undefined,\n\tdirty: undefined,\n\tflags: MODIFIED_STATE_FLAGS.DIRTY,\n};\nvar DIRTY_STATE_FLAGS_ARRAY = [\n\tundefined,\n\tPENDING_CHILD_CHANGES,\n\tDIRTY_CHILD_CHANGES,\n\tDIRTY_AND_PENDING_CHILD_CHANGES,\n];\n\nvar PATH_TOKENS = BaseProperty.PATH_TOKENS;\n\n/**\n * Given a list of non-overlapping, unordered segments, each identified by its start point and length,\n * this function computes the longest monotone, increasing sub-sequence of segments.\n *\n * Currently, this is O(n^2) in the worst case, it could be implemented in O(n log n), but I would have\n * to implement a binary search tree for this. If this becomes a bottle-neck, we should replace\n * the insertions and binary searches below, with a search tree.\n *\n * @param {Array.<number>} in_segmentStarts - The starting points of the segments\n * @param {Array.<number>} in_segmentLengths - The lengths of the segments\n *\n * @return {Array.<Number>} List of the selected segments, given as indices of the segments\n * @private\n */\nvar _getLongestIncreasingSubsequenceSegments = function (in_segmentStarts, in_segmentLengths) {\n\tif (in_segmentStarts.length === 0) {\n\t\treturn [];\n\t}\n\n\t// Contains the already found sub sequences, sorted by their length\n\t// in increasing order. These sub-sequences have the invariant that\n\t// the last entry in each of the sequences is smaller than the last\n\t// entry in longer sequences (so the list is also sorted according to\n\t// the sequenceLastEntry member of the structs)\n\tvar foundSubSequences = [];\n\n\tfor (var i = 0; i < in_segmentStarts.length; i++) {\n\t\tvar currentSegmentStart = in_segmentStarts[i];\n\n\t\t// Perform a binary search to find the largest entry in the list of found sub\n\t\t// sequences that has a sequenceEnd that is smaller or equal than currentSegmentStart\n\t\tvar index = _.sortedIndexBy(\n\t\t\tfoundSubSequences,\n\t\t\t{ sequenceLastEntry: currentSegmentStart },\n\t\t\t\"sequenceLastEntry\",\n\t\t);\n\t\tvar lastEntry = index > 0 ? foundSubSequences[index - 1] : undefined;\n\n\t\t// Create a new entry that is obtained by concatenating the longest sequence found so far\n\t\t// with the new segment\n\t\tvar newEntry = {\n\t\t\tsequenceLength: in_segmentLengths[i] + (lastEntry ? lastEntry.sequenceLength : 0),\n\t\t\tsegmentIndex: i,\n\t\t\tsequenceLastEntry: currentSegmentStart + in_segmentLengths[i] - 1,\n\t\t\tpreviousEntry: lastEntry,\n\t\t};\n\n\t\t// Search for the insertion position for this entry\n\t\tvar insertionPoint = _.sortedIndexBy(foundSubSequences, newEntry, \"sequenceLength\");\n\t\tif (\n\t\t\tfoundSubSequences[insertionPoint] !== undefined &&\n\t\t\tfoundSubSequences[insertionPoint].sequenceLength === newEntry.sequenceLength\n\t\t) {\n\t\t\tinsertionPoint++;\n\t\t}\n\n\t\t// We have to delete all entries from the foundSubSequences array, which\n\t\t// are shorter, but have a higher sequenceLastEntry (we can do that, since\n\t\t// it would be a better choice to use the new entry instead of these old\n\t\t// entries). This will preserve the invariant on the foundSubSequences\n\t\t// that they are sorted with respect to the sequenceLastEntry.\n\t\tvar lowerLengthBoundary = newEntry.sequenceLength - in_segmentLengths[i];\n\n\t\tvar j = insertionPoint - 1;\n\t\tfor (; j >= 0 && foundSubSequences[j].sequenceLength > lowerLengthBoundary; j--) {\n\t\t\tif (foundSubSequences[j].sequenceLastEntry >= newEntry.sequenceLastEntry) {\n\t\t\t\tfoundSubSequences.splice(j, 1);\n\t\t\t\tinsertionPoint--;\n\t\t\t}\n\t\t}\n\n\t\t// Insert the entry as a new entry into the list of subsequences\n\t\tfoundSubSequences.splice(insertionPoint, 0, newEntry); // TODO: this should be done via a binary tree\n\t}\n\n\t// This should always be the case, as we checked for empty inputs above\n\tConsoleUtils.assert(foundSubSequences.length > 0);\n\n\t// Extract the result\n\tvar longestSequence = [];\n\tvar currentSegment = _.last(foundSubSequences);\n\twhile (currentSegment) {\n\t\tlongestSequence.unshift(currentSegment.segmentIndex);\n\t\tcurrentSegment = currentSegment.previousEntry;\n\t}\n\n\treturn longestSequence;\n};\n\n/**\n * @internal\n */\nexport class ArrayProperty extends AbstractStaticCollectionProperty {\n\t/**\n\t * Default constructor for ArrayProperty\n\t * @param {Object} [in_params] - The parameters\n\t * @param {Number} [in_params.length = 0] - The length of the array, if applicable\n\t * @param {string} [in_scope] - The scope in which the property typeid is defined\n\t * @protected\n\t */\n\tconstructor(in_params, in_scope) {\n\t\tsuper(in_params);\n\t\tvar length = in_params.size || in_params.length || 0;\n\n\t\t// changesets\n\t\tthis._dirty = undefined;\n\n\t\t// We only need the scope for custom type array properties\n\t\tif (!this._isPrimitive) {\n\t\t\tthis._scope = in_scope;\n\t\t}\n\n\t\tthis._dataArrayCreate(length);\n\t}\n\n\t/**\n\t * Returns the path segment for a child\n\t *\n\t * @param {property-properties.BaseProperty} in_childNode - The child for which the path is returned\n\t *\n\t * @return {string|undefined} The path segment to resolve the child property under this property\n\t * @protected\n\t */\n\t_getPathSegmentForChildNode(in_childNode) {\n\t\tvar index = this._dataArrayGetBuffer().indexOf(in_childNode);\n\t\tif (index === -1) {\n\t\t\tthrow new Error(MSG.GET_PATH_SEGMENT_CALLED_FOR_NON_ENTRY);\n\t\t}\n\n\t\treturn \"[\" + index + \"]\";\n\t}\n\n\t/**\n\t * Resolves a direct child node based on the given path segment\n\t *\n\t * @param {String} in_segment - The path segment to resolve\n\t * @param {property-properties.PathHelper.TOKEN_TYPES} in_segmentType - The type of segment in the tokenized path\n\t *\n\t * @return {BaseProperty | undefined} The child property that has been resolved\n\t * @protected\n\t */\n\t_resolvePathSegment(in_segment, in_segmentType) {\n\t\t// Base Properties only support paths separated via dots\n\t\tif (in_segmentType === PathHelper.TOKEN_TYPES.ARRAY_TOKEN) {\n\t\t\tvar index = Math.floor(in_segment);\n\n\t\t\t// Specifying a non-integer index is regarded a mal-formed path and thus throws an exception\n\t\t\tif (!isFinite(index)) {\n\t\t\t\t// eslint-disable-next-line unicorn/prefer-type-error\n\t\t\t\tthrow new Error(MSG.INVALID_NON_NUMERIC_SEGMENT_IN_PATH + in_segment);\n\t\t\t}\n\n\t\t\t// Accessing an entry outside of the array is just a non existing property and thus\n\t\t\t// returns undefined\n\t\t\tif (index < 0 || index >= this._dataArrayGetLength()) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn this._dataArrayGetValue(index);\n\t\t} else {\n\t\t\treturn AbstractStaticCollectionProperty.prototype._resolvePathSegment.call(\n\t\t\t\tthis,\n\t\t\t\tin_segment,\n\t\t\t\tin_segmentType,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Insert into the array at a given position.\n\t * It will not overwrite the existing values, it will push them to the right.\n\t * @param {number} in_position - Target index\n\t * @param {*} in_value - Inserted value or property\n\t * @throws if in_position is smaller than zero, larger than the length of the array or not a number.\n\t * @throws if trying to insert a property that already has a parent.\n\t * @throws if trying to modify a referenced property.\n\t * @throws if trying to insert a property that is a root property\n\t */\n\tinsert(in_position, in_value) {\n\t\tthis.insertRange(in_position, [in_value]);\n\t}\n\n\t/**\n\t * Is this property a leaf node with regard to flattening?\n\t *\n\t * TODO: Which semantics should flattening have? It stops at primitive types and collections?\n\t *\n\t * @return {boolean} True if it is a leaf with regard to flattening?\n\t */\n\t_isFlattenLeaf() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * Add one or more values at the end of the array\n\t * @param {Array<property-properties.BaseProperty>|property-properties.BaseProperty|*|Array<*>} in_values- -\n\t * the item or items to be pushed (either properties or values). If an array is passed, .push\n\t * will be called on each item in the array.\n\t * @throws if trying to push a property that is a root property\n\t * @return {number} new length of the array\n\t */\n\tpush(in_values) {\n\t\tif (_.isArray(in_values)) {\n\t\t\tthis.insertRange(this._dataArrayGetLength(), in_values);\n\t\t} else {\n\t\t\tthis.insertRange(this._dataArrayGetLength(), [in_values]);\n\t\t}\n\t\treturn this._dataArrayGetLength();\n\t}\n\n\t/**\n\t * Add elements to the end of the queue (array)\n\t */\n\tenqueue(...args) {\n\t\treturn this.push(...args);\n\t}\n\n\t/**\n\t * Add a value at the front of the array or letters to the beginning of a string (for StringProperty)\n\t * It can also add multiple values to an array if you pass in an array of values.\n\t * @param {Array<*>|*|Array<property-properties.BaseProperty>|property-properties.BaseProperty} in_values - The values\n\t * or properties to be pushed\n\t * @throws if trying to insert a property that already has a parent.\n\t * @throws if trying to insert a root property\n\t * @throws if trying to modify a referenced property.\n\t * @return {number} new length of the array\n\t */\n\tunshift(in_values) {\n\t\tif (_.isArray(in_values)) {\n\t\t\tthis.insertRange(0, in_values);\n\t\t} else {\n\t\t\tthis.insertRange(0, [in_values]);\n\t\t}\n\t\treturn this._dataArrayGetLength();\n\t}\n\n\t/**\n\t * Removes an element of the array (or a letter in a StringProperty) and shifts remaining elements to the left\n\t * E.g. [1, 2, 3] .remove(1) => [1, 3]\n\t * E.g. (StringProperty) 'ABCDE' .remove(1) => 'ACDE'\n\t * @param {number} in_position - The index that will be removed\n\t * @throws if in_position is not a number\n\t * @throws if trying to remove something that does not exist\n\t * @throws if trying to remove an item with a parent\n\t * @return {property-properties.BaseProperty | * } the value that was removed.\n\t */\n\tremove(in_position) {\n\t\tvar value = this.get(in_position);\n\t\tthis.removeRange(in_position, 1);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Removes the last element of the array or the last letter of a string (for StringProperty)\n\t * @throws if trying to modify a referenced property\n\t * @return {property-properties.BaseProperty|*} deleted element.\n\t */\n\tpop() {\n\t\tif (this._dataArrayGetLength() > 0) {\n\t\t\tvar item = this.get(this._dataArrayGetLength() - 1, {\n\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t});\n\t\t\tthis.remove(this._dataArrayGetLength() - 1);\n\t\t\treturn item;\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Removes an element from the front of the array or a letter from the beginning of a string (for StringProperty)\n\t * @return {*|property-properties.BaseProperty} the element removed.\n\t */\n\tshift() {\n\t\tif (this._dataArrayGetLength() > 0) {\n\t\t\tvar item = this.get(0, {\n\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t});\n\t\t\tthis.remove(0);\n\t\t\treturn item;\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Removes elements from the front of the queue (array)\n\t */\n\tdequeue() {\n\t\treturn this.shift();\n\t}\n\n\t/**\n\t * Change an existing element of the array. This will overwrite an existing element.\n\t * E.g. [1, 2, 3] .set(1, 8) => [1, 8, 3]\n\t * @param {number} in_position - The target index\n\t * @param {*} in_value - The new property or value\n\t * @throws if in_position is not a number\n\t * @throws if in_position is smaller than zero\n\t */\n\tset(in_position, in_value) {\n\t\tif (_.isArray(in_value)) {\n\t\t\tthrow new TypeError(MSG.ARRAY_SET_ONE_ELEMENT + in_value);\n\t\t}\n\t\tthis.setRange(in_position, [in_value]);\n\t}\n\n\t/**\n\t * Sets the values of items in the array.\n\t * If values are typed, iterates through the values and creates a property with the defined type and value.\n\t *\n\t * See {@link ArrayProperty.setValues}\n\t *\n\t * @param {Array | string} in_values - The list of typed values.\n\t * @param {boolean} in_typed - Whether the values are typed/polymorphic.\n\t * @param {boolean} in_initial - Whether we are setting default/initial values\n\t * or if the function is called directly with the values to set.\n\t * @protected\n\t * @override\n\t */\n\t_setValues(in_values, in_typed, in_initial) {\n\t\tif (in_typed) {\n\t\t\tif (!this._isPrimitive) {\n\t\t\t\tConsoleUtils.assert(\n\t\t\t\t\t_.isArray(in_values),\n\t\t\t\t\tMSG.IN_ARRAY_NOT_ARRAY + \"ArrayProperty._setValues\",\n\t\t\t\t);\n\n\t\t\t\tvar arr = [];\n\t\t\t\tfor (var i = 0; i < in_values.length; i++) {\n\t\t\t\t\tvar prop = in_values[i];\n\n\t\t\t\t\tprop =\n\t\t\t\t\t\tin_values[i] instanceof BaseProperty\n\t\t\t\t\t\t\t? in_values[i]\n\t\t\t\t\t\t\t: Property.PropertyFactory._createProperty(\n\t\t\t\t\t\t\t\t\tin_values[i].typeid || this._typeid,\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\tin_values[i].value,\n\t\t\t\t\t\t\t\t\tthis._getScope(),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\tarr.push(prop);\n\t\t\t\t}\n\n\t\t\t\tthis._setValuesInternal(arr);\n\t\t\t} else {\n\t\t\t\tAbstractStaticCollectionProperty.prototype._setValues.call(\n\t\t\t\t\tthis,\n\t\t\t\t\tin_values,\n\t\t\t\t\tin_typed,\n\t\t\t\t\tin_initial,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._setValuesInternal(in_values);\n\t\t}\n\t}\n\n\t/**\n\t * See {@link ArrayProperty.setValues}\n\t *\n\t * @param {Array | string} in_values - an array or object containing the values to be set.\n\t */\n\t_setValuesInternal(in_values) {\n\t\tthis._checkIsNotReadOnly(true);\n\n\t\tif (!this._isPrimitive) {\n\t\t\tif (_.isArray(in_values)) {\n\t\t\t\tthis.clear();\n\t\t\t\tthis.insertRange(0, in_values);\n\t\t\t} else {\n\t\t\t\tAbstractStaticCollectionProperty.prototype.setValues.call(this, in_values);\n\t\t\t}\n\t\t} else {\n\t\t\tif (_.isArray(in_values)) {\n\t\t\t\tif (in_values.length < this._dataArrayGetLength()) {\n\t\t\t\t\tthis.removeRange(in_values.length, this._dataArrayGetLength() - in_values.length);\n\t\t\t\t}\n\t\t\t\tthis.setRange(0, in_values.slice(0, this._dataArrayGetLength()));\n\t\t\t\tif (in_values.length > this._dataArrayGetLength()) {\n\t\t\t\t\tthis.insertRange(\n\t\t\t\t\t\tthis._dataArrayGetLength(),\n\t\t\t\t\t\tin_values.slice(this._dataArrayGetLength()),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar that = this;\n\t\t\t\tvar maxIndex = this._dataArrayGetLength() - 1;\n\t\t\t\t_.each(in_values, function (value, index) {\n\t\t\t\t\tif (index > maxIndex) {\n\t\t\t\t\t\tthat.insert(index, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (that._dataArrayGetValue(index) !== value) {\n\t\t\t\t\t\t\tthat.set(index, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sets the values of items in the array.\n\t * If called using an array (e.g. setValues([prop1, prop2])), it will overwrite the whole array.\n\t * If called using an object with indexes (e.g. setValues{0: prop1}), it will only overwrite the\n\t * items at those indexes.\n\t * For arrays of Properties, this can be used to set nested values in properties found in the array.\n\t * For example: setValues({0: {position: {x: 2, y:3}}});\n\t * @param {Array | string} in_values - An array or object containing the values to be set.\n\t * @throws if one of the path in in_values does not correspond to a path in the property\n\t */\n\tsetValues(in_values) {\n\t\tvar checkoutView = this._getCheckoutView();\n\t\tif (checkoutView !== undefined) {\n\t\t\tcheckoutView.pushNotificationDelayScope();\n\t\t\tArrayProperty.prototype._setValues.call(this, in_values, false, false);\n\t\t\tcheckoutView.popNotificationDelayScope();\n\t\t} else {\n\t\t\tArrayProperty.prototype._setValues.call(this, in_values, false, false);\n\t\t}\n\t}\n\n\t/**\n\t * Deletes all values from an array\n\t */\n\tclear() {\n\t\tif (this.getLength()) {\n\t\t\tthis.removeRange(0, this.getLength());\n\t\t}\n\t}\n\n\t/**\n\t * @return {Array<*> | String} all values in the ArrayProperty\n\t * If called on StringProperty, it returns the whole string\n\t * WARNING: the returned array must be read only, data written to it\n\t * will get lost.\n\t */\n\tgetEntriesReadOnly() {\n\t\treturn this._dataArrayGetBuffer();\n\t}\n\n\t/**\n\t * Private helper function to update the internal dirty and pending changes\n\t * is overwritten by StringProperty\n\t *\n\t * @param {property-properties.SerializedChangeSet} in_changeSet - The changeset to apply\n\t * @private\n\t */\n\t_updateChanges(in_changeSet) {\n\t\tvar pendingChanges = this._getPendingChanges();\n\t\tChangeSet.prototype._performApplyAfterOnPropertyArray(\n\t\t\tpendingChanges,\n\t\t\tin_changeSet,\n\t\t\tthis.getFullTypeid(true),\n\t\t);\n\n\t\tvar dirtyChanges = this._getDirtyChanges();\n\t\tChangeSet.prototype._performApplyAfterOnPropertyArray(\n\t\t\tdirtyChanges,\n\t\t\tin_changeSet,\n\t\t\tthis.getFullTypeid(true),\n\t\t);\n\n\t\tthis._setChanges(pendingChanges, dirtyChanges);\n\t}\n\n\t/**\n\t * Returns the pending changeset for this object\n\t * @return {property-properties.SerializedChangeSet} The pending changes\n\t */\n\t_getPendingChanges() {\n\t\treturn (this._dirty && this._dirty.pending) || {};\n\t}\n\n\t/**\n\t * Returns the dirty changeset for this object\n\t * @return {property-properties.SerializedChangeSet} The dirty changes\n\t */\n\t_getDirtyChanges() {\n\t\treturn (this._dirty && this._dirty.dirty) || {};\n\t}\n\n\t/**\n\t * Sets the pending and dirty changesets\n\t *\n\t * @param {property-properties.SerializedChangeSet|undefined|null} in_pending - The pending changeset. If null is\n\t * passed, no change will be applied. undefined indicates that the changes should be reset\n\t * @param {property-properties.SerializedChangeSet|undefined|null} in_dirty - The dirty changeset. If null is\n\t * passed, no change will be applied. undefined indicates that the changes should be reset\n\t */\n\t_setChanges(in_pending, in_dirty) {\n\t\tvar oldFlags = this._dirty ? this._dirty.flags : 0;\n\n\t\tif (this._dirty && this._dirty === DIRTY_STATE_FLAGS_ARRAY[this._dirty.flags]) {\n\t\t\tthis._dirty = undefined;\n\t\t}\n\n\t\tif (in_pending !== null) {\n\t\t\tif (!_.isEmpty(in_pending)) {\n\t\t\t\tthis._dirty = this._dirty || {};\n\t\t\t\tthis._dirty.pending = in_pending;\n\t\t\t} else if (this._dirty) {\n\t\t\t\tthis._dirty.pending = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (in_dirty !== null) {\n\t\t\tif (!_.isEmpty(in_dirty)) {\n\t\t\t\tthis._dirty = this._dirty || {};\n\t\t\t\tthis._dirty.dirty = in_dirty;\n\t\t\t} else if (this._dirty) {\n\t\t\t\tthis._dirty.dirty = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (this._dirty) {\n\t\t\tif (this._dirty.dirty === undefined && this._dirty.pending === undefined) {\n\t\t\t\tthis._dirty = oldFlags === 0 ? undefined : DIRTY_STATE_FLAGS_ARRAY[oldFlags];\n\t\t\t} else {\n\t\t\t\tthis._dirty.flags = oldFlags;\n\t\t\t}\n\t\t} else if (oldFlags) {\n\t\t\tthis._dirty = DIRTY_STATE_FLAGS_ARRAY[oldFlags];\n\t\t}\n\t}\n\n\t/**\n\t * Sets the dirty flags for this property\n\t * @param {Number} in_flags - The dirty flags\n\t */\n\t_setDirtyFlags(in_flags) {\n\t\tif (this._dirty) {\n\t\t\tif (this._dirty !== DIRTY_STATE_FLAGS_ARRAY[this._dirty.flags]) {\n\t\t\t\tthis._dirty.flags = in_flags;\n\n\t\t\t\tif (\n\t\t\t\t\tthis._dirty.dirty === undefined &&\n\t\t\t\t\tthis._dirty.pending === undefined &&\n\t\t\t\t\t(this._dirty.flags === 0 || this._dirty.flags === undefined)\n\t\t\t\t) {\n\t\t\t\t\tthis._dirty = undefined;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._dirty = DIRTY_STATE_FLAGS_ARRAY[in_flags];\n\t\t\t}\n\t\t} else {\n\t\t\tthis._dirty = DIRTY_STATE_FLAGS_ARRAY[in_flags];\n\t\t}\n\t}\n\n\t/**\n\t * Gets the dirty flags for this property\n\t * @return {Number} The dirty flags\n\t */\n\t_getDirtyFlags() {\n\t\tif (this._dirty === undefined) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn this._dirty.flags;\n\t}\n\n\t/**\n\t * Inserts the content of a given array into the array property\n\t * It will not overwrite the existing values but push them to the right instead.\n\t * E.g. [1, 2, 3] .insertRange(1, [9, 8]) => [1, 9, 8, 2, 3]\n\t * @param {number} in_offset - Target index\n\t * @param {Array<*>} in_array - The array to be inserted\n\t * @throws if in_offset is smaller than zero, larger than the length of the array or not a number.\n\t * @throws if trying to insert a property that already has a parent.\n\t * @throws if trying to modify a referenced property.\n\t * @throws if trying to insert a property that is not an array.\n\t * @throws if trying to insert a root property.\n\t */\n\tinsertRange(in_offset, in_array) {\n\t\tif (!_.isArray(in_array)) {\n\t\t\tthrow new TypeError(MSG.IN_ARRAY_NOT_ARRAY + \"ArrayProperty.insertRange\");\n\t\t}\n\n\t\tif (validationsEnabled.enabled) {\n\t\t\tfor (var i = 0; i < in_array.length; i++) {\n\t\t\t\tif (in_array[i] instanceof BaseProperty) {\n\t\t\t\t\tin_array[i]._validateInsertIn(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._checkIsNotReadOnly(true);\n\t\t}\n\t\tthis._insertRangeWithoutDirtying(in_offset, in_array);\n\t\tthis._setDirty();\n\t}\n\n\t/**\n\t * inserts the content of a given array, but doesn't dirty the property\n\t * this is useful for batch changes\n\t * @param {number} in_offset - Target index\n\t * @param {Array<*>} in_array - The array to be inserted\n\t * @param {Boolean=} [in_setParents=true] - If true, set parent of inserted properties.\n\t * If false, caller has already set parents.\n\t * @private\n\t */\n\t_insertRangeWithoutDirtying(in_offset, in_array, in_setParents) {\n\t\tif (in_setParents === undefined) {\n\t\t\tin_setParents = true;\n\t\t}\n\t\tif (in_offset < 0 || in_offset > this.length || !_.isNumber(in_offset)) {\n\t\t\tthrow Error(MSG.START_OFFSET_INVALID + in_offset);\n\t\t}\n\t\tif (in_setParents && !this._isPrimitive) {\n\t\t\tvar arr = [];\n\t\t\tfor (var i = 0; i < in_array.length; ++i) {\n\t\t\t\tvar prop = in_array[i];\n\t\t\t\tif (!(in_array[i] instanceof BaseProperty)) {\n\t\t\t\t\tprop = Property.PropertyFactory._createProperty(\n\t\t\t\t\t\tthis._typeid,\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tin_array[i],\n\t\t\t\t\t\tthis._getScope(),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (prop.getParent()) {\n\t\t\t\t\tthrow new Error(MSG.NO_INSERT_WITH_PARENT);\n\t\t\t\t} else {\n\t\t\t\t\tprop._setParent(this);\n\t\t\t\t}\n\t\t\t\tarr.push(prop);\n\t\t\t}\n\n\t\t\tin_array = arr;\n\t\t}\n\t\tthis._dataArrayInsertRange(in_offset, in_array);\n\n\t\t// Insert entry into changesets\n\t\tvar changeSet = {\n\t\t\tinsert: [[in_offset, this._serializeArray(in_array)]],\n\t\t};\n\t\tthis._updateChanges(changeSet);\n\t}\n\n\t/**\n\t * Removes a given number of elements from the array property (or given number of letters from a StringProperty)\n\t * and shifts remaining values to the left.\n\t * E.g. [1, 2, 3, 4, 5] .removeRange(1, 3) => [1, 5]\n\t * @param {number} in_offset - Target start index\n\t * @param {number} in_deleteCount - number of elements to be deleted\n\t * @throws if in_offset is not a number\n\t * @throws if in_deleteCount is not a number\n\t * @throws if trying to remove an item with a parent\n\t * @throws if in_offset is smaller than zero or if in_offset + in_delete count is larger than the length of the array\n\t * @return {Array | string} an array containing the values or\n\t * properties removed.\n\t */\n\tremoveRange(in_offset, in_deleteCount) {\n\t\tConsoleUtils.assert(\n\t\t\t_.isNumber(in_offset),\n\t\t\tMSG.NOT_NUMBER + \"in_offset, method: ArrayProperty.removeRange or .remove\",\n\t\t);\n\t\tConsoleUtils.assert(\n\t\t\t_.isNumber(in_deleteCount),\n\t\t\tMSG.NOT_NUMBER + \"in_deleteCount, method: ArrayProperty.removeRange or .remove\",\n\t\t);\n\t\tConsoleUtils.assert(\n\t\t\tin_offset + in_deleteCount < this.length + 1 && in_offset >= 0 && in_deleteCount > 0,\n\t\t\tMSG.REMOVE_OUT_OF_BOUNDS +\n\t\t\t\t\"Cannot remove \" +\n\t\t\t\tin_deleteCount +\n\t\t\t\t\" items starting at index \" +\n\t\t\t\tin_offset,\n\t\t);\n\t\tvar result = [];\n\t\tfor (var i = in_offset; i < in_offset + in_deleteCount; i++) {\n\t\t\tresult.push(this.get(i));\n\t\t}\n\t\tthis._checkIsNotReadOnly(true);\n\t\tthis._removeRangeWithoutDirtying(in_offset, in_deleteCount);\n\t\tthis._setDirty();\n\t\treturn result;\n\t}\n\n\t/**\n\t * removes a given number of elements from the array property, and ensures, if this is not\n\t * a primitive array, that any existing properties have their parent pointer cleared.\n\t * @param {number} in_offset - Target start index\n\t * @param {number} in_deleteCount - number of elements to be deleted\n\t * @private\n\t */\n\t_clearRange(in_offset, in_deleteCount) {\n\t\tif (!this._isPrimitive) {\n\t\t\tfor (var i = 0; i < in_deleteCount; ++i) {\n\t\t\t\tif (this._dataArrayGetValue(in_offset + i).getParent() !== this) {\n\t\t\t\t\tthrow new Error(MSG.CANNOT_REMOVE_WITH_DIFFERENT_PARENT);\n\t\t\t\t} else {\n\t\t\t\t\tthis._dataArrayGetValue(in_offset + i)._setParent(undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._dataArrayRemoveRange(in_offset, in_deleteCount);\n\t}\n\n\t/**\n\t * removes a given number of elements from the array property, but doesn't dirty the property\n\t * this is useful for batch changes\n\t * @param {number} in_offset - Target start index\n\t * @param {number} in_deleteCount - number of elements to be deleted\n\t * @private\n\t */\n\t_removeRangeWithoutDirtying(in_offset, in_deleteCount) {\n\t\tthis._clearRange(in_offset, in_deleteCount);\n\n\t\t// Insert entry into changesets\n\t\tvar changeSet = {\n\t\t\tremove: [[in_offset, in_deleteCount]],\n\t\t};\n\t\tthis._updateChanges(changeSet);\n\t}\n\n\t/**\n\t * Sets the array properties elements to the content of the given array\n\t * All changed elements must already exist. This will overwrite existing elements.\n\t * E.g. [1, 2, 3, 4, 5] .setRange(1, [7, 8]) => [1, 7, 8, 4, 5]\n\t * @param {number} in_offset - Target start index\n\t * @param {Array<*>|Array<property-properties.BaseProperty>} in_array - contains the elements to be set\n\t * @throws if in_offset is not a number\n\t * @throws if in_offset is smaller than zero or higher than the length of the array\n\t */\n\tsetRange(in_offset, in_array) {\n\t\tif (!_.isArray(in_array) && !_.isString(in_array)) {\n\t\t\tthrow new TypeError(MSG.IN_ARRAY_NOT_ARRAY + \"ArrayProperty.setRange\");\n\t\t}\n\t\tin_offset = Math.floor(in_offset);\n\t\tif (!isFinite(in_offset)) {\n\t\t\t// eslint-disable-next-line unicorn/prefer-type-error\n\t\t\tthrow new Error(MSG.NOT_NUMBER + \"in_offset, method: ArrayProperty.setRange or .set\");\n\t\t}\n\t\tConsoleUtils.assert(\n\t\t\tin_offset >= -1 && in_offset + in_array.length <= this.getLength(),\n\t\t\tMSG.SET_OUT_OF_BOUNDS +\n\t\t\t\t\"Cannot set \" +\n\t\t\t\tin_array.length +\n\t\t\t\t\" items starting at index \" +\n\t\t\t\tin_offset +\n\t\t\t\t\". Array length: \" +\n\t\t\t\tthis.getLength(),\n\t\t);\n\t\tthis._checkIsNotReadOnly(true);\n\t\tthis._setRangeWithoutDirtying(in_offset, in_array);\n\t\tthis._setDirty();\n\t}\n\n\t/**\n\t * sets the array properties elements to the content of the given array\n\t * all changed elements must already exist. This version doesn't dirty the property,\n\t * which is useful for batch changes\n\t * @param {number} in_offset - Target start index\n\t * @param {Array<*>} in_array - contains the elements to be set\n\t */\n\t_setRangeWithoutDirtying(in_offset, in_array) {\n\t\tthis._modifyRangeWithoutDirtying(in_offset, in_array);\n\t}\n\n\t/**\n\t * sets the array properties elements to the content of the given array\n\t * all changed elements must already exist. This version doesn't dirty the property,\n\t * which is useful for batch changes\n\t * @param {number} in_offset - Target start index\n\t * @param {Array<*>} in_array - contains the elements to be set\n\t */\n\t_modifyRangeWithoutDirtying(in_offset, in_array) {\n\t\t// Has to be overloaded for arrays of properties!\n\t\tif (in_offset < 0) {\n\t\t\tthrow Error(MSG.START_OFFSET_NEGATIVE + in_offset);\n\t\t}\n\t\tvar changeSet = {};\n\t\tvar changeArray = [];\n\n\t\tif (!this._isPrimitive) {\n\t\t\t// for custom array properties, we have to do a remove/insert instead:\n\t\t\tthis._removeRangeWithoutDirtying(in_offset, in_array.length);\n\t\t\tthis._insertRangeWithoutDirtying(in_offset, in_array);\n\t\t} else {\n\t\t\t// does the reference array property not have a _dataArrayRef ??\n\t\t\t// go through all the elements of in_array to check if the content of the given array\n\t\t\t// is same as value of the array properties. If the values are same, we don't change it.\n\t\t\t// Otherwise, we set them and generate corresponding changeset.\n\t\t\tvar j;\n\t\t\tfor (var i = 0; i < in_array.length; i++) {\n\t\t\t\tif (this._dataArrayGetValue(in_offset + i) !== in_array[i]) {\n\t\t\t\t\tfor (j = i + 1; j < in_array.length; j++) {\n\t\t\t\t\t\tif (this._dataArrayGetValue(in_offset + j) === in_array[j]) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._dataArraySetRange(in_offset + i, in_array.slice(i, j));\n\t\t\t\t\tchangeArray.push([in_offset + i, this._serializeArray(in_array.slice(i, j))]);\n\t\t\t\t\ti = j;\n\t\t\t\t}\n\t\t\t}\n\t\t\tchangeSet[\"modify\"] = changeArray;\n\t\t\tthis._updateChanges(changeSet);\n\t\t}\n\t}\n\n\t/**\n\t * Returns the name of all the sub-properties of this property.\n\t * Numerical indexes from the array will be returned as strings.\n\t * E.g. ['0', '1', '2']\n\t *\n\t * @return {Array.<string>} An array of all the property ids\n\t */\n\tgetIds() {\n\t\treturn Object.keys(this._dataArrayGetBuffer());\n\t}\n\n\t/**\n\t * Checks whether a property or data exists at the given position.\n\t *\n\t * @param {string} in_position - index of the property\n\t * @return {boolean} True if the property or data exists. Otherwise false.\n\t */\n\thas(in_position) {\n\t\treturn this._dataArrayGetBuffer()[in_position] !== undefined;\n\t}\n\n\t/**\n\t * Gets the array element at a given index\n\t * @param {number | Array<string | number>} in_position - The target index if an array is passed, elements in the\n\t * array will be treated as part of a path. The first item in an array should be a position in the array. For\n\t * example, .get([0,'position','x']) is the equivalent of .get(0).get('position').get('x') If it encounters a\n\t * ReferenceProperty, .get will, by default, resolve the property it refers to.\n\t * @param {Object} in_options - Parameter object\n\t * @param {property-properties.BaseProperty.REFERENCE_RESOLUTION} [in_options.referenceResolutionMode=ALWAYS] - How\n\t * should this function behave during reference resolution?\n\t * @throws if in_position is an array and the first item in the array is not a number\n\t * @throws if in_position is neither an array nor a number.\n\t * @throws if in_position is smaller than zero or larger than the length of the array.\n\t * @return {* | property-properties.BaseProperty | undefined} The element at that index - either a property or a\n\t * value. or undefined if nothing was found.\n\t */\n\tget(in_position, in_options) {\n\t\tin_options = in_options || {};\n\t\tin_options.referenceResolutionMode =\n\t\t\tin_options.referenceResolutionMode === undefined\n\t\t\t\t? BaseProperty.REFERENCE_RESOLUTION.ALWAYS\n\t\t\t\t: in_options.referenceResolutionMode;\n\t\tvar prop = this;\n\t\tif (_.isArray(in_position)) {\n\t\t\tvar iterationStart = 0;\n\t\t\tvar prop = this;\n\t\t\tif (in_position[0] === PATH_TOKENS.UP) {\n\t\t\t\tprop = prop.getParent();\n\t\t\t\titerationStart = 1;\n\t\t\t} else if (in_position[0] === PATH_TOKENS.ROOT) {\n\t\t\t\tprop = prop.getRoot();\n\t\t\t\titerationStart = 1;\n\t\t\t} else {\n\t\t\t\tvar pos = Math.floor(in_position[0]);\n\t\t\t\tConsoleUtils.assert(isFinite(pos), MSG.FIRST_ITEM_MUST_BE_NUMBER);\n\t\t\t\tvar mode = in_options.referenceResolutionMode;\n\t\t\t\tConsoleUtils.assert(\n\t\t\t\t\tpos >= 0 && pos < this.getLength(),\n\t\t\t\t\tMSG.GET_OUT_OF_RANGE + in_position[0],\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (var i = iterationStart; i < in_position.length && prop; i++) {\n\t\t\t\tif (\n\t\t\t\t\tin_options.referenceResolutionMode === BaseProperty.REFERENCE_RESOLUTION.NO_LEAFS\n\t\t\t\t) {\n\t\t\t\t\tmode =\n\t\t\t\t\t\ti !== in_position.length - 1\n\t\t\t\t\t\t\t? BaseProperty.REFERENCE_RESOLUTION.ALWAYS\n\t\t\t\t\t\t\t: BaseProperty.REFERENCE_RESOLUTION.NEVER;\n\t\t\t\t}\n\t\t\t\tif (in_position[i + 1] === PATH_TOKENS.REF) {\n\t\t\t\t\tmode = BaseProperty.REFERENCE_RESOLUTION.NEVER;\n\t\t\t\t}\n\t\t\t\tprop = prop.get(in_position[i], { referenceResolutionMode: mode });\n\t\t\t\tif (prop === undefined && i < in_position.length - 1) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn prop;\n\t\t}\n\n\t\tswitch (in_position) {\n\t\t\tcase PATH_TOKENS.ROOT: {\n\t\t\t\treturn prop.getRoot();\n\t\t\t}\n\t\t\tcase PATH_TOKENS.UP: {\n\t\t\t\treturn prop.getParent();\n\t\t\t}\n\t\t\tcase PATH_TOKENS.REF: {\n\t\t\t\tthrow new Error(MSG.NO_GET_DEREFERENCE_ONLY);\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tvar pos = Math.floor(in_position);\n\t\t\t\tConsoleUtils.assert(isFinite(pos), MSG.IN_POSITION_MUST_BE_NUMBER);\n\t\t\t\tvar result = this._dataArrayGetValue(pos);\n\t\t\t\tif (in_options.referenceResolutionMode === BaseProperty.REFERENCE_RESOLUTION.ALWAYS) {\n\t\t\t\t\tif (result instanceof Property.ReferenceProperty) {\n\t\t\t\t\t\tresult = result.ref;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns an object with all the nested values contained in this property\n\t * @return { Array } an array of objects or values representing the values of your property.\n\t * For example:\n\t *\n\t * ```json\n\t * [\n\t * {\n\t * position: {\n\t * x: 2,\n\t * y: 5\n\t * }\n\t * },\n\t * {\n\t * position: {\n\t * x: 1,\n\t * y: -8\n\t * }\n\t * }\n\t * ]\n\t * ```\n\t *\n\t * or for a Value Array: `[1, 3, 6]`\n\t */\n\tgetValues() {\n\t\tvar result = [];\n\t\tvar ids = this.getIds();\n\t\tfor (var i = 0; i < ids.length; i++) {\n\t\t\tvar child = this.get(ids[i]);\n\t\t\tresult.push(child.getValues());\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * @return {Number} the current length of the array\n\t */\n\tgetLength() {\n\t\treturn this._dataArrayGetLength();\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\t_applyChangeset(in_changeSet, in_reportToView) {\n\t\tthis._checkIsNotReadOnly(false);\n\n\t\t// Iterator to process the changes in the ChangeSet in the correct order\n\t\tvar arrayIterator = new ArrayChangeSetIterator(in_changeSet);\n\n\t\tif (!this._isPrimitive) {\n\t\t\t// Successively apply the changes from the changeSet\n\t\t\twhile (!arrayIterator.atEnd()) {\n\t\t\t\tswitch (arrayIterator.opDescription.type) {\n\t\t\t\t\tcase ArrayChangeSetIterator.types.INSERT:\n\t\t\t\t\t\t// Handle inserts\n\t\t\t\t\t\tvar propertyDescriptions = arrayIterator.opDescription.operation[1];\n\t\t\t\t\t\tvar insertedPropertyInstances = [];\n\t\t\t\t\t\tvar scope = this._getScope();\n\t\t\t\t\t\tfor (var i = 0; i < propertyDescriptions.length; ++i) {\n\t\t\t\t\t\t\tvar createdProperty = Property.PropertyFactory._createProperty(\n\t\t\t\t\t\t\t\tpropertyDescriptions[i][\"typeid\"],\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tscope,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// Set parent so scope is defined for deserialization\n\t\t\t\t\t\t\tcreatedProperty._setParent(this);\n\t\t\t\t\t\t\tcreatedProperty._deserialize(propertyDescriptions[i], false);\n\t\t\t\t\t\t\tinsertedPropertyInstances.push(createdProperty);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._insertRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tthis._deserializeArray(insertedPropertyInstances),\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ArrayChangeSetIterator.types.REMOVE:\n\t\t\t\t\t\t// Handle removes\n\t\t\t\t\t\tvar numRemoved = arrayIterator.opDescription.operation[1];\n\t\t\t\t\t\tif (!_.isNumber(numRemoved)) {\n\t\t\t\t\t\t\tnumRemoved = numRemoved.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._removeRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tnumRemoved,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ArrayChangeSetIterator.types.MODIFY:\n\t\t\t\t\t\t// Handle modifies\n\t\t\t\t\t\tvar propertyDescriptions = arrayIterator.opDescription.operation[1];\n\t\t\t\t\t\tvar startIndex =\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset;\n\t\t\t\t\t\tfor (var i = 0; i < propertyDescriptions.length; ++i) {\n\t\t\t\t\t\t\tvar modifiedProperty = this.get(startIndex + i, {\n\t\t\t\t\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (!modifiedProperty) {\n\t\t\t\t\t\t\t\tthrow new Error(MSG.INDEX_INVALID + (startIndex + i));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmodifiedProperty._applyChangeset(propertyDescriptions[i], false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"applyChangeset: \" + MSG.UNKNOWN_OPERATION + arrayIterator.opDescription.type,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tarrayIterator.next();\n\t\t\t}\n\t\t} else {\n\t\t\t// Successively apply the changes from the changeSet\n\t\t\twhile (!arrayIterator.atEnd()) {\n\t\t\t\tswitch (arrayIterator.opDescription.type) {\n\t\t\t\t\tcase ArrayChangeSetIterator.types.INSERT:\n\t\t\t\t\t\t// Handle inserts\n\t\t\t\t\t\tthis._insertRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tthis._deserializeArray(arrayIterator.opDescription.operation[1]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ArrayChangeSetIterator.types.REMOVE:\n\t\t\t\t\t\t// Handle removes\n\t\t\t\t\t\tvar removeLength = arrayIterator.opDescription.operation[1];\n\t\t\t\t\t\tif (_.isArray(removeLength) || _.isString(removeLength)) {\n\t\t\t\t\t\t\tremoveLength = removeLength.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._removeRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tremoveLength,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ArrayChangeSetIterator.types.MODIFY:\n\t\t\t\t\t\t// Handle modifies\n\t\t\t\t\t\tthis._modifyRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tthis._deserializeArray(arrayIterator.opDescription.operation[1]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"applyChangeset: \" + MSG.UNKNOWN_OPERATION + arrayIterator.opDescription.type,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tarrayIterator.next();\n\t\t\t}\n\t\t}\n\n\t\t// Finally mark the property as dirty (we postponed this in the previous operations to prevent multiple triggering\n\t\t// of dirtying events)\n\t\tthis._setDirty(in_reportToView);\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\t_reapplyDirtyFlags(in_pendingChangeSet, in_dirtyChangeSet) {\n\t\tthis._checkIsNotReadOnly(false);\n\n\t\tthis._setChanges(in_pendingChangeSet, in_dirtyChangeSet);\n\t\t// Finally mark the property as dirty (we postponed this in the previous operations to prevent multiple triggering\n\t\t// of dirtying events)\n\t\tthis._setDirty(false);\n\t}\n\n\t/**\n\t * Removes the dirtiness flag from this property\n\t * @param {property-properties.BaseProperty.MODIFIED_STATE_FLAGS} [in_flags] - The flags to clean.\n\t * If none are supplied, all will be removed.\n\t * @private\n\t */\n\t_cleanDirty(in_flags) {\n\t\t// Invoke parent - cleans own dirty flag\n\t\tBaseProperty.prototype._cleanDirty.call(this, in_flags);\n\n\t\t// null means no change, undefined means reset the changes\n\t\tvar pendingChanges = null,\n\t\t\tdirtyChanges = null;\n\n\t\tif (\n\t\t\tin_flags === undefined ||\n\t\t\t(in_flags & BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE) !== 0\n\t\t) {\n\t\t\tpendingChanges = undefined;\n\t\t}\n\t\tif (in_flags === undefined || (in_flags & BaseProperty.MODIFIED_STATE_FLAGS.DIRTY) !== 0) {\n\t\t\tdirtyChanges = undefined;\n\t\t}\n\n\t\tthis._setChanges(pendingChanges, dirtyChanges);\n\t}\n\n\t/**\n\t * Removes the dirtiness flag from this property and recursively from all of its children.\n\t *\n\t * @param {property-properties.BaseProperty.MODIFIED_STATE_FLAGS} [in_dirtinessType] - The flags to clean.\n\t * If none are supplied, all will be removed.\n\t */\n\tcleanDirty(in_dirtinessType) {\n\t\tif (!this._isPrimitive) {\n\t\t\tfor (var i = 0; i < this._dataArrayGetLength(); ++i) {\n\t\t\t\tthis._dataArrayGetValue(i).cleanDirty(in_dirtinessType);\n\t\t\t}\n\t\t}\n\t\t// after all paths are clean, we are also clean!\n\t\tthis._cleanDirty(in_dirtinessType);\n\t}\n\n\t/**\n\t * Internal helper function that implements the deserialize algorithm for an array of named properties.\n\t *\n\t * @param {property-properties.SerializedChangeSet} in_serializedObj - The serialized changeset to apply. This\n\t * has to be a normalized change-set (only containing inserts. Removes and Modifies are forbidden).\n\t * @param {boolean} [in_reportToView = true] - By default, the dirtying will always be reported to the checkout view\n\t * and trigger a modified event there. When batching updates, this can be prevented via this flag.\n\t * @return {property-properties.SerializedChangeSet} ChangeSet with the changes that actually were performed during the\n\t * deserialization.\n\t */\n\t_deserializeNamedPropertyArray(in_serializedObj, in_reportToView) {\n\t\tif (!_.isArray(in_serializedObj.insert[0][1])) {\n\t\t\tthrow new TypeError(MSG.INVALID_CHANGESET);\n\t\t}\n\n\t\t// When the array contains named properties, we can use an efficient diffing algorithm, which\n\t\t// takes advantage of the ability to identify entries in an unique way\n\t\tvar targetArray = in_serializedObj.insert[0][1];\n\n\t\t// The algorithm below finds the mapping between the two given arrays which requires the smallest number of\n\t\t// inserted and removed entries. These operations are determined via the following strategy:\n\t\t// 1) We search for all consecutive segments in the input data, which map to a consecutive segments in the\n\t\t// target array.\n\t\t// 2) We search for the longest sequence of consecutive segments in the input data which are all starting at\n\t\t// monotone increasing points in the target array. These are the segments which will remain unmodified\n\t\t// by insertion/removals\n\t\t// 3) Finally, we determine the necessary insertion and remove operations to fill in/remove the entries between\n\t\t// these segments and compute modify instructions within the segments.\n\n\t\t// 1) Map the GUIDs in the input ChangeSet to indices\n\t\tvar resultGuidToIndexMap = {};\n\t\tfor (var i = 0; i < targetArray.length; i++) {\n\t\t\tvar insertedProperty = targetArray[i];\n\t\t\tif (\n\t\t\t\tinsertedProperty[\"String\"] === undefined ||\n\t\t\t\tinsertedProperty[\"String\"][\"guid\"] === undefined\n\t\t\t) {\n\t\t\t\tthrow new Error(MSG.MISSING_GUID_IN_NORMALIZED_CHANGESET);\n\t\t\t}\n\n\t\t\tvar guid = insertedProperty[\"String\"][\"guid\"];\n\t\t\t// since the spec allows alternatively other changeset formats for strings, we have to support them here:\n\t\t\tif (!_.isString(guid) && insertedProperty[\"String\"][\"guid\"].insert) {\n\t\t\t\tguid = insertedProperty[\"String\"][\"guid\"].insert[0][1];\n\t\t\t}\n\t\t\tresultGuidToIndexMap[guid] = i;\n\t\t}\n\n\t\tvar initialArrayLength = this._dataArrayGetLength();\n\n\t\t// Collect consecutive segments\n\t\tvar segmentStartPointsInInitialArray = [];\n\t\tvar segmentStartPointsInTargetArray = [];\n\t\tvar segmentLengths = [];\n\t\tvar segmentInterrupted = false;\n\t\tfor (var i = 0; i < initialArrayLength; i++) {\n\t\t\t// Get the GUID of the entry\n\t\t\tvar guid = this._dataArrayGetValue(i).getGuid();\n\n\t\t\t// Check where it is stored in the target array\n\t\t\tvar index = resultGuidToIndexMap[guid];\n\t\t\tif (index !== undefined) {\n\t\t\t\t// Check whether we can append the entry to the existing sequence\n\t\t\t\tif (\n\t\t\t\t\t!segmentInterrupted &&\n\t\t\t\t\tsegmentStartPointsInTargetArray.length > 0 &&\n\t\t\t\t\t_.last(segmentStartPointsInTargetArray) + _.last(segmentLengths) === index\n\t\t\t\t) {\n\t\t\t\t\t// In that case we just increase the length of the segment\n\t\t\t\t\tsegmentLengths[segmentLengths.length - 1]++;\n\t\t\t\t} else {\n\t\t\t\t\t// Create a new segment\n\t\t\t\t\tsegmentStartPointsInInitialArray.push(i);\n\t\t\t\t\tsegmentStartPointsInTargetArray.push(index);\n\t\t\t\t\tsegmentLengths.push(1);\n\t\t\t\t\tsegmentInterrupted = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsegmentInterrupted = true;\n\t\t\t}\n\t\t}\n\n\t\t// 2) Get all segments in the array which we will keep (we try to keep as many as possible, so this maps\n\t\t// to finding the longest monotone increasing sequence of sub-segments)\n\t\tvar orderedSegments = _getLongestIncreasingSubsequenceSegments(\n\t\t\tsegmentStartPointsInTargetArray,\n\t\t\tsegmentLengths,\n\t\t);\n\n\t\t// 3) Now we have to convert this sequence of ordered segments to insert and remove commands\n\t\tvar changes = {};\n\n\t\tvar lastPositionInInitialArray = 0;\n\t\tvar lastPositionInTargetArray = 0;\n\t\tvar offset = 0;\n\t\tfor (var i = 0; i <= orderedSegments.length; i++) {\n\t\t\tvar startPointInInitialArray, startPointInTargetArray, segmentLength;\n\t\t\tvar offsetChange = 0;\n\t\t\tif (i < orderedSegments.length) {\n\t\t\t\t// Extract the information about the currently processed segment.\n\t\t\t\tstartPointInInitialArray = segmentStartPointsInInitialArray[orderedSegments[i]];\n\t\t\t\tstartPointInTargetArray = segmentStartPointsInTargetArray[orderedSegments[i]];\n\t\t\t\tsegmentLength = segmentLengths[orderedSegments[i]];\n\t\t\t} else {\n\t\t\t\t// Special case to handle the end of the sequence: We add a segment of length 0 at the end\n\t\t\t\tstartPointInInitialArray = initialArrayLength;\n\t\t\t\tstartPointInTargetArray = targetArray.length;\n\t\t\t\tsegmentLength = 0;\n\t\t\t}\n\n\t\t\t// If the start point of the segment in the initial array is larger than the last point we processed, we have\n\t\t\t// to remove the elements between the two points\n\t\t\tif (startPointInInitialArray > lastPositionInInitialArray) {\n\t\t\t\tchanges.remove = changes.remove || [];\n\t\t\t\tchanges.remove.push([\n\t\t\t\t\tlastPositionInInitialArray,\n\t\t\t\t\tstartPointInInitialArray - lastPositionInInitialArray,\n\t\t\t\t]);\n\t\t\t\tthis._removeRangeWithoutDirtying(\n\t\t\t\t\tlastPositionInInitialArray + offset,\n\t\t\t\t\tstartPointInInitialArray - lastPositionInInitialArray,\n\t\t\t\t);\n\t\t\t\toffsetChange -= startPointInInitialArray - lastPositionInInitialArray;\n\t\t\t}\n\n\t\t\t// If the start point of the segment in the target array is larger than the last point we processed, we have\n\t\t\t// to insert the elements between the two points\n\t\t\tif (startPointInTargetArray > lastPositionInTargetArray) {\n\t\t\t\tchanges.insert = changes.insert || [];\n\t\t\t\tlet elementsToInsert = targetArray.slice(\n\t\t\t\t\tlastPositionInTargetArray,\n\t\t\t\t\tstartPointInTargetArray,\n\t\t\t\t);\n\t\t\t\tchanges.insert.push([lastPositionInInitialArray, deepCopy(elementsToInsert)]);\n\t\t\t\tvar scope = this._getScope();\n\t\t\t\tvar insertedProperties = deserializeNonPrimitiveArrayElements(elementsToInsert, scope);\n\t\t\t\tthis._insertRangeWithoutDirtying(\n\t\t\t\t\tlastPositionInInitialArray + offset,\n\t\t\t\t\tinsertedProperties,\n\t\t\t\t);\n\t\t\t\toffsetChange += insertedProperties.length;\n\t\t\t}\n\n\t\t\t// Update the last processed points\n\t\t\tlastPositionInInitialArray = startPointInInitialArray + segmentLength;\n\t\t\tlastPositionInTargetArray = startPointInTargetArray + segmentLength;\n\t\t\toffset += offsetChange;\n\n\t\t\t// Recursively check the entries within the segment for modifications\n\t\t\tfor (var j = 0; j < segmentLength; j++) {\n\t\t\t\tvar existingEntry = this._dataArrayGetValue(startPointInInitialArray + j + offset);\n\t\t\t\tvar entryChanges = existingEntry._deserialize(\n\t\t\t\t\ttargetArray[startPointInTargetArray + j],\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\n\t\t\t\t// We had changes which we have to report back\n\t\t\t\tif (!ChangeSet.isEmptyChangeSet(entryChanges)) {\n\t\t\t\t\t// Make sure, the ChangeSet contains the typeid of the modified entry\n\t\t\t\t\tentryChanges.typeid = existingEntry.getFullTypeid();\n\n\t\t\t\t\tif (!changes.modify) {\n\t\t\t\t\t\tchanges.modify = [[startPointInInitialArray + j, [entryChanges]]];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar lastModifiedSequence = _.last(changes.modify);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tlastModifiedSequence[0] + lastModifiedSequence[1].length ===\n\t\t\t\t\t\t\tstartPointInInitialArray + j\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tlastModifiedSequence[1].push(entryChanges);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchanges.modify.push([startPointInInitialArray + j, [entryChanges]]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If there were any changes, we have to mark this property as dirty\n\t\tif (!ChangeSet.isEmptyChangeSet(changes)) {\n\t\t\tthis._setDirty(in_reportToView);\n\t\t}\n\t\treturn changes;\n\t}\n\n\t/**\n\t * Function to deserialize special primitive types.\n\t * Some primitive types (e.g. Int64, which is not natively supported by javascript) require\n\t * special treatment on deserialization. For supported types, we can just return the input here.\n\t *\n\t * @param {property-properties.SerializedChangeSet} in_serializedObj - The object to be deserialized\n\t * @return {*} the deserialized value\n\t */\n\t_deserializeValue(in_serializedObj) {\n\t\treturn in_serializedObj;\n\t}\n\n\t/**\n\t * Function to serialize special primitive types.\n\t * Some primitive types (e.g. Int64, which is not natively supported by javascript) require\n\t * special treatment on serialization. For supported types, we can just return the input here.\n\t *\n\t * @param {*} in_obj - The object to be serialized\n\t * @return {property-properties.SerializedChangeSet} the serialized object\n\t */\n\t_serializeValue(in_obj) {\n\t\t// we have to convert the propertySet objects to changesets\n\t\treturn in_obj._serialize(false, true);\n\t}\n\n\t/**\n\t * Function to serialize arrays of special primitive types.\n\t * Some primitive types (e.g. Int64, which is not natively supported by javascript) require\n\t * special treatment on serialization. For supported types, we can just return the input here.\n\t *\n\t * @param {Array} in_array - The array of special objects to be serialized\n\t * @return {Array<property-properties.SerializedChangeSet>} the serialized object\n\t */\n\t_serializeArray(in_array) {\n\t\tvar len = in_array.length;\n\t\tvar result = new Array(len);\n\t\tif (this._isPrimitive) {\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tresult[i] = this._serializeValue(in_array[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tresult[i] = {};\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Function to deserialize arrays of special primitive types.\n\t * Some primitive types (e.g. Int64, which is not natively supported by javascript) require\n\t * special treatment on deserialization. For supported types, we can just return the input here.\n\t *\n\t * @param {Array<property-properties.SerializedChangeSet>} in_serializedObj - The serialized object\n\t * @return {Array} in_array - The array of special objects that were deserialized\n\t */\n\t_deserializeArray(in_serializedObj) {\n\t\treturn in_serializedObj;\n\t}\n\n\t/**\n\t * @inheritdoc\n\t *\n\t * @param {object} [in_filteringOptions = {}] - The filtering options to consider while deserializing the property.\n\t * @param {boolean} [in_createChangeSet = true] - Should a changeset be created for this deserialization?\n\t */\n\t_deserialize(in_serializedObj, in_reportToView, in_filteringOptions, in_createChangeSet) {\n\t\tthis._checkIsNotReadOnly(false);\n\n\t\tif (\n\t\t\t(in_serializedObj.remove && in_serializedObj.remove.length > 0) ||\n\t\t\t(in_serializedObj.modify && in_serializedObj.modify.length > 0) ||\n\t\t\t(in_serializedObj.insert &&\n\t\t\t\t(in_serializedObj.insert.length > 1 ||\n\t\t\t\t\t(in_serializedObj.insert.length === 1 &&\n\t\t\t\t\t\t(in_serializedObj.insert[0][0] !== 0 ||\n\t\t\t\t\t\t\t!_.isArray(in_serializedObj.insert[0][1])))))\n\t\t) {\n\t\t\tthrow new Error(MSG.NO_NORMALIZED_CHANGESET);\n\t\t}\n\n\t\tvar arrayLength = this._dataArrayGetLength();\n\n\t\tif (!in_serializedObj.insert || !in_serializedObj.insert[0]) {\n\t\t\t// we've got an empty object, so we have to wipe everything we've got\n\t\t\tif (arrayLength > 0) {\n\t\t\t\tthis._clearRange(0, arrayLength);\n\t\t\t\tthis._setDirty(in_reportToView);\n\t\t\t\tvar removeChangeSet = {\n\t\t\t\t\tremove: [[0, arrayLength]],\n\t\t\t\t};\n\t\t\t\tthis._updateChanges(removeChangeSet);\n\t\t\t\treturn removeChangeSet;\n\t\t\t} else {\n\t\t\t\t// the array was already empty, nothing has changed\n\t\t\t\treturn {};\n\t\t\t}\n\t\t}\n\n\t\tvar scope = this._getScope();\n\n\t\tif (\n\t\t\tProperty.PropertyFactory.inheritsFrom(this.getTypeid(), \"NamedProperty\", {\n\t\t\t\tscope: scope,\n\t\t\t})\n\t\t) {\n\t\t\treturn this._deserializeNamedPropertyArray(in_serializedObj, in_reportToView);\n\t\t} else {\n\t\t\t// most simplistic diff method: Remove all existing data and insert the new data\n\n\t\t\t// The changes we will report as result of this function\n\t\t\tvar simpleChanges = {\n\t\t\t\tinsert: in_createChangeSet\n\t\t\t\t\t? deepCopy(in_serializedObj.insert)\n\t\t\t\t\t: in_serializedObj.insert,\n\t\t\t};\n\t\t\tif (arrayLength > 0) {\n\t\t\t\tsimpleChanges.remove = [[0, arrayLength]];\n\t\t\t}\n\n\t\t\tif (!this._isPrimitive) {\n\t\t\t\tvar propertyDescriptions = in_serializedObj.insert[0][1];\n\t\t\t\tvar result = [];\n\n\t\t\t\tfor (var i = 0; i < propertyDescriptions.length; ++i) {\n\t\t\t\t\tvar createdProperty = Property.PropertyFactory._createProperty(\n\t\t\t\t\t\tpropertyDescriptions[i][\"typeid\"],\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t);\n\t\t\t\t\tcreatedProperty._setParent(this);\n\t\t\t\t\tcreatedProperty._deserialize(\n\t\t\t\t\t\tpropertyDescriptions[i],\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tin_filteringOptions,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t);\n\t\t\t\t\tresult.push(createdProperty);\n\t\t\t\t}\n\t\t\t\tthis._clearRange(0, this._dataArrayGetLength());\n\t\t\t\tthis._dataArrayInsertRange(0, result);\n\t\t\t} else {\n\t\t\t\t// Check, whether there has been any change in the array at all\n\t\t\t\tif (in_serializedObj.insert[0][1].length === this._dataArrayGetLength()) {\n\t\t\t\t\t// We have to compare the two buffers\n\t\t\t\t\tvar buffer = this._dataArrayGetBuffer();\n\t\t\t\t\tvar changeSetArray = in_serializedObj.insert[0][1];\n\t\t\t\t\tvar len = buffer.length;\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tif (this._typeid === \"Int64\" || this._typeid === \"Uint64\") {\n\t\t\t\t\t\t// For (u)int64, we will compare (Ui/I)nt64 objects with arrays [low, high]\n\t\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tchangeSetArray[i][0] !== buffer[i].getValueLow() ||\n\t\t\t\t\t\t\t\tchangeSetArray[i][1] !== buffer[i].getValueHigh()\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\t\tif (buffer[i] !== changeSetArray[i]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (i === len) {\n\t\t\t\t\t\treturn {};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// set the actual array values to our array\n\t\t\t\tthis._dataArrayDeserialize(this._deserializeArray(in_serializedObj.insert[0][1]));\n\t\t\t}\n\n\t\t\t// Update the dirty and pending changes\n\t\t\tthis._updateChanges(simpleChanges);\n\n\t\t\t// Finally report the dirtiness to the view (we postponed this above)\n\t\t\tthis._setDirty(in_reportToView);\n\n\t\t\treturn simpleChanges;\n\t\t}\n\t}\n\n\t_getChangesetForCustomTypeArray(\n\t\tin_basePropertyChangeset,\n\t\tin_dirtinessType,\n\t\tin_includeReferencedRepositories,\n\t) {\n\t\tvar result = {};\n\t\tif (in_basePropertyChangeset.remove && in_basePropertyChangeset.remove.length > 0) {\n\t\t\tresult.remove = deepCopy(in_basePropertyChangeset.remove);\n\t\t}\n\t\t// get the iterator over the changes:\n\t\tvar iterator = new ArrayChangeSetIterator(in_basePropertyChangeset);\n\t\tvar currentArrayIndex = 0;\n\t\tvar currentArraySize = this._dataArrayGetLength();\n\t\tvar op, opStartIndex;\n\t\twhile (!iterator.atEnd() || currentArrayIndex < currentArraySize) {\n\t\t\tif (!iterator.atEnd()) {\n\t\t\t\top = iterator.opDescription;\n\t\t\t\topStartIndex = op.operation[0] + op.offset;\n\t\t\t} else {\n\t\t\t\t// no more ops\n\t\t\t\top = { offset: iterator.opDescription.offset };\n\t\t\t\topStartIndex = Number.MAX_VALUE;\n\t\t\t}\n\n\t\t\tif (currentArrayIndex < opStartIndex) {\n\t\t\t\t// not in the influence of an insert or remove\n\n\t\t\t\t// we have to check if the element was modified (since that is not tracked)\n\t\t\t\tif (this._dataArrayGetValue(currentArrayIndex)._isDirty(in_dirtinessType)) {\n\t\t\t\t\t// check if we can combine modifies:\n\t\t\t\t\tvar lastModify = undefined;\n\t\t\t\t\tif (result.modify && result.modify.length > 0) {\n\t\t\t\t\t\tlastModify = result.modify[result.modify.length - 1];\n\t\t\t\t\t\tif (lastModify[0] + lastModify[1].length === currentArrayIndex - op.offset) {\n\t\t\t\t\t\t\t// we need to combine, keep lastModify\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlastModify = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (lastModify) {\n\t\t\t\t\t\tlastModify[1].push(\n\t\t\t\t\t\t\tthis._dataArrayGetValue(currentArrayIndex).serialize({\n\t\t\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\t\t\tincludeRootTypeid: true,\n\t\t\t\t\t\t\t\tdirtinessType: in_dirtinessType,\n\t\t\t\t\t\t\t\tincludeReferencedRepositories: in_includeReferencedRepositories,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// begin new modify\n\t\t\t\t\t\tif (!result.modify) {\n\t\t\t\t\t\t\tresult.modify = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult.modify.push([\n\t\t\t\t\t\t\tcurrentArrayIndex - op.offset,\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\tthis._dataArrayGetValue(currentArrayIndex).serialize({\n\t\t\t\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\t\t\t\tincludeRootTypeid: true,\n\t\t\t\t\t\t\t\t\tdirtinessType: in_dirtinessType,\n\t\t\t\t\t\t\t\t\tincludeReferencedRepositories: in_includeReferencedRepositories,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t\tcurrentArrayIndex++;\n\t\t\t\t\t// add more immediate modifies if possible\n\t\t\t\t\twhile (\n\t\t\t\t\t\tcurrentArrayIndex < currentArraySize &&\n\t\t\t\t\t\tcurrentArrayIndex < opStartIndex &&\n\t\t\t\t\t\tthis._dataArrayGetValue(currentArrayIndex)._isDirty(in_dirtinessType)\n\t\t\t\t\t) {\n\t\t\t\t\t\tresult.modify[result.modify.length - 1][1].push(\n\t\t\t\t\t\t\tthis._dataArrayGetValue(currentArrayIndex).serialize({\n\t\t\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\t\t\tincludeRootTypeid: true,\n\t\t\t\t\t\t\t\tdirtinessType: in_dirtinessType,\n\t\t\t\t\t\t\t\tincludeReferencedRepositories: in_includeReferencedRepositories,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcurrentArrayIndex++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcurrentArrayIndex++;\n\t\t\t\t}\n\t\t\t} else if (currentArrayIndex === opStartIndex) {\n\t\t\t\t// handle the op\n\t\t\t\tswitch (op.type) {\n\t\t\t\t\tcase ArrayChangeSetIterator.types.REMOVE: {\n\t\t\t\t\t\t// no need to do something (removes are just copied)\n\t\t\t\t\t\titerator.next(); // we've completely consumed that op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase ArrayChangeSetIterator.types.INSERT: {\n\t\t\t\t\t\t// we have to convert the inserts:\n\t\t\t\t\t\tvar currentInsert = op.operation;\n\t\t\t\t\t\tvar newInsert = [currentInsert[0], []];\n\t\t\t\t\t\tfor (var j = 0; j < currentInsert[1].length; ++j) {\n\t\t\t\t\t\t\t// TODO: we don't use the data from the changeset anymore, since we directly\n\t\t\t\t\t\t\t// TODO: read the data from the array now - remove the data from the op and\n\t\t\t\t\t\t\t// TODO: replace it with just the length instead\n\t\t\t\t\t\t\tif (!this._dataArrayGetValue(opStartIndex + j)) {\n\t\t\t\t\t\t\t\tthrow new Error(\"insert: invalid index\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewInsert[1].push(\n\t\t\t\t\t\t\t\tthis._dataArrayGetValue(opStartIndex + j).serialize({\n\t\t\t\t\t\t\t\t\tdirtyOnly: false,\n\t\t\t\t\t\t\t\t\tincludeRootTypeid: true,\n\t\t\t\t\t\t\t\t\tdirtinessType: in_dirtinessType,\n\t\t\t\t\t\t\t\t\tincludeReferencedRepositories: in_includeReferencedRepositories,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!result.insert) {\n\t\t\t\t\t\t\tresult.insert = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult.insert.push(newInsert);\n\t\t\t\t\t\tcurrentArrayIndex += currentInsert[1].length; // we've read and used these entries above\n\t\t\t\t\t\titerator.next(); // we've completely consumed that op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase ArrayChangeSetIterator.types.MODIFY: {\n\t\t\t\t\t\t// Prevent from looping infinitly\n\t\t\t\t\t\t// TODO: Might want to decide if there's something to do here\n\t\t\t\t\t\titerator.next(); // we've completely consumed that op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Serialize the property\n\t *\n\t * @param {boolean} in_dirtyOnly - Only include dirty entries in the serialization\n\t * @param {boolean} in_includeRootTypeid - Include the typeid of the root of the hierarchy.\n\t * Has no effect for `ArrayProperty`.\n\t * @param {property-properties.BaseProperty.MODIFIED_STATE_FLAGS} [in_dirtinessType] - The type of dirtiness to use\n\t * when reporting dirty changes. By default this is `PENDING_CHANGE`.\n\t * @param {boolean} [in_includeReferencedRepositories=false] - If this is set to true, the _serialize\n\t * function will descend into referenced repositories.\n\t * WARNING: if there are loops in the references this can result in an infinite loop.\n\t *\n\t * @return {Object} The serialized representation of this property\n\t * @private\n\t */\n\t_serialize(\n\t\tin_dirtyOnly,\n\t\tin_includeRootTypeid,\n\t\tin_dirtinessType,\n\t\tin_includeReferencedRepositories,\n\t) {\n\t\tvar result = AbstractStaticCollectionProperty.prototype._serialize.call(\n\t\t\tthis,\n\t\t\tin_dirtyOnly,\n\t\t\tin_includeRootTypeid,\n\t\t\tin_dirtinessType,\n\t\t\tin_includeReferencedRepositories,\n\t\t);\n\n\t\tif (!this._isPrimitive) {\n\t\t\tif (in_dirtyOnly) {\n\t\t\t\t_.extend(\n\t\t\t\t\tresult,\n\t\t\t\t\tin_dirtinessType === BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE\n\t\t\t\t\t\t? this._getChangesetForCustomTypeArray(\n\t\t\t\t\t\t\t\tthis._getPendingChanges(),\n\t\t\t\t\t\t\t\tin_dirtinessType,\n\t\t\t\t\t\t\t\tin_includeReferencedRepositories,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: this._getChangesetForCustomTypeArray(\n\t\t\t\t\t\t\t\tthis._getDirtyChanges(),\n\t\t\t\t\t\t\t\tin_dirtinessType,\n\t\t\t\t\t\t\t\tin_includeReferencedRepositories,\n\t\t\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\t// returns just an insert with the current data\n\t\t\t\tif (this._dataArrayGetLength() > 0) {\n\t\t\t\t\tresult.insert = [];\n\t\t\t\t\tresult.insert.push([0, []]);\n\t\t\t\t\t// we have to convert the propertySet objects to changesets\n\t\t\t\t\tfor (var i = 0; i < this._dataArrayGetLength(); i++) {\n\t\t\t\t\t\tresult.insert[0][1].push(\n\t\t\t\t\t\t\tthis._dataArrayGetValue(i)._serialize(\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\tin_dirtinessType,\n\t\t\t\t\t\t\t\tin_includeReferencedRepositories,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t} else if (in_dirtyOnly) {\n\t\t\treturn in_dirtinessType === BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE\n\t\t\t\t? deepCopy(this._getPendingChanges())\n\t\t\t\t: deepCopy(this._getDirtyChanges());\n\t\t} else {\n\t\t\t// returns just an insert with the current data\n\t\t\tif (this._dataArrayGetLength() > 0) {\n\t\t\t\tresult.insert = [];\n\t\t\t\tresult.insert.push([0, []]);\n\t\t\t\tfor (var i = 0; i < this._dataArrayGetLength(); i++) {\n\t\t\t\t\tresult.insert[0][1].push(this._serializeValue(this._dataArrayGetValue(i)));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\t/**\n\t * Repeatedly calls back the given function with human-readable string\n\t * representations of the property and of its sub-properties.\n\t * @param {string} indent - Leading spaces to create the tree representation\n\t * @param {string} externalId - Name of the current property at the upper level. Used for arrays.\n\t * @param {function} printFct - Function to call for printing each property\n\t */\n\t_prettyPrint(indent, externalId, printFct) {\n\t\tprintFct(indent + externalId + this.getId() + \" (Array of \" + this.getTypeid() + \"): [\");\n\t\tif (!this._isPrimitive) {\n\t\t\tthis._prettyPrintChildren(indent, printFct);\n\t\t} else {\n\t\t\tvar childIndent = indent + \" \";\n\t\t\tvar prefix = \"\";\n\t\t\tvar suffix = \"\";\n\t\t\tif (this.getTypeid() === \"String\") {\n\t\t\t\tprefix = '\"';\n\t\t\t\tsuffix = '\"';\n\t\t\t}\n\t\t\tfor (var i = 0; i < this._dataArrayGetLength(); i++) {\n\t\t\t\tprintFct(childIndent + i + \": \" + prefix + this._dataArrayGetValue(i) + suffix);\n\t\t\t}\n\t\t}\n\t\tprintFct(indent + \"]\");\n\t}\n\n\t/**\n\t * Repeatedly calls back the given function with human-readable string\n\t * representations of the property's sub-properties.\n\t * @param {string} indent - Leading spaces to create the tree representation\n\t * @param {function} printFct - Function to call for printing each property\n\t */\n\t_prettyPrintChildren(indent, printFct) {\n\t\tindent += \" \";\n\t\tvar ids = this.getIds();\n\t\tfor (var i = 0; i < ids.length; i++) {\n\t\t\tthis.get(ids[i], {\n\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t})._prettyPrint(indent, ids[i] + \": \", printFct);\n\t\t}\n\t}\n\n\t/**\n\t * Return a JSON representation of the array and its items.\n\t * @return {object} A JSON representation of the array and its items.\n\t * @protected\n\t */\n\t_toJson() {\n\t\tvar json = {\n\t\t\tid: this.getId(),\n\t\t\tcontext: this._context,\n\t\t\ttypeid: this.getTypeid(),\n\t\t\tisConstant: this._isConstant,\n\t\t\tvalue: [],\n\t\t};\n\n\t\tif (!this._isPrimitive) {\n\t\t\tvar ids = this.getIds();\n\t\t\tfor (var i = 0; i < ids.length; i++) {\n\t\t\t\tjson.value.push(\n\t\t\t\t\tthis.get(ids[i], {\n\t\t\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t\t\t})._toJson(),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tjson.value = this.getValues();\n\t\t}\n\n\t\treturn json;\n\t}\n\n\t/**\n\t * Returns the full property type identifier for the ChangeSet including the array type id, if not\n\t * omitted by parameters\n\t * @param {boolean} [in_hideCollection=false] - If true the collection type (if applicable) will be omitted\n\t * @return {string} The typeid\n\t */\n\tgetFullTypeid(in_hideCollection) {\n\t\treturn in_hideCollection\n\t\t\t? this._typeid\n\t\t\t: TypeIdHelper.createSerializationTypeId(this._typeid, \"array\");\n\t}\n\n\t/**\n\t * Creates and initializes the data array\n\t * @param {Number} in_length - The initial length of the array\n\t */\n\t_dataArrayCreate(in_length) {\n\t\t// This really creates a generic array for custom type arrays. For primitive arrays, like\n\t\t// 'StringArrayProperty' or 'Float32ArrayProperty', you need to overload this function.\n\t\tthis._dataArrayRef = new UniversalDataArray(in_length);\n\t\tfor (var i = 0; i < in_length; i++) {\n\t\t\tvar element = Property.PropertyFactory._createProperty(\n\t\t\t\tthis.getTypeid(),\n\t\t\t\tnull,\n\t\t\t\tundefined,\n\t\t\t\tthis._scope,\n\t\t\t);\n\t\t\telement._setParent(this);\n\t\t\tthis._dataArraySetValue(i, element);\n\t\t}\n\t}\n\n\t/**\n\t * Returns the length of the data array\n\t * @return {Number} The length\n\t */\n\t_dataArrayGetLength() {\n\t\treturn this._dataArrayRef.length;\n\t}\n\n\t/**\n\t * Returns the data array's internal buffer\n\t * @return {Array} The buffer\n\t */\n\t_dataArrayGetBuffer() {\n\t\treturn this._dataArrayRef.getBuffer();\n\t}\n\n\t/**\n\t * Returns an entry from the data array\n\t * @param {Number} in_index - Position in the array\n\t *\n\t * @return {*} The value at index in_index\n\t */\n\t_dataArrayGetValue(in_index) {\n\t\treturn this._dataArrayRef.getValue(in_index);\n\t}\n\n\t/**\n\t * Sets an entry in the data array\n\t * @param {Number} in_index - Position in the array\n\t * @param {*} in_value - The new value at index in_index\n\t */\n\t_dataArraySetValue(in_index, in_value) {\n\t\tthis._dataArrayRef.setValue(in_index, in_value);\n\t}\n\n\t/**\n\t * Set the array to the given new array\n\t * @param {Array | string} in_newArray - The new contents of the array\n\t */\n\t_dataArrayDeserialize(in_newArray) {\n\t\tthis._dataArrayRef.deserialize(in_newArray);\n\t}\n\n\t/**\n\t * Inserts a range into the data array\n\t * @param {Number} in_position - Position at which the insert should be done\n\t * @param {Array | string} in_range - The array to insert\n\t */\n\t_dataArrayInsertRange(in_position, in_range) {\n\t\tthis._dataArrayRef.insertRange(in_position, in_range);\n\t}\n\n\t/**\n\t * Removes a range from the data array\n\t * @param {Number} in_position - Position at which to start the removal\n\t * @param {Number} in_length - The number of entries to remove\n\t */\n\t_dataArrayRemoveRange(in_position, in_length) {\n\t\tthis._dataArrayRef.removeRange(in_position, in_length);\n\t}\n\n\t/**\n\t * Overwrites a range in the data array\n\t * @param {Number} in_position - Position at which to start the removal\n\t * @param {Array | string} in_range - The array to overwrite\n\t */\n\t_dataArraySetRange(in_position, in_range) {\n\t\tthis._dataArrayRef.set(in_position, in_range);\n\t}\n\n\t/**\n\t * Get the scope to which this property belongs to.\n\t * @return {string|undefined} The guid representing the scope in which the\n\t * map belongs to. If there is a workspace scope return it, else return the scope of this array.\n\t * @override\n\t * @private\n\t */\n\t_getScope() {\n\t\tvar scope = AbstractStaticCollectionProperty.prototype._getScope.call(this);\n\n\t\treturn scope !== undefined ? scope : this._scope;\n\t}\n\n\t/**\n\t * returns the length of the current array property\n\t */\n\tget length() {\n\t\treturn this.getLength();\n\t}\n\tset length(len) {\n\t\tthrow new Error(MSG.MODIFY_READ_ONLY);\n\t}\n}\n\nArrayProperty.prototype._staticChildren = {};\nArrayProperty.prototype._context = \"array\";\n"]}
1
+ {"version":3,"file":"arrayProperty.js","sourceRoot":"","sources":["../../src/properties/arrayProperty.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview Definition of the array property class\n */\n\nconst {\n\tArrayChangeSetIterator,\n\tChangeSet,\n\tPathHelper,\n\tTypeIdHelper,\n} = require(\"@fluid-experimental/property-changeset\");\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst { UniversalDataArray, ConsoleUtils } = require(\"@fluid-experimental/property-common\");\nconst _ = require(\"lodash\");\nconst { cloneDeep: deepCopy } = _;\n\nconst { deserializeNonPrimitiveArrayElements } = require(\"../containerSerializer\");\nconst { validationsEnabled } = require(\"../enableValidations\");\n\nconst { AbstractStaticCollectionProperty } = require(\"./abstractStaticCollectionProperty\");\nconst { BaseProperty } = require(\"./baseProperty\");\nconst { LazyLoadedProperties: Property } = require(\"./lazyLoadedProperties\");\n\nvar MODIFIED_STATE_FLAGS = BaseProperty.MODIFIED_STATE_FLAGS;\n\n// Some global constant objects that are used to indicate a few special\n// cases for the dirty object. If there are no entries in the pending and\n// dirty changesets, but the array still has a pending or dirty state\n// flag we use these objects to indicate this state. This happens for custom\n// type array, for which the children have been changed.\n// By using these special objects we avoid the memory overhead of having a separate\n// object for each array in this state.\nvar DIRTY_AND_PENDING_CHILD_CHANGES = {\n\tpending: undefined,\n\tdirty: undefined,\n\tflags: MODIFIED_STATE_FLAGS.PENDING_CHANGE | MODIFIED_STATE_FLAGS.DIRTY,\n};\nvar PENDING_CHILD_CHANGES = {\n\tpending: undefined,\n\tdirty: undefined,\n\tflags: MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n};\nvar DIRTY_CHILD_CHANGES = {\n\tpending: undefined,\n\tdirty: undefined,\n\tflags: MODIFIED_STATE_FLAGS.DIRTY,\n};\nvar DIRTY_STATE_FLAGS_ARRAY = [\n\tundefined,\n\tPENDING_CHILD_CHANGES,\n\tDIRTY_CHILD_CHANGES,\n\tDIRTY_AND_PENDING_CHILD_CHANGES,\n];\n\nvar PATH_TOKENS = BaseProperty.PATH_TOKENS;\n\n/**\n * Given a list of non-overlapping, unordered segments, each identified by its start point and length,\n * this function computes the longest monotone, increasing sub-sequence of segments.\n *\n * Currently, this is O(n^2) in the worst case, it could be implemented in O(n log n), but I would have\n * to implement a binary search tree for this. If this becomes a bottle-neck, we should replace\n * the insertions and binary searches below, with a search tree.\n *\n * @param {Array.<number>} in_segmentStarts - The starting points of the segments\n * @param {Array.<number>} in_segmentLengths - The lengths of the segments\n *\n * @return {Array.<Number>} List of the selected segments, given as indices of the segments\n * @private\n */\nvar _getLongestIncreasingSubsequenceSegments = function (in_segmentStarts, in_segmentLengths) {\n\tif (in_segmentStarts.length === 0) {\n\t\treturn [];\n\t}\n\n\t// Contains the already found sub sequences, sorted by their length\n\t// in increasing order. These sub-sequences have the invariant that\n\t// the last entry in each of the sequences is smaller than the last\n\t// entry in longer sequences (so the list is also sorted according to\n\t// the sequenceLastEntry member of the structs)\n\tvar foundSubSequences = [];\n\n\tfor (var i = 0; i < in_segmentStarts.length; i++) {\n\t\tvar currentSegmentStart = in_segmentStarts[i];\n\n\t\t// Perform a binary search to find the largest entry in the list of found sub\n\t\t// sequences that has a sequenceEnd that is smaller or equal than currentSegmentStart\n\t\tvar index = _.sortedIndexBy(\n\t\t\tfoundSubSequences,\n\t\t\t{ sequenceLastEntry: currentSegmentStart },\n\t\t\t\"sequenceLastEntry\",\n\t\t);\n\t\tvar lastEntry = index > 0 ? foundSubSequences[index - 1] : undefined;\n\n\t\t// Create a new entry that is obtained by concatenating the longest sequence found so far\n\t\t// with the new segment\n\t\tvar newEntry = {\n\t\t\tsequenceLength: in_segmentLengths[i] + (lastEntry ? lastEntry.sequenceLength : 0),\n\t\t\tsegmentIndex: i,\n\t\t\tsequenceLastEntry: currentSegmentStart + in_segmentLengths[i] - 1,\n\t\t\tpreviousEntry: lastEntry,\n\t\t};\n\n\t\t// Search for the insertion position for this entry\n\t\tvar insertionPoint = _.sortedIndexBy(foundSubSequences, newEntry, \"sequenceLength\");\n\t\tif (\n\t\t\tfoundSubSequences[insertionPoint] !== undefined &&\n\t\t\tfoundSubSequences[insertionPoint].sequenceLength === newEntry.sequenceLength\n\t\t) {\n\t\t\tinsertionPoint++;\n\t\t}\n\n\t\t// We have to delete all entries from the foundSubSequences array, which\n\t\t// are shorter, but have a higher sequenceLastEntry (we can do that, since\n\t\t// it would be a better choice to use the new entry instead of these old\n\t\t// entries). This will preserve the invariant on the foundSubSequences\n\t\t// that they are sorted with respect to the sequenceLastEntry.\n\t\tvar lowerLengthBoundary = newEntry.sequenceLength - in_segmentLengths[i];\n\n\t\tvar j = insertionPoint - 1;\n\t\tfor (; j >= 0 && foundSubSequences[j].sequenceLength > lowerLengthBoundary; j--) {\n\t\t\tif (foundSubSequences[j].sequenceLastEntry >= newEntry.sequenceLastEntry) {\n\t\t\t\tfoundSubSequences.splice(j, 1);\n\t\t\t\tinsertionPoint--;\n\t\t\t}\n\t\t}\n\n\t\t// Insert the entry as a new entry into the list of subsequences\n\t\tfoundSubSequences.splice(insertionPoint, 0, newEntry); // TODO: this should be done via a binary tree\n\t}\n\n\t// This should always be the case, as we checked for empty inputs above\n\tConsoleUtils.assert(foundSubSequences.length > 0);\n\n\t// Extract the result\n\tvar longestSequence = [];\n\tvar currentSegment = _.last(foundSubSequences);\n\twhile (currentSegment) {\n\t\tlongestSequence.unshift(currentSegment.segmentIndex);\n\t\tcurrentSegment = currentSegment.previousEntry;\n\t}\n\n\treturn longestSequence;\n};\n\n/**\n * @internal\n */\nexport class ArrayProperty extends AbstractStaticCollectionProperty {\n\t/**\n\t * Default constructor for ArrayProperty\n\t * @param {Object} [in_params] - The parameters\n\t * @param {Number} [in_params.length = 0] - The length of the array, if applicable\n\t * @param {string} [in_scope] - The scope in which the property typeid is defined\n\t * @protected\n\t */\n\tconstructor(in_params, in_scope) {\n\t\tsuper(in_params);\n\t\tvar length = in_params.size || in_params.length || 0;\n\n\t\t// changesets\n\t\tthis._dirty = undefined;\n\n\t\t// We only need the scope for custom type array properties\n\t\tif (!this._isPrimitive) {\n\t\t\tthis._scope = in_scope;\n\t\t}\n\n\t\tthis._dataArrayCreate(length);\n\t}\n\n\t/**\n\t * Returns the path segment for a child\n\t *\n\t * @param {property-properties.BaseProperty} in_childNode - The child for which the path is returned\n\t *\n\t * @return {string|undefined} The path segment to resolve the child property under this property\n\t * @protected\n\t */\n\t_getPathSegmentForChildNode(in_childNode) {\n\t\tvar index = this._dataArrayGetBuffer().indexOf(in_childNode);\n\t\tif (index === -1) {\n\t\t\tthrow new Error(MSG.GET_PATH_SEGMENT_CALLED_FOR_NON_ENTRY);\n\t\t}\n\n\t\treturn \"[\" + index + \"]\";\n\t}\n\n\t/**\n\t * Resolves a direct child node based on the given path segment\n\t *\n\t * @param {String} in_segment - The path segment to resolve\n\t * @param {property-properties.PathHelper.TOKEN_TYPES} in_segmentType - The type of segment in the tokenized path\n\t *\n\t * @return {BaseProperty | undefined} The child property that has been resolved\n\t * @protected\n\t */\n\t_resolvePathSegment(in_segment, in_segmentType) {\n\t\t// Base Properties only support paths separated via dots\n\t\tif (in_segmentType === PathHelper.TOKEN_TYPES.ARRAY_TOKEN) {\n\t\t\tvar index = Math.floor(in_segment);\n\n\t\t\t// Specifying a non-integer index is regarded a mal-formed path and thus throws an exception\n\t\t\tif (!isFinite(index)) {\n\t\t\t\t// eslint-disable-next-line unicorn/prefer-type-error\n\t\t\t\tthrow new Error(MSG.INVALID_NON_NUMERIC_SEGMENT_IN_PATH + in_segment);\n\t\t\t}\n\n\t\t\t// Accessing an entry outside of the array is just a non existing property and thus\n\t\t\t// returns undefined\n\t\t\tif (index < 0 || index >= this._dataArrayGetLength()) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn this._dataArrayGetValue(index);\n\t\t} else {\n\t\t\treturn AbstractStaticCollectionProperty.prototype._resolvePathSegment.call(\n\t\t\t\tthis,\n\t\t\t\tin_segment,\n\t\t\t\tin_segmentType,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Insert into the array at a given position.\n\t * It will not overwrite the existing values, it will push them to the right.\n\t * @param {number} in_position - Target index\n\t * @param {*} in_value - Inserted value or property\n\t * @throws if in_position is smaller than zero, larger than the length of the array or not a number.\n\t * @throws if trying to insert a property that already has a parent.\n\t * @throws if trying to modify a referenced property.\n\t * @throws if trying to insert a property that is a root property\n\t */\n\tinsert(in_position, in_value) {\n\t\tthis.insertRange(in_position, [in_value]);\n\t}\n\n\t/**\n\t * Is this property a leaf node with regard to flattening?\n\t *\n\t * TODO: Which semantics should flattening have? It stops at primitive types and collections?\n\t *\n\t * @return {boolean} True if it is a leaf with regard to flattening?\n\t */\n\t_isFlattenLeaf() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * Add one or more values at the end of the array\n\t * @param {Array<property-properties.BaseProperty>|property-properties.BaseProperty|*|Array<*>} in_values - The\n\t * item or items to be pushed (either properties or values). If an array is passed, .push\n\t * will be called on each item in the array.\n\t * @throws if trying to push a property that is a root property\n\t * @return {number} new length of the array\n\t */\n\tpush(in_values) {\n\t\tif (_.isArray(in_values)) {\n\t\t\tthis.insertRange(this._dataArrayGetLength(), in_values);\n\t\t} else {\n\t\t\tthis.insertRange(this._dataArrayGetLength(), [in_values]);\n\t\t}\n\t\treturn this._dataArrayGetLength();\n\t}\n\n\t/**\n\t * Add elements to the end of the queue (array)\n\t */\n\tenqueue(...args) {\n\t\treturn this.push(...args);\n\t}\n\n\t/**\n\t * Add a value at the front of the array or letters to the beginning of a string (for StringProperty)\n\t * It can also add multiple values to an array if you pass in an array of values.\n\t * @param {Array<*>|*|Array<property-properties.BaseProperty>|property-properties.BaseProperty} in_values - The values\n\t * or properties to be pushed\n\t * @throws if trying to insert a property that already has a parent.\n\t * @throws if trying to insert a root property\n\t * @throws if trying to modify a referenced property.\n\t * @return {number} new length of the array\n\t */\n\tunshift(in_values) {\n\t\tif (_.isArray(in_values)) {\n\t\t\tthis.insertRange(0, in_values);\n\t\t} else {\n\t\t\tthis.insertRange(0, [in_values]);\n\t\t}\n\t\treturn this._dataArrayGetLength();\n\t}\n\n\t/**\n\t * Removes an element of the array (or a letter in a StringProperty) and shifts remaining elements to the left\n\t * E.g. [1, 2, 3] .remove(1) => [1, 3]\n\t * E.g. (StringProperty) 'ABCDE' .remove(1) => 'ACDE'\n\t * @param {number} in_position - The index that will be removed\n\t * @throws if in_position is not a number\n\t * @throws if trying to remove something that does not exist\n\t * @throws if trying to remove an item with a parent\n\t * @return {property-properties.BaseProperty | * } the value that was removed.\n\t */\n\tremove(in_position) {\n\t\tvar value = this.get(in_position);\n\t\tthis.removeRange(in_position, 1);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Removes the last element of the array or the last letter of a string (for StringProperty)\n\t * @throws if trying to modify a referenced property\n\t * @return {property-properties.BaseProperty|*} deleted element.\n\t */\n\tpop() {\n\t\tif (this._dataArrayGetLength() > 0) {\n\t\t\tvar item = this.get(this._dataArrayGetLength() - 1, {\n\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t});\n\t\t\tthis.remove(this._dataArrayGetLength() - 1);\n\t\t\treturn item;\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Removes an element from the front of the array or a letter from the beginning of a string (for StringProperty)\n\t * @return {*|property-properties.BaseProperty} the element removed.\n\t */\n\tshift() {\n\t\tif (this._dataArrayGetLength() > 0) {\n\t\t\tvar item = this.get(0, {\n\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t});\n\t\t\tthis.remove(0);\n\t\t\treturn item;\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Removes elements from the front of the queue (array)\n\t */\n\tdequeue() {\n\t\treturn this.shift();\n\t}\n\n\t/**\n\t * Change an existing element of the array. This will overwrite an existing element.\n\t * E.g. [1, 2, 3] .set(1, 8) => [1, 8, 3]\n\t * @param {number} in_position - The target index\n\t * @param {*} in_value - The new property or value\n\t * @throws if in_position is not a number\n\t * @throws if in_position is smaller than zero\n\t */\n\tset(in_position, in_value) {\n\t\tif (_.isArray(in_value)) {\n\t\t\tthrow new TypeError(MSG.ARRAY_SET_ONE_ELEMENT + in_value);\n\t\t}\n\t\tthis.setRange(in_position, [in_value]);\n\t}\n\n\t/**\n\t * Sets the values of items in the array.\n\t * If values are typed, iterates through the values and creates a property with the defined type and value.\n\t *\n\t * See {@link ArrayProperty.setValues}\n\t *\n\t * @param {Array | string} in_values - The list of typed values.\n\t * @param {boolean} in_typed - Whether the values are typed/polymorphic.\n\t * @param {boolean} in_initial - Whether we are setting default/initial values\n\t * or if the function is called directly with the values to set.\n\t * @protected\n\t * @override\n\t */\n\t_setValues(in_values, in_typed, in_initial) {\n\t\tif (in_typed) {\n\t\t\tif (!this._isPrimitive) {\n\t\t\t\tConsoleUtils.assert(\n\t\t\t\t\t_.isArray(in_values),\n\t\t\t\t\tMSG.IN_ARRAY_NOT_ARRAY + \"ArrayProperty._setValues\",\n\t\t\t\t);\n\n\t\t\t\tvar arr = [];\n\t\t\t\tfor (var i = 0; i < in_values.length; i++) {\n\t\t\t\t\tvar prop = in_values[i];\n\n\t\t\t\t\tprop =\n\t\t\t\t\t\tin_values[i] instanceof BaseProperty\n\t\t\t\t\t\t\t? in_values[i]\n\t\t\t\t\t\t\t: Property.PropertyFactory._createProperty(\n\t\t\t\t\t\t\t\t\tin_values[i].typeid || this._typeid,\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\tin_values[i].value,\n\t\t\t\t\t\t\t\t\tthis._getScope(),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\tarr.push(prop);\n\t\t\t\t}\n\n\t\t\t\tthis._setValuesInternal(arr);\n\t\t\t} else {\n\t\t\t\tAbstractStaticCollectionProperty.prototype._setValues.call(\n\t\t\t\t\tthis,\n\t\t\t\t\tin_values,\n\t\t\t\t\tin_typed,\n\t\t\t\t\tin_initial,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._setValuesInternal(in_values);\n\t\t}\n\t}\n\n\t/**\n\t * See {@link ArrayProperty.setValues}\n\t *\n\t * @param {Array | string} in_values - an array or object containing the values to be set.\n\t */\n\t_setValuesInternal(in_values) {\n\t\tthis._checkIsNotReadOnly(true);\n\n\t\tif (!this._isPrimitive) {\n\t\t\tif (_.isArray(in_values)) {\n\t\t\t\tthis.clear();\n\t\t\t\tthis.insertRange(0, in_values);\n\t\t\t} else {\n\t\t\t\tAbstractStaticCollectionProperty.prototype.setValues.call(this, in_values);\n\t\t\t}\n\t\t} else {\n\t\t\tif (_.isArray(in_values)) {\n\t\t\t\tif (in_values.length < this._dataArrayGetLength()) {\n\t\t\t\t\tthis.removeRange(in_values.length, this._dataArrayGetLength() - in_values.length);\n\t\t\t\t}\n\t\t\t\tthis.setRange(0, in_values.slice(0, this._dataArrayGetLength()));\n\t\t\t\tif (in_values.length > this._dataArrayGetLength()) {\n\t\t\t\t\tthis.insertRange(\n\t\t\t\t\t\tthis._dataArrayGetLength(),\n\t\t\t\t\t\tin_values.slice(this._dataArrayGetLength()),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar that = this;\n\t\t\t\tvar maxIndex = this._dataArrayGetLength() - 1;\n\t\t\t\t_.each(in_values, function (value, index) {\n\t\t\t\t\tif (index > maxIndex) {\n\t\t\t\t\t\tthat.insert(index, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (that._dataArrayGetValue(index) !== value) {\n\t\t\t\t\t\t\tthat.set(index, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sets the values of items in the array.\n\t * If called using an array (e.g. setValues([prop1, prop2])), it will overwrite the whole array.\n\t * If called using an object with indexes (e.g. setValues{0: prop1}), it will only overwrite the\n\t * items at those indexes.\n\t * For arrays of Properties, this can be used to set nested values in properties found in the array.\n\t * For example: setValues({0: {position: {x: 2, y:3}}});\n\t * @param {Array | string} in_values - An array or object containing the values to be set.\n\t * @throws if one of the path in in_values does not correspond to a path in the property\n\t */\n\tsetValues(in_values) {\n\t\tvar checkoutView = this._getCheckoutView();\n\t\tif (checkoutView !== undefined) {\n\t\t\tcheckoutView.pushNotificationDelayScope();\n\t\t\tArrayProperty.prototype._setValues.call(this, in_values, false, false);\n\t\t\tcheckoutView.popNotificationDelayScope();\n\t\t} else {\n\t\t\tArrayProperty.prototype._setValues.call(this, in_values, false, false);\n\t\t}\n\t}\n\n\t/**\n\t * Deletes all values from an array\n\t */\n\tclear() {\n\t\tif (this.getLength()) {\n\t\t\tthis.removeRange(0, this.getLength());\n\t\t}\n\t}\n\n\t/**\n\t * @return {Array<*> | String} all values in the ArrayProperty\n\t * If called on StringProperty, it returns the whole string\n\t * WARNING: the returned array must be read only, data written to it\n\t * will get lost.\n\t */\n\tgetEntriesReadOnly() {\n\t\treturn this._dataArrayGetBuffer();\n\t}\n\n\t/**\n\t * Private helper function to update the internal dirty and pending changes\n\t * is overwritten by StringProperty\n\t *\n\t * @param {property-properties.SerializedChangeSet} in_changeSet - The changeset to apply\n\t * @private\n\t */\n\t_updateChanges(in_changeSet) {\n\t\tvar pendingChanges = this._getPendingChanges();\n\t\tChangeSet.prototype._performApplyAfterOnPropertyArray(\n\t\t\tpendingChanges,\n\t\t\tin_changeSet,\n\t\t\tthis.getFullTypeid(true),\n\t\t);\n\n\t\tvar dirtyChanges = this._getDirtyChanges();\n\t\tChangeSet.prototype._performApplyAfterOnPropertyArray(\n\t\t\tdirtyChanges,\n\t\t\tin_changeSet,\n\t\t\tthis.getFullTypeid(true),\n\t\t);\n\n\t\tthis._setChanges(pendingChanges, dirtyChanges);\n\t}\n\n\t/**\n\t * Returns the pending changeset for this object\n\t * @return {property-properties.SerializedChangeSet} The pending changes\n\t */\n\t_getPendingChanges() {\n\t\treturn (this._dirty && this._dirty.pending) || {};\n\t}\n\n\t/**\n\t * Returns the dirty changeset for this object\n\t * @return {property-properties.SerializedChangeSet} The dirty changes\n\t */\n\t_getDirtyChanges() {\n\t\treturn (this._dirty && this._dirty.dirty) || {};\n\t}\n\n\t/**\n\t * Sets the pending and dirty changesets\n\t *\n\t * @param {property-properties.SerializedChangeSet|undefined|null} in_pending - The pending changeset. If null is\n\t * passed, no change will be applied. undefined indicates that the changes should be reset\n\t * @param {property-properties.SerializedChangeSet|undefined|null} in_dirty - The dirty changeset. If null is\n\t * passed, no change will be applied. undefined indicates that the changes should be reset\n\t */\n\t_setChanges(in_pending, in_dirty) {\n\t\tvar oldFlags = this._dirty ? this._dirty.flags : 0;\n\n\t\tif (this._dirty && this._dirty === DIRTY_STATE_FLAGS_ARRAY[this._dirty.flags]) {\n\t\t\tthis._dirty = undefined;\n\t\t}\n\n\t\tif (in_pending !== null) {\n\t\t\tif (!_.isEmpty(in_pending)) {\n\t\t\t\tthis._dirty = this._dirty || {};\n\t\t\t\tthis._dirty.pending = in_pending;\n\t\t\t} else if (this._dirty) {\n\t\t\t\tthis._dirty.pending = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (in_dirty !== null) {\n\t\t\tif (!_.isEmpty(in_dirty)) {\n\t\t\t\tthis._dirty = this._dirty || {};\n\t\t\t\tthis._dirty.dirty = in_dirty;\n\t\t\t} else if (this._dirty) {\n\t\t\t\tthis._dirty.dirty = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (this._dirty) {\n\t\t\tif (this._dirty.dirty === undefined && this._dirty.pending === undefined) {\n\t\t\t\tthis._dirty = oldFlags === 0 ? undefined : DIRTY_STATE_FLAGS_ARRAY[oldFlags];\n\t\t\t} else {\n\t\t\t\tthis._dirty.flags = oldFlags;\n\t\t\t}\n\t\t} else if (oldFlags) {\n\t\t\tthis._dirty = DIRTY_STATE_FLAGS_ARRAY[oldFlags];\n\t\t}\n\t}\n\n\t/**\n\t * Sets the dirty flags for this property\n\t * @param {Number} in_flags - The dirty flags\n\t */\n\t_setDirtyFlags(in_flags) {\n\t\tif (this._dirty) {\n\t\t\tif (this._dirty !== DIRTY_STATE_FLAGS_ARRAY[this._dirty.flags]) {\n\t\t\t\tthis._dirty.flags = in_flags;\n\n\t\t\t\tif (\n\t\t\t\t\tthis._dirty.dirty === undefined &&\n\t\t\t\t\tthis._dirty.pending === undefined &&\n\t\t\t\t\t(this._dirty.flags === 0 || this._dirty.flags === undefined)\n\t\t\t\t) {\n\t\t\t\t\tthis._dirty = undefined;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._dirty = DIRTY_STATE_FLAGS_ARRAY[in_flags];\n\t\t\t}\n\t\t} else {\n\t\t\tthis._dirty = DIRTY_STATE_FLAGS_ARRAY[in_flags];\n\t\t}\n\t}\n\n\t/**\n\t * Gets the dirty flags for this property\n\t * @return {Number} The dirty flags\n\t */\n\t_getDirtyFlags() {\n\t\tif (this._dirty === undefined) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn this._dirty.flags;\n\t}\n\n\t/**\n\t * Inserts the content of a given array into the array property\n\t * It will not overwrite the existing values but push them to the right instead.\n\t * E.g. [1, 2, 3] .insertRange(1, [9, 8]) => [1, 9, 8, 2, 3]\n\t * @param {number} in_offset - Target index\n\t * @param {Array<*>} in_array - The array to be inserted\n\t * @throws if in_offset is smaller than zero, larger than the length of the array or not a number.\n\t * @throws if trying to insert a property that already has a parent.\n\t * @throws if trying to modify a referenced property.\n\t * @throws if trying to insert a property that is not an array.\n\t * @throws if trying to insert a root property.\n\t */\n\tinsertRange(in_offset, in_array) {\n\t\tif (!_.isArray(in_array)) {\n\t\t\tthrow new TypeError(MSG.IN_ARRAY_NOT_ARRAY + \"ArrayProperty.insertRange\");\n\t\t}\n\n\t\tif (validationsEnabled.enabled) {\n\t\t\tfor (var i = 0; i < in_array.length; i++) {\n\t\t\t\tif (in_array[i] instanceof BaseProperty) {\n\t\t\t\t\tin_array[i]._validateInsertIn(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._checkIsNotReadOnly(true);\n\t\t}\n\t\tthis._insertRangeWithoutDirtying(in_offset, in_array);\n\t\tthis._setDirty();\n\t}\n\n\t/**\n\t * inserts the content of a given array, but doesn't dirty the property\n\t * this is useful for batch changes\n\t * @param {number} in_offset - Target index\n\t * @param {Array<*>} in_array - The array to be inserted\n\t * @param {Boolean=} [in_setParents=true] - If true, set parent of inserted properties.\n\t * If false, caller has already set parents.\n\t * @private\n\t */\n\t_insertRangeWithoutDirtying(in_offset, in_array, in_setParents) {\n\t\tif (in_setParents === undefined) {\n\t\t\tin_setParents = true;\n\t\t}\n\t\tif (in_offset < 0 || in_offset > this.length || !_.isNumber(in_offset)) {\n\t\t\tthrow Error(MSG.START_OFFSET_INVALID + in_offset);\n\t\t}\n\t\tif (in_setParents && !this._isPrimitive) {\n\t\t\tvar arr = [];\n\t\t\tfor (var i = 0; i < in_array.length; ++i) {\n\t\t\t\tvar prop = in_array[i];\n\t\t\t\tif (!(in_array[i] instanceof BaseProperty)) {\n\t\t\t\t\tprop = Property.PropertyFactory._createProperty(\n\t\t\t\t\t\tthis._typeid,\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tin_array[i],\n\t\t\t\t\t\tthis._getScope(),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (prop.getParent()) {\n\t\t\t\t\tthrow new Error(MSG.NO_INSERT_WITH_PARENT);\n\t\t\t\t} else {\n\t\t\t\t\tprop._setParent(this);\n\t\t\t\t}\n\t\t\t\tarr.push(prop);\n\t\t\t}\n\n\t\t\tin_array = arr;\n\t\t}\n\t\tthis._dataArrayInsertRange(in_offset, in_array);\n\n\t\t// Insert entry into changesets\n\t\tvar changeSet = {\n\t\t\tinsert: [[in_offset, this._serializeArray(in_array)]],\n\t\t};\n\t\tthis._updateChanges(changeSet);\n\t}\n\n\t/**\n\t * Removes a given number of elements from the array property (or given number of letters from a StringProperty)\n\t * and shifts remaining values to the left.\n\t * E.g. [1, 2, 3, 4, 5] .removeRange(1, 3) => [1, 5]\n\t * @param {number} in_offset - Target start index\n\t * @param {number} in_deleteCount - number of elements to be deleted\n\t * @throws if in_offset is not a number\n\t * @throws if in_deleteCount is not a number\n\t * @throws if trying to remove an item with a parent\n\t * @throws if in_offset is smaller than zero or if in_offset + in_delete count is larger than the length of the array\n\t * @return {Array | string} an array containing the values or\n\t * properties removed.\n\t */\n\tremoveRange(in_offset, in_deleteCount) {\n\t\tConsoleUtils.assert(\n\t\t\t_.isNumber(in_offset),\n\t\t\tMSG.NOT_NUMBER + \"in_offset, method: ArrayProperty.removeRange or .remove\",\n\t\t);\n\t\tConsoleUtils.assert(\n\t\t\t_.isNumber(in_deleteCount),\n\t\t\tMSG.NOT_NUMBER + \"in_deleteCount, method: ArrayProperty.removeRange or .remove\",\n\t\t);\n\t\tConsoleUtils.assert(\n\t\t\tin_offset + in_deleteCount < this.length + 1 && in_offset >= 0 && in_deleteCount > 0,\n\t\t\tMSG.REMOVE_OUT_OF_BOUNDS +\n\t\t\t\t\"Cannot remove \" +\n\t\t\t\tin_deleteCount +\n\t\t\t\t\" items starting at index \" +\n\t\t\t\tin_offset,\n\t\t);\n\t\tvar result = [];\n\t\tfor (var i = in_offset; i < in_offset + in_deleteCount; i++) {\n\t\t\tresult.push(this.get(i));\n\t\t}\n\t\tthis._checkIsNotReadOnly(true);\n\t\tthis._removeRangeWithoutDirtying(in_offset, in_deleteCount);\n\t\tthis._setDirty();\n\t\treturn result;\n\t}\n\n\t/**\n\t * removes a given number of elements from the array property, and ensures, if this is not\n\t * a primitive array, that any existing properties have their parent pointer cleared.\n\t * @param {number} in_offset - Target start index\n\t * @param {number} in_deleteCount - number of elements to be deleted\n\t * @private\n\t */\n\t_clearRange(in_offset, in_deleteCount) {\n\t\tif (!this._isPrimitive) {\n\t\t\tfor (var i = 0; i < in_deleteCount; ++i) {\n\t\t\t\tif (this._dataArrayGetValue(in_offset + i).getParent() !== this) {\n\t\t\t\t\tthrow new Error(MSG.CANNOT_REMOVE_WITH_DIFFERENT_PARENT);\n\t\t\t\t} else {\n\t\t\t\t\tthis._dataArrayGetValue(in_offset + i)._setParent(undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._dataArrayRemoveRange(in_offset, in_deleteCount);\n\t}\n\n\t/**\n\t * removes a given number of elements from the array property, but doesn't dirty the property\n\t * this is useful for batch changes\n\t * @param {number} in_offset - Target start index\n\t * @param {number} in_deleteCount - number of elements to be deleted\n\t * @private\n\t */\n\t_removeRangeWithoutDirtying(in_offset, in_deleteCount) {\n\t\tthis._clearRange(in_offset, in_deleteCount);\n\n\t\t// Insert entry into changesets\n\t\tvar changeSet = {\n\t\t\tremove: [[in_offset, in_deleteCount]],\n\t\t};\n\t\tthis._updateChanges(changeSet);\n\t}\n\n\t/**\n\t * Sets the array properties elements to the content of the given array\n\t * All changed elements must already exist. This will overwrite existing elements.\n\t * E.g. [1, 2, 3, 4, 5] .setRange(1, [7, 8]) => [1, 7, 8, 4, 5]\n\t * @param {number} in_offset - Target start index\n\t * @param {Array<*>|Array<property-properties.BaseProperty>} in_array - contains the elements to be set\n\t * @throws if in_offset is not a number\n\t * @throws if in_offset is smaller than zero or higher than the length of the array\n\t */\n\tsetRange(in_offset, in_array) {\n\t\tif (!_.isArray(in_array) && !_.isString(in_array)) {\n\t\t\tthrow new TypeError(MSG.IN_ARRAY_NOT_ARRAY + \"ArrayProperty.setRange\");\n\t\t}\n\t\tin_offset = Math.floor(in_offset);\n\t\tif (!isFinite(in_offset)) {\n\t\t\t// eslint-disable-next-line unicorn/prefer-type-error\n\t\t\tthrow new Error(MSG.NOT_NUMBER + \"in_offset, method: ArrayProperty.setRange or .set\");\n\t\t}\n\t\tConsoleUtils.assert(\n\t\t\tin_offset >= -1 && in_offset + in_array.length <= this.getLength(),\n\t\t\tMSG.SET_OUT_OF_BOUNDS +\n\t\t\t\t\"Cannot set \" +\n\t\t\t\tin_array.length +\n\t\t\t\t\" items starting at index \" +\n\t\t\t\tin_offset +\n\t\t\t\t\". Array length: \" +\n\t\t\t\tthis.getLength(),\n\t\t);\n\t\tthis._checkIsNotReadOnly(true);\n\t\tthis._setRangeWithoutDirtying(in_offset, in_array);\n\t\tthis._setDirty();\n\t}\n\n\t/**\n\t * sets the array properties elements to the content of the given array\n\t * all changed elements must already exist. This version doesn't dirty the property,\n\t * which is useful for batch changes\n\t * @param {number} in_offset - Target start index\n\t * @param {Array<*>} in_array - contains the elements to be set\n\t */\n\t_setRangeWithoutDirtying(in_offset, in_array) {\n\t\tthis._modifyRangeWithoutDirtying(in_offset, in_array);\n\t}\n\n\t/**\n\t * sets the array properties elements to the content of the given array\n\t * all changed elements must already exist. This version doesn't dirty the property,\n\t * which is useful for batch changes\n\t * @param {number} in_offset - Target start index\n\t * @param {Array<*>} in_array - contains the elements to be set\n\t */\n\t_modifyRangeWithoutDirtying(in_offset, in_array) {\n\t\t// Has to be overloaded for arrays of properties!\n\t\tif (in_offset < 0) {\n\t\t\tthrow Error(MSG.START_OFFSET_NEGATIVE + in_offset);\n\t\t}\n\t\tvar changeSet = {};\n\t\tvar changeArray = [];\n\n\t\tif (!this._isPrimitive) {\n\t\t\t// for custom array properties, we have to do a remove/insert instead:\n\t\t\tthis._removeRangeWithoutDirtying(in_offset, in_array.length);\n\t\t\tthis._insertRangeWithoutDirtying(in_offset, in_array);\n\t\t} else {\n\t\t\t// does the reference array property not have a _dataArrayRef ??\n\t\t\t// go through all the elements of in_array to check if the content of the given array\n\t\t\t// is same as value of the array properties. If the values are same, we don't change it.\n\t\t\t// Otherwise, we set them and generate corresponding changeset.\n\t\t\tvar j;\n\t\t\tfor (var i = 0; i < in_array.length; i++) {\n\t\t\t\tif (this._dataArrayGetValue(in_offset + i) !== in_array[i]) {\n\t\t\t\t\tfor (j = i + 1; j < in_array.length; j++) {\n\t\t\t\t\t\tif (this._dataArrayGetValue(in_offset + j) === in_array[j]) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._dataArraySetRange(in_offset + i, in_array.slice(i, j));\n\t\t\t\t\tchangeArray.push([in_offset + i, this._serializeArray(in_array.slice(i, j))]);\n\t\t\t\t\ti = j;\n\t\t\t\t}\n\t\t\t}\n\t\t\tchangeSet[\"modify\"] = changeArray;\n\t\t\tthis._updateChanges(changeSet);\n\t\t}\n\t}\n\n\t/**\n\t * Returns the name of all the sub-properties of this property.\n\t * Numerical indexes from the array will be returned as strings.\n\t * E.g. ['0', '1', '2']\n\t *\n\t * @return {Array.<string>} An array of all the property ids\n\t */\n\tgetIds() {\n\t\treturn Object.keys(this._dataArrayGetBuffer());\n\t}\n\n\t/**\n\t * Checks whether a property or data exists at the given position.\n\t *\n\t * @param {string} in_position - index of the property\n\t * @return {boolean} True if the property or data exists. Otherwise false.\n\t */\n\thas(in_position) {\n\t\treturn this._dataArrayGetBuffer()[in_position] !== undefined;\n\t}\n\n\t/**\n\t * Gets the array element at a given index\n\t * @param {number | Array<string | number>} in_position - The target index if an array is passed, elements in the\n\t * array will be treated as part of a path. The first item in an array should be a position in the array. For\n\t * example, .get([0,'position','x']) is the equivalent of .get(0).get('position').get('x') If it encounters a\n\t * ReferenceProperty, .get will, by default, resolve the property it refers to.\n\t * @param {Object} in_options - Parameter object\n\t * @param {property-properties.BaseProperty.REFERENCE_RESOLUTION} [in_options.referenceResolutionMode=ALWAYS] - How\n\t * should this function behave during reference resolution?\n\t * @throws if in_position is an array and the first item in the array is not a number\n\t * @throws if in_position is neither an array nor a number.\n\t * @throws if in_position is smaller than zero or larger than the length of the array.\n\t * @return {* | property-properties.BaseProperty | undefined} The element at that index - either a property or a\n\t * value. or undefined if nothing was found.\n\t */\n\tget(in_position, in_options) {\n\t\tin_options = in_options || {};\n\t\tin_options.referenceResolutionMode =\n\t\t\tin_options.referenceResolutionMode === undefined\n\t\t\t\t? BaseProperty.REFERENCE_RESOLUTION.ALWAYS\n\t\t\t\t: in_options.referenceResolutionMode;\n\t\tvar prop = this;\n\t\tif (_.isArray(in_position)) {\n\t\t\tvar iterationStart = 0;\n\t\t\tvar prop = this;\n\t\t\tif (in_position[0] === PATH_TOKENS.UP) {\n\t\t\t\tprop = prop.getParent();\n\t\t\t\titerationStart = 1;\n\t\t\t} else if (in_position[0] === PATH_TOKENS.ROOT) {\n\t\t\t\tprop = prop.getRoot();\n\t\t\t\titerationStart = 1;\n\t\t\t} else {\n\t\t\t\tvar pos = Math.floor(in_position[0]);\n\t\t\t\tConsoleUtils.assert(isFinite(pos), MSG.FIRST_ITEM_MUST_BE_NUMBER);\n\t\t\t\tvar mode = in_options.referenceResolutionMode;\n\t\t\t\tConsoleUtils.assert(\n\t\t\t\t\tpos >= 0 && pos < this.getLength(),\n\t\t\t\t\tMSG.GET_OUT_OF_RANGE + in_position[0],\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (var i = iterationStart; i < in_position.length && prop; i++) {\n\t\t\t\tif (\n\t\t\t\t\tin_options.referenceResolutionMode === BaseProperty.REFERENCE_RESOLUTION.NO_LEAFS\n\t\t\t\t) {\n\t\t\t\t\tmode =\n\t\t\t\t\t\ti !== in_position.length - 1\n\t\t\t\t\t\t\t? BaseProperty.REFERENCE_RESOLUTION.ALWAYS\n\t\t\t\t\t\t\t: BaseProperty.REFERENCE_RESOLUTION.NEVER;\n\t\t\t\t}\n\t\t\t\tif (in_position[i + 1] === PATH_TOKENS.REF) {\n\t\t\t\t\tmode = BaseProperty.REFERENCE_RESOLUTION.NEVER;\n\t\t\t\t}\n\t\t\t\tprop = prop.get(in_position[i], { referenceResolutionMode: mode });\n\t\t\t\tif (prop === undefined && i < in_position.length - 1) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn prop;\n\t\t}\n\n\t\tswitch (in_position) {\n\t\t\tcase PATH_TOKENS.ROOT: {\n\t\t\t\treturn prop.getRoot();\n\t\t\t}\n\t\t\tcase PATH_TOKENS.UP: {\n\t\t\t\treturn prop.getParent();\n\t\t\t}\n\t\t\tcase PATH_TOKENS.REF: {\n\t\t\t\tthrow new Error(MSG.NO_GET_DEREFERENCE_ONLY);\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tvar pos = Math.floor(in_position);\n\t\t\t\tConsoleUtils.assert(isFinite(pos), MSG.IN_POSITION_MUST_BE_NUMBER);\n\t\t\t\tvar result = this._dataArrayGetValue(pos);\n\t\t\t\tif (in_options.referenceResolutionMode === BaseProperty.REFERENCE_RESOLUTION.ALWAYS) {\n\t\t\t\t\tif (result instanceof Property.ReferenceProperty) {\n\t\t\t\t\t\tresult = result.ref;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns an object with all the nested values contained in this property\n\t * @return { Array } an array of objects or values representing the values of your property.\n\t * For example:\n\t *\n\t * ```json\n\t * [\n\t * {\n\t * position: {\n\t * x: 2,\n\t * y: 5\n\t * }\n\t * },\n\t * {\n\t * position: {\n\t * x: 1,\n\t * y: -8\n\t * }\n\t * }\n\t * ]\n\t * ```\n\t *\n\t * or for a Value Array: `[1, 3, 6]`\n\t */\n\tgetValues() {\n\t\tvar result = [];\n\t\tvar ids = this.getIds();\n\t\tfor (var i = 0; i < ids.length; i++) {\n\t\t\tvar child = this.get(ids[i]);\n\t\t\tresult.push(child.getValues());\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * @return {Number} the current length of the array\n\t */\n\tgetLength() {\n\t\treturn this._dataArrayGetLength();\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\t_applyChangeset(in_changeSet, in_reportToView) {\n\t\tthis._checkIsNotReadOnly(false);\n\n\t\t// Iterator to process the changes in the ChangeSet in the correct order\n\t\tvar arrayIterator = new ArrayChangeSetIterator(in_changeSet);\n\n\t\tif (!this._isPrimitive) {\n\t\t\t// Successively apply the changes from the changeSet\n\t\t\twhile (!arrayIterator.atEnd()) {\n\t\t\t\tswitch (arrayIterator.opDescription.type) {\n\t\t\t\t\tcase ArrayChangeSetIterator.types.INSERT:\n\t\t\t\t\t\t// Handle inserts\n\t\t\t\t\t\tvar propertyDescriptions = arrayIterator.opDescription.operation[1];\n\t\t\t\t\t\tvar insertedPropertyInstances = [];\n\t\t\t\t\t\tvar scope = this._getScope();\n\t\t\t\t\t\tfor (var i = 0; i < propertyDescriptions.length; ++i) {\n\t\t\t\t\t\t\tvar createdProperty = Property.PropertyFactory._createProperty(\n\t\t\t\t\t\t\t\tpropertyDescriptions[i][\"typeid\"],\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tscope,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// Set parent so scope is defined for deserialization\n\t\t\t\t\t\t\tcreatedProperty._setParent(this);\n\t\t\t\t\t\t\tcreatedProperty._deserialize(propertyDescriptions[i], false);\n\t\t\t\t\t\t\tinsertedPropertyInstances.push(createdProperty);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._insertRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tthis._deserializeArray(insertedPropertyInstances),\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ArrayChangeSetIterator.types.REMOVE:\n\t\t\t\t\t\t// Handle removes\n\t\t\t\t\t\tvar numRemoved = arrayIterator.opDescription.operation[1];\n\t\t\t\t\t\tif (!_.isNumber(numRemoved)) {\n\t\t\t\t\t\t\tnumRemoved = numRemoved.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._removeRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tnumRemoved,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ArrayChangeSetIterator.types.MODIFY:\n\t\t\t\t\t\t// Handle modifies\n\t\t\t\t\t\tvar propertyDescriptions = arrayIterator.opDescription.operation[1];\n\t\t\t\t\t\tvar startIndex =\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset;\n\t\t\t\t\t\tfor (var i = 0; i < propertyDescriptions.length; ++i) {\n\t\t\t\t\t\t\tvar modifiedProperty = this.get(startIndex + i, {\n\t\t\t\t\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (!modifiedProperty) {\n\t\t\t\t\t\t\t\tthrow new Error(MSG.INDEX_INVALID + (startIndex + i));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmodifiedProperty._applyChangeset(propertyDescriptions[i], false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"applyChangeset: \" + MSG.UNKNOWN_OPERATION + arrayIterator.opDescription.type,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tarrayIterator.next();\n\t\t\t}\n\t\t} else {\n\t\t\t// Successively apply the changes from the changeSet\n\t\t\twhile (!arrayIterator.atEnd()) {\n\t\t\t\tswitch (arrayIterator.opDescription.type) {\n\t\t\t\t\tcase ArrayChangeSetIterator.types.INSERT:\n\t\t\t\t\t\t// Handle inserts\n\t\t\t\t\t\tthis._insertRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tthis._deserializeArray(arrayIterator.opDescription.operation[1]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ArrayChangeSetIterator.types.REMOVE:\n\t\t\t\t\t\t// Handle removes\n\t\t\t\t\t\tvar removeLength = arrayIterator.opDescription.operation[1];\n\t\t\t\t\t\tif (_.isArray(removeLength) || _.isString(removeLength)) {\n\t\t\t\t\t\t\tremoveLength = removeLength.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._removeRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tremoveLength,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ArrayChangeSetIterator.types.MODIFY:\n\t\t\t\t\t\t// Handle modifies\n\t\t\t\t\t\tthis._modifyRangeWithoutDirtying(\n\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\tthis._deserializeArray(arrayIterator.opDescription.operation[1]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"applyChangeset: \" + MSG.UNKNOWN_OPERATION + arrayIterator.opDescription.type,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tarrayIterator.next();\n\t\t\t}\n\t\t}\n\n\t\t// Finally mark the property as dirty (we postponed this in the previous operations to prevent multiple triggering\n\t\t// of dirtying events)\n\t\tthis._setDirty(in_reportToView);\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\t_reapplyDirtyFlags(in_pendingChangeSet, in_dirtyChangeSet) {\n\t\tthis._checkIsNotReadOnly(false);\n\n\t\tthis._setChanges(in_pendingChangeSet, in_dirtyChangeSet);\n\t\t// Finally mark the property as dirty (we postponed this in the previous operations to prevent multiple triggering\n\t\t// of dirtying events)\n\t\tthis._setDirty(false);\n\t}\n\n\t/**\n\t * Removes the dirtiness flag from this property\n\t * @param {property-properties.BaseProperty.MODIFIED_STATE_FLAGS} [in_flags] - The flags to clean.\n\t * If none are supplied, all will be removed.\n\t * @private\n\t */\n\t_cleanDirty(in_flags) {\n\t\t// Invoke parent - cleans own dirty flag\n\t\tBaseProperty.prototype._cleanDirty.call(this, in_flags);\n\n\t\t// null means no change, undefined means reset the changes\n\t\tvar pendingChanges = null,\n\t\t\tdirtyChanges = null;\n\n\t\tif (\n\t\t\tin_flags === undefined ||\n\t\t\t(in_flags & BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE) !== 0\n\t\t) {\n\t\t\tpendingChanges = undefined;\n\t\t}\n\t\tif (in_flags === undefined || (in_flags & BaseProperty.MODIFIED_STATE_FLAGS.DIRTY) !== 0) {\n\t\t\tdirtyChanges = undefined;\n\t\t}\n\n\t\tthis._setChanges(pendingChanges, dirtyChanges);\n\t}\n\n\t/**\n\t * Removes the dirtiness flag from this property and recursively from all of its children.\n\t *\n\t * @param {property-properties.BaseProperty.MODIFIED_STATE_FLAGS} [in_dirtinessType] - The flags to clean.\n\t * If none are supplied, all will be removed.\n\t */\n\tcleanDirty(in_dirtinessType) {\n\t\tif (!this._isPrimitive) {\n\t\t\tfor (var i = 0; i < this._dataArrayGetLength(); ++i) {\n\t\t\t\tthis._dataArrayGetValue(i).cleanDirty(in_dirtinessType);\n\t\t\t}\n\t\t}\n\t\t// after all paths are clean, we are also clean!\n\t\tthis._cleanDirty(in_dirtinessType);\n\t}\n\n\t/**\n\t * Internal helper function that implements the deserialize algorithm for an array of named properties.\n\t *\n\t * @param {property-properties.SerializedChangeSet} in_serializedObj - The serialized changeset to apply. This\n\t * has to be a normalized change-set (only containing inserts. Removes and Modifies are forbidden).\n\t * @param {boolean} [in_reportToView = true] - By default, the dirtying will always be reported to the checkout view\n\t * and trigger a modified event there. When batching updates, this can be prevented via this flag.\n\t * @return {property-properties.SerializedChangeSet} ChangeSet with the changes that actually were performed during the\n\t * deserialization.\n\t */\n\t_deserializeNamedPropertyArray(in_serializedObj, in_reportToView) {\n\t\tif (!_.isArray(in_serializedObj.insert[0][1])) {\n\t\t\tthrow new TypeError(MSG.INVALID_CHANGESET);\n\t\t}\n\n\t\t// When the array contains named properties, we can use an efficient diffing algorithm, which\n\t\t// takes advantage of the ability to identify entries in an unique way\n\t\tvar targetArray = in_serializedObj.insert[0][1];\n\n\t\t// The algorithm below finds the mapping between the two given arrays which requires the smallest number of\n\t\t// inserted and removed entries. These operations are determined via the following strategy:\n\t\t// 1) We search for all consecutive segments in the input data, which map to a consecutive segments in the\n\t\t// target array.\n\t\t// 2) We search for the longest sequence of consecutive segments in the input data which are all starting at\n\t\t// monotone increasing points in the target array. These are the segments which will remain unmodified\n\t\t// by insertion/removals\n\t\t// 3) Finally, we determine the necessary insertion and remove operations to fill in/remove the entries between\n\t\t// these segments and compute modify instructions within the segments.\n\n\t\t// 1) Map the GUIDs in the input ChangeSet to indices\n\t\tvar resultGuidToIndexMap = {};\n\t\tfor (var i = 0; i < targetArray.length; i++) {\n\t\t\tvar insertedProperty = targetArray[i];\n\t\t\tif (\n\t\t\t\tinsertedProperty[\"String\"] === undefined ||\n\t\t\t\tinsertedProperty[\"String\"][\"guid\"] === undefined\n\t\t\t) {\n\t\t\t\tthrow new Error(MSG.MISSING_GUID_IN_NORMALIZED_CHANGESET);\n\t\t\t}\n\n\t\t\tvar guid = insertedProperty[\"String\"][\"guid\"];\n\t\t\t// since the spec allows alternatively other changeset formats for strings, we have to support them here:\n\t\t\tif (!_.isString(guid) && insertedProperty[\"String\"][\"guid\"].insert) {\n\t\t\t\tguid = insertedProperty[\"String\"][\"guid\"].insert[0][1];\n\t\t\t}\n\t\t\tresultGuidToIndexMap[guid] = i;\n\t\t}\n\n\t\tvar initialArrayLength = this._dataArrayGetLength();\n\n\t\t// Collect consecutive segments\n\t\tvar segmentStartPointsInInitialArray = [];\n\t\tvar segmentStartPointsInTargetArray = [];\n\t\tvar segmentLengths = [];\n\t\tvar segmentInterrupted = false;\n\t\tfor (var i = 0; i < initialArrayLength; i++) {\n\t\t\t// Get the GUID of the entry\n\t\t\tvar guid = this._dataArrayGetValue(i).getGuid();\n\n\t\t\t// Check where it is stored in the target array\n\t\t\tvar index = resultGuidToIndexMap[guid];\n\t\t\tif (index !== undefined) {\n\t\t\t\t// Check whether we can append the entry to the existing sequence\n\t\t\t\tif (\n\t\t\t\t\t!segmentInterrupted &&\n\t\t\t\t\tsegmentStartPointsInTargetArray.length > 0 &&\n\t\t\t\t\t_.last(segmentStartPointsInTargetArray) + _.last(segmentLengths) === index\n\t\t\t\t) {\n\t\t\t\t\t// In that case we just increase the length of the segment\n\t\t\t\t\tsegmentLengths[segmentLengths.length - 1]++;\n\t\t\t\t} else {\n\t\t\t\t\t// Create a new segment\n\t\t\t\t\tsegmentStartPointsInInitialArray.push(i);\n\t\t\t\t\tsegmentStartPointsInTargetArray.push(index);\n\t\t\t\t\tsegmentLengths.push(1);\n\t\t\t\t\tsegmentInterrupted = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsegmentInterrupted = true;\n\t\t\t}\n\t\t}\n\n\t\t// 2) Get all segments in the array which we will keep (we try to keep as many as possible, so this maps\n\t\t// to finding the longest monotone increasing sequence of sub-segments)\n\t\tvar orderedSegments = _getLongestIncreasingSubsequenceSegments(\n\t\t\tsegmentStartPointsInTargetArray,\n\t\t\tsegmentLengths,\n\t\t);\n\n\t\t// 3) Now we have to convert this sequence of ordered segments to insert and remove commands\n\t\tvar changes = {};\n\n\t\tvar lastPositionInInitialArray = 0;\n\t\tvar lastPositionInTargetArray = 0;\n\t\tvar offset = 0;\n\t\tfor (var i = 0; i <= orderedSegments.length; i++) {\n\t\t\tvar startPointInInitialArray, startPointInTargetArray, segmentLength;\n\t\t\tvar offsetChange = 0;\n\t\t\tif (i < orderedSegments.length) {\n\t\t\t\t// Extract the information about the currently processed segment.\n\t\t\t\tstartPointInInitialArray = segmentStartPointsInInitialArray[orderedSegments[i]];\n\t\t\t\tstartPointInTargetArray = segmentStartPointsInTargetArray[orderedSegments[i]];\n\t\t\t\tsegmentLength = segmentLengths[orderedSegments[i]];\n\t\t\t} else {\n\t\t\t\t// Special case to handle the end of the sequence: We add a segment of length 0 at the end\n\t\t\t\tstartPointInInitialArray = initialArrayLength;\n\t\t\t\tstartPointInTargetArray = targetArray.length;\n\t\t\t\tsegmentLength = 0;\n\t\t\t}\n\n\t\t\t// If the start point of the segment in the initial array is larger than the last point we processed, we have\n\t\t\t// to remove the elements between the two points\n\t\t\tif (startPointInInitialArray > lastPositionInInitialArray) {\n\t\t\t\tchanges.remove = changes.remove || [];\n\t\t\t\tchanges.remove.push([\n\t\t\t\t\tlastPositionInInitialArray,\n\t\t\t\t\tstartPointInInitialArray - lastPositionInInitialArray,\n\t\t\t\t]);\n\t\t\t\tthis._removeRangeWithoutDirtying(\n\t\t\t\t\tlastPositionInInitialArray + offset,\n\t\t\t\t\tstartPointInInitialArray - lastPositionInInitialArray,\n\t\t\t\t);\n\t\t\t\toffsetChange -= startPointInInitialArray - lastPositionInInitialArray;\n\t\t\t}\n\n\t\t\t// If the start point of the segment in the target array is larger than the last point we processed, we have\n\t\t\t// to insert the elements between the two points\n\t\t\tif (startPointInTargetArray > lastPositionInTargetArray) {\n\t\t\t\tchanges.insert = changes.insert || [];\n\t\t\t\tlet elementsToInsert = targetArray.slice(\n\t\t\t\t\tlastPositionInTargetArray,\n\t\t\t\t\tstartPointInTargetArray,\n\t\t\t\t);\n\t\t\t\tchanges.insert.push([lastPositionInInitialArray, deepCopy(elementsToInsert)]);\n\t\t\t\tvar scope = this._getScope();\n\t\t\t\tvar insertedProperties = deserializeNonPrimitiveArrayElements(elementsToInsert, scope);\n\t\t\t\tthis._insertRangeWithoutDirtying(\n\t\t\t\t\tlastPositionInInitialArray + offset,\n\t\t\t\t\tinsertedProperties,\n\t\t\t\t);\n\t\t\t\toffsetChange += insertedProperties.length;\n\t\t\t}\n\n\t\t\t// Update the last processed points\n\t\t\tlastPositionInInitialArray = startPointInInitialArray + segmentLength;\n\t\t\tlastPositionInTargetArray = startPointInTargetArray + segmentLength;\n\t\t\toffset += offsetChange;\n\n\t\t\t// Recursively check the entries within the segment for modifications\n\t\t\tfor (var j = 0; j < segmentLength; j++) {\n\t\t\t\tvar existingEntry = this._dataArrayGetValue(startPointInInitialArray + j + offset);\n\t\t\t\tvar entryChanges = existingEntry._deserialize(\n\t\t\t\t\ttargetArray[startPointInTargetArray + j],\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\n\t\t\t\t// We had changes which we have to report back\n\t\t\t\tif (!ChangeSet.isEmptyChangeSet(entryChanges)) {\n\t\t\t\t\t// Make sure, the ChangeSet contains the typeid of the modified entry\n\t\t\t\t\tentryChanges.typeid = existingEntry.getFullTypeid();\n\n\t\t\t\t\tif (!changes.modify) {\n\t\t\t\t\t\tchanges.modify = [[startPointInInitialArray + j, [entryChanges]]];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar lastModifiedSequence = _.last(changes.modify);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tlastModifiedSequence[0] + lastModifiedSequence[1].length ===\n\t\t\t\t\t\t\tstartPointInInitialArray + j\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tlastModifiedSequence[1].push(entryChanges);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchanges.modify.push([startPointInInitialArray + j, [entryChanges]]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If there were any changes, we have to mark this property as dirty\n\t\tif (!ChangeSet.isEmptyChangeSet(changes)) {\n\t\t\tthis._setDirty(in_reportToView);\n\t\t}\n\t\treturn changes;\n\t}\n\n\t/**\n\t * Function to deserialize special primitive types.\n\t * Some primitive types (e.g. Int64, which is not natively supported by javascript) require\n\t * special treatment on deserialization. For supported types, we can just return the input here.\n\t *\n\t * @param {property-properties.SerializedChangeSet} in_serializedObj - The object to be deserialized\n\t * @return {*} the deserialized value\n\t */\n\t_deserializeValue(in_serializedObj) {\n\t\treturn in_serializedObj;\n\t}\n\n\t/**\n\t * Function to serialize special primitive types.\n\t * Some primitive types (e.g. Int64, which is not natively supported by javascript) require\n\t * special treatment on serialization. For supported types, we can just return the input here.\n\t *\n\t * @param {*} in_obj - The object to be serialized\n\t * @return {property-properties.SerializedChangeSet} the serialized object\n\t */\n\t_serializeValue(in_obj) {\n\t\t// we have to convert the propertySet objects to changesets\n\t\treturn in_obj._serialize(false, true);\n\t}\n\n\t/**\n\t * Function to serialize arrays of special primitive types.\n\t * Some primitive types (e.g. Int64, which is not natively supported by javascript) require\n\t * special treatment on serialization. For supported types, we can just return the input here.\n\t *\n\t * @param {Array} in_array - The array of special objects to be serialized\n\t * @return {Array<property-properties.SerializedChangeSet>} the serialized object\n\t */\n\t_serializeArray(in_array) {\n\t\tvar len = in_array.length;\n\t\tvar result = new Array(len);\n\t\tif (this._isPrimitive) {\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tresult[i] = this._serializeValue(in_array[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tresult[i] = {};\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Function to deserialize arrays of special primitive types.\n\t * Some primitive types (e.g. Int64, which is not natively supported by javascript) require\n\t * special treatment on deserialization. For supported types, we can just return the input here.\n\t *\n\t * @param {Array<property-properties.SerializedChangeSet>} in_serializedObj - The serialized object\n\t * @return {Array} in_array - The array of special objects that were deserialized\n\t */\n\t_deserializeArray(in_serializedObj) {\n\t\treturn in_serializedObj;\n\t}\n\n\t/**\n\t * @inheritdoc\n\t *\n\t * @param {object} [in_filteringOptions = {}] - The filtering options to consider while deserializing the property.\n\t * @param {boolean} [in_createChangeSet = true] - Should a changeset be created for this deserialization?\n\t */\n\t_deserialize(in_serializedObj, in_reportToView, in_filteringOptions, in_createChangeSet) {\n\t\tthis._checkIsNotReadOnly(false);\n\n\t\tif (\n\t\t\t(in_serializedObj.remove && in_serializedObj.remove.length > 0) ||\n\t\t\t(in_serializedObj.modify && in_serializedObj.modify.length > 0) ||\n\t\t\t(in_serializedObj.insert &&\n\t\t\t\t(in_serializedObj.insert.length > 1 ||\n\t\t\t\t\t(in_serializedObj.insert.length === 1 &&\n\t\t\t\t\t\t(in_serializedObj.insert[0][0] !== 0 ||\n\t\t\t\t\t\t\t!_.isArray(in_serializedObj.insert[0][1])))))\n\t\t) {\n\t\t\tthrow new Error(MSG.NO_NORMALIZED_CHANGESET);\n\t\t}\n\n\t\tvar arrayLength = this._dataArrayGetLength();\n\n\t\tif (!in_serializedObj.insert || !in_serializedObj.insert[0]) {\n\t\t\t// we've got an empty object, so we have to wipe everything we've got\n\t\t\tif (arrayLength > 0) {\n\t\t\t\tthis._clearRange(0, arrayLength);\n\t\t\t\tthis._setDirty(in_reportToView);\n\t\t\t\tvar removeChangeSet = {\n\t\t\t\t\tremove: [[0, arrayLength]],\n\t\t\t\t};\n\t\t\t\tthis._updateChanges(removeChangeSet);\n\t\t\t\treturn removeChangeSet;\n\t\t\t} else {\n\t\t\t\t// the array was already empty, nothing has changed\n\t\t\t\treturn {};\n\t\t\t}\n\t\t}\n\n\t\tvar scope = this._getScope();\n\n\t\tif (\n\t\t\tProperty.PropertyFactory.inheritsFrom(this.getTypeid(), \"NamedProperty\", {\n\t\t\t\tscope: scope,\n\t\t\t})\n\t\t) {\n\t\t\treturn this._deserializeNamedPropertyArray(in_serializedObj, in_reportToView);\n\t\t} else {\n\t\t\t// most simplistic diff method: Remove all existing data and insert the new data\n\n\t\t\t// The changes we will report as result of this function\n\t\t\tvar simpleChanges = {\n\t\t\t\tinsert: in_createChangeSet\n\t\t\t\t\t? deepCopy(in_serializedObj.insert)\n\t\t\t\t\t: in_serializedObj.insert,\n\t\t\t};\n\t\t\tif (arrayLength > 0) {\n\t\t\t\tsimpleChanges.remove = [[0, arrayLength]];\n\t\t\t}\n\n\t\t\tif (!this._isPrimitive) {\n\t\t\t\tvar propertyDescriptions = in_serializedObj.insert[0][1];\n\t\t\t\tvar result = [];\n\n\t\t\t\tfor (var i = 0; i < propertyDescriptions.length; ++i) {\n\t\t\t\t\tvar createdProperty = Property.PropertyFactory._createProperty(\n\t\t\t\t\t\tpropertyDescriptions[i][\"typeid\"],\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t);\n\t\t\t\t\tcreatedProperty._setParent(this);\n\t\t\t\t\tcreatedProperty._deserialize(\n\t\t\t\t\t\tpropertyDescriptions[i],\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tin_filteringOptions,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t);\n\t\t\t\t\tresult.push(createdProperty);\n\t\t\t\t}\n\t\t\t\tthis._clearRange(0, this._dataArrayGetLength());\n\t\t\t\tthis._dataArrayInsertRange(0, result);\n\t\t\t} else {\n\t\t\t\t// Check, whether there has been any change in the array at all\n\t\t\t\tif (in_serializedObj.insert[0][1].length === this._dataArrayGetLength()) {\n\t\t\t\t\t// We have to compare the two buffers\n\t\t\t\t\tvar buffer = this._dataArrayGetBuffer();\n\t\t\t\t\tvar changeSetArray = in_serializedObj.insert[0][1];\n\t\t\t\t\tvar len = buffer.length;\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tif (this._typeid === \"Int64\" || this._typeid === \"Uint64\") {\n\t\t\t\t\t\t// For (u)int64, we will compare (Ui/I)nt64 objects with arrays [low, high]\n\t\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tchangeSetArray[i][0] !== buffer[i].getValueLow() ||\n\t\t\t\t\t\t\t\tchangeSetArray[i][1] !== buffer[i].getValueHigh()\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\t\tif (buffer[i] !== changeSetArray[i]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (i === len) {\n\t\t\t\t\t\treturn {};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// set the actual array values to our array\n\t\t\t\tthis._dataArrayDeserialize(this._deserializeArray(in_serializedObj.insert[0][1]));\n\t\t\t}\n\n\t\t\t// Update the dirty and pending changes\n\t\t\tthis._updateChanges(simpleChanges);\n\n\t\t\t// Finally report the dirtiness to the view (we postponed this above)\n\t\t\tthis._setDirty(in_reportToView);\n\n\t\t\treturn simpleChanges;\n\t\t}\n\t}\n\n\t_getChangesetForCustomTypeArray(\n\t\tin_basePropertyChangeset,\n\t\tin_dirtinessType,\n\t\tin_includeReferencedRepositories,\n\t) {\n\t\tvar result = {};\n\t\tif (in_basePropertyChangeset.remove && in_basePropertyChangeset.remove.length > 0) {\n\t\t\tresult.remove = deepCopy(in_basePropertyChangeset.remove);\n\t\t}\n\t\t// get the iterator over the changes:\n\t\tvar iterator = new ArrayChangeSetIterator(in_basePropertyChangeset);\n\t\tvar currentArrayIndex = 0;\n\t\tvar currentArraySize = this._dataArrayGetLength();\n\t\tvar op, opStartIndex;\n\t\twhile (!iterator.atEnd() || currentArrayIndex < currentArraySize) {\n\t\t\tif (!iterator.atEnd()) {\n\t\t\t\top = iterator.opDescription;\n\t\t\t\topStartIndex = op.operation[0] + op.offset;\n\t\t\t} else {\n\t\t\t\t// no more ops\n\t\t\t\top = { offset: iterator.opDescription.offset };\n\t\t\t\topStartIndex = Number.MAX_VALUE;\n\t\t\t}\n\n\t\t\tif (currentArrayIndex < opStartIndex) {\n\t\t\t\t// not in the influence of an insert or remove\n\n\t\t\t\t// we have to check if the element was modified (since that is not tracked)\n\t\t\t\tif (this._dataArrayGetValue(currentArrayIndex)._isDirty(in_dirtinessType)) {\n\t\t\t\t\t// check if we can combine modifies:\n\t\t\t\t\tvar lastModify = undefined;\n\t\t\t\t\tif (result.modify && result.modify.length > 0) {\n\t\t\t\t\t\tlastModify = result.modify[result.modify.length - 1];\n\t\t\t\t\t\tif (lastModify[0] + lastModify[1].length === currentArrayIndex - op.offset) {\n\t\t\t\t\t\t\t// we need to combine, keep lastModify\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlastModify = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (lastModify) {\n\t\t\t\t\t\tlastModify[1].push(\n\t\t\t\t\t\t\tthis._dataArrayGetValue(currentArrayIndex).serialize({\n\t\t\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\t\t\tincludeRootTypeid: true,\n\t\t\t\t\t\t\t\tdirtinessType: in_dirtinessType,\n\t\t\t\t\t\t\t\tincludeReferencedRepositories: in_includeReferencedRepositories,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// begin new modify\n\t\t\t\t\t\tif (!result.modify) {\n\t\t\t\t\t\t\tresult.modify = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult.modify.push([\n\t\t\t\t\t\t\tcurrentArrayIndex - op.offset,\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\tthis._dataArrayGetValue(currentArrayIndex).serialize({\n\t\t\t\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\t\t\t\tincludeRootTypeid: true,\n\t\t\t\t\t\t\t\t\tdirtinessType: in_dirtinessType,\n\t\t\t\t\t\t\t\t\tincludeReferencedRepositories: in_includeReferencedRepositories,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t\tcurrentArrayIndex++;\n\t\t\t\t\t// add more immediate modifies if possible\n\t\t\t\t\twhile (\n\t\t\t\t\t\tcurrentArrayIndex < currentArraySize &&\n\t\t\t\t\t\tcurrentArrayIndex < opStartIndex &&\n\t\t\t\t\t\tthis._dataArrayGetValue(currentArrayIndex)._isDirty(in_dirtinessType)\n\t\t\t\t\t) {\n\t\t\t\t\t\tresult.modify[result.modify.length - 1][1].push(\n\t\t\t\t\t\t\tthis._dataArrayGetValue(currentArrayIndex).serialize({\n\t\t\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\t\t\tincludeRootTypeid: true,\n\t\t\t\t\t\t\t\tdirtinessType: in_dirtinessType,\n\t\t\t\t\t\t\t\tincludeReferencedRepositories: in_includeReferencedRepositories,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcurrentArrayIndex++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcurrentArrayIndex++;\n\t\t\t\t}\n\t\t\t} else if (currentArrayIndex === opStartIndex) {\n\t\t\t\t// handle the op\n\t\t\t\tswitch (op.type) {\n\t\t\t\t\tcase ArrayChangeSetIterator.types.REMOVE: {\n\t\t\t\t\t\t// no need to do something (removes are just copied)\n\t\t\t\t\t\titerator.next(); // we've completely consumed that op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase ArrayChangeSetIterator.types.INSERT: {\n\t\t\t\t\t\t// we have to convert the inserts:\n\t\t\t\t\t\tvar currentInsert = op.operation;\n\t\t\t\t\t\tvar newInsert = [currentInsert[0], []];\n\t\t\t\t\t\tfor (var j = 0; j < currentInsert[1].length; ++j) {\n\t\t\t\t\t\t\t// TODO: we don't use the data from the changeset anymore, since we directly\n\t\t\t\t\t\t\t// TODO: read the data from the array now - remove the data from the op and\n\t\t\t\t\t\t\t// TODO: replace it with just the length instead\n\t\t\t\t\t\t\tif (!this._dataArrayGetValue(opStartIndex + j)) {\n\t\t\t\t\t\t\t\tthrow new Error(\"insert: invalid index\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewInsert[1].push(\n\t\t\t\t\t\t\t\tthis._dataArrayGetValue(opStartIndex + j).serialize({\n\t\t\t\t\t\t\t\t\tdirtyOnly: false,\n\t\t\t\t\t\t\t\t\tincludeRootTypeid: true,\n\t\t\t\t\t\t\t\t\tdirtinessType: in_dirtinessType,\n\t\t\t\t\t\t\t\t\tincludeReferencedRepositories: in_includeReferencedRepositories,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!result.insert) {\n\t\t\t\t\t\t\tresult.insert = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult.insert.push(newInsert);\n\t\t\t\t\t\tcurrentArrayIndex += currentInsert[1].length; // we've read and used these entries above\n\t\t\t\t\t\titerator.next(); // we've completely consumed that op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase ArrayChangeSetIterator.types.MODIFY: {\n\t\t\t\t\t\t// Prevent from looping infinitly\n\t\t\t\t\t\t// TODO: Might want to decide if there's something to do here\n\t\t\t\t\t\titerator.next(); // we've completely consumed that op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Serialize the property\n\t *\n\t * @param {boolean} in_dirtyOnly - Only include dirty entries in the serialization\n\t * @param {boolean} in_includeRootTypeid - Include the typeid of the root of the hierarchy.\n\t * Has no effect for `ArrayProperty`.\n\t * @param {property-properties.BaseProperty.MODIFIED_STATE_FLAGS} [in_dirtinessType] - The type of dirtiness to use\n\t * when reporting dirty changes. By default this is `PENDING_CHANGE`.\n\t * @param {boolean} [in_includeReferencedRepositories=false] - If this is set to true, the _serialize\n\t * function will descend into referenced repositories.\n\t * WARNING: if there are loops in the references this can result in an infinite loop.\n\t *\n\t * @return {Object} The serialized representation of this property\n\t * @private\n\t */\n\t_serialize(\n\t\tin_dirtyOnly,\n\t\tin_includeRootTypeid,\n\t\tin_dirtinessType,\n\t\tin_includeReferencedRepositories,\n\t) {\n\t\tvar result = AbstractStaticCollectionProperty.prototype._serialize.call(\n\t\t\tthis,\n\t\t\tin_dirtyOnly,\n\t\t\tin_includeRootTypeid,\n\t\t\tin_dirtinessType,\n\t\t\tin_includeReferencedRepositories,\n\t\t);\n\n\t\tif (!this._isPrimitive) {\n\t\t\tif (in_dirtyOnly) {\n\t\t\t\t_.extend(\n\t\t\t\t\tresult,\n\t\t\t\t\tin_dirtinessType === BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE\n\t\t\t\t\t\t? this._getChangesetForCustomTypeArray(\n\t\t\t\t\t\t\t\tthis._getPendingChanges(),\n\t\t\t\t\t\t\t\tin_dirtinessType,\n\t\t\t\t\t\t\t\tin_includeReferencedRepositories,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: this._getChangesetForCustomTypeArray(\n\t\t\t\t\t\t\t\tthis._getDirtyChanges(),\n\t\t\t\t\t\t\t\tin_dirtinessType,\n\t\t\t\t\t\t\t\tin_includeReferencedRepositories,\n\t\t\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\t// returns just an insert with the current data\n\t\t\t\tif (this._dataArrayGetLength() > 0) {\n\t\t\t\t\tresult.insert = [];\n\t\t\t\t\tresult.insert.push([0, []]);\n\t\t\t\t\t// we have to convert the propertySet objects to changesets\n\t\t\t\t\tfor (var i = 0; i < this._dataArrayGetLength(); i++) {\n\t\t\t\t\t\tresult.insert[0][1].push(\n\t\t\t\t\t\t\tthis._dataArrayGetValue(i)._serialize(\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\tin_dirtinessType,\n\t\t\t\t\t\t\t\tin_includeReferencedRepositories,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t} else if (in_dirtyOnly) {\n\t\t\treturn in_dirtinessType === BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE\n\t\t\t\t? deepCopy(this._getPendingChanges())\n\t\t\t\t: deepCopy(this._getDirtyChanges());\n\t\t} else {\n\t\t\t// returns just an insert with the current data\n\t\t\tif (this._dataArrayGetLength() > 0) {\n\t\t\t\tresult.insert = [];\n\t\t\t\tresult.insert.push([0, []]);\n\t\t\t\tfor (var i = 0; i < this._dataArrayGetLength(); i++) {\n\t\t\t\t\tresult.insert[0][1].push(this._serializeValue(this._dataArrayGetValue(i)));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\t/**\n\t * Repeatedly calls back the given function with human-readable string\n\t * representations of the property and of its sub-properties.\n\t * @param {string} indent - Leading spaces to create the tree representation\n\t * @param {string} externalId - Name of the current property at the upper level. Used for arrays.\n\t * @param {function} printFct - Function to call for printing each property\n\t */\n\t_prettyPrint(indent, externalId, printFct) {\n\t\tprintFct(indent + externalId + this.getId() + \" (Array of \" + this.getTypeid() + \"): [\");\n\t\tif (!this._isPrimitive) {\n\t\t\tthis._prettyPrintChildren(indent, printFct);\n\t\t} else {\n\t\t\tvar childIndent = indent + \" \";\n\t\t\tvar prefix = \"\";\n\t\t\tvar suffix = \"\";\n\t\t\tif (this.getTypeid() === \"String\") {\n\t\t\t\tprefix = '\"';\n\t\t\t\tsuffix = '\"';\n\t\t\t}\n\t\t\tfor (var i = 0; i < this._dataArrayGetLength(); i++) {\n\t\t\t\tprintFct(childIndent + i + \": \" + prefix + this._dataArrayGetValue(i) + suffix);\n\t\t\t}\n\t\t}\n\t\tprintFct(indent + \"]\");\n\t}\n\n\t/**\n\t * Repeatedly calls back the given function with human-readable string\n\t * representations of the property's sub-properties.\n\t * @param {string} indent - Leading spaces to create the tree representation\n\t * @param {function} printFct - Function to call for printing each property\n\t */\n\t_prettyPrintChildren(indent, printFct) {\n\t\tindent += \" \";\n\t\tvar ids = this.getIds();\n\t\tfor (var i = 0; i < ids.length; i++) {\n\t\t\tthis.get(ids[i], {\n\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t})._prettyPrint(indent, ids[i] + \": \", printFct);\n\t\t}\n\t}\n\n\t/**\n\t * Return a JSON representation of the array and its items.\n\t * @return {object} A JSON representation of the array and its items.\n\t * @protected\n\t */\n\t_toJson() {\n\t\tvar json = {\n\t\t\tid: this.getId(),\n\t\t\tcontext: this._context,\n\t\t\ttypeid: this.getTypeid(),\n\t\t\tisConstant: this._isConstant,\n\t\t\tvalue: [],\n\t\t};\n\n\t\tif (!this._isPrimitive) {\n\t\t\tvar ids = this.getIds();\n\t\t\tfor (var i = 0; i < ids.length; i++) {\n\t\t\t\tjson.value.push(\n\t\t\t\t\tthis.get(ids[i], {\n\t\t\t\t\t\treferenceResolutionMode: BaseProperty.REFERENCE_RESOLUTION.NEVER,\n\t\t\t\t\t})._toJson(),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tjson.value = this.getValues();\n\t\t}\n\n\t\treturn json;\n\t}\n\n\t/**\n\t * Returns the full property type identifier for the ChangeSet including the array type id, if not\n\t * omitted by parameters\n\t * @param {boolean} [in_hideCollection=false] - If true the collection type (if applicable) will be omitted\n\t * @return {string} The typeid\n\t */\n\tgetFullTypeid(in_hideCollection) {\n\t\treturn in_hideCollection\n\t\t\t? this._typeid\n\t\t\t: TypeIdHelper.createSerializationTypeId(this._typeid, \"array\");\n\t}\n\n\t/**\n\t * Creates and initializes the data array\n\t * @param {Number} in_length - The initial length of the array\n\t */\n\t_dataArrayCreate(in_length) {\n\t\t// This really creates a generic array for custom type arrays. For primitive arrays, like\n\t\t// 'StringArrayProperty' or 'Float32ArrayProperty', you need to overload this function.\n\t\tthis._dataArrayRef = new UniversalDataArray(in_length);\n\t\tfor (var i = 0; i < in_length; i++) {\n\t\t\tvar element = Property.PropertyFactory._createProperty(\n\t\t\t\tthis.getTypeid(),\n\t\t\t\tnull,\n\t\t\t\tundefined,\n\t\t\t\tthis._scope,\n\t\t\t);\n\t\t\telement._setParent(this);\n\t\t\tthis._dataArraySetValue(i, element);\n\t\t}\n\t}\n\n\t/**\n\t * Returns the length of the data array\n\t * @return {Number} The length\n\t */\n\t_dataArrayGetLength() {\n\t\treturn this._dataArrayRef.length;\n\t}\n\n\t/**\n\t * Returns the data array's internal buffer\n\t * @return {Array} The buffer\n\t */\n\t_dataArrayGetBuffer() {\n\t\treturn this._dataArrayRef.getBuffer();\n\t}\n\n\t/**\n\t * Returns an entry from the data array\n\t * @param {Number} in_index - Position in the array\n\t *\n\t * @return {*} The value at index in_index\n\t */\n\t_dataArrayGetValue(in_index) {\n\t\treturn this._dataArrayRef.getValue(in_index);\n\t}\n\n\t/**\n\t * Sets an entry in the data array\n\t * @param {Number} in_index - Position in the array\n\t * @param {*} in_value - The new value at index in_index\n\t */\n\t_dataArraySetValue(in_index, in_value) {\n\t\tthis._dataArrayRef.setValue(in_index, in_value);\n\t}\n\n\t/**\n\t * Set the array to the given new array\n\t * @param {Array | string} in_newArray - The new contents of the array\n\t */\n\t_dataArrayDeserialize(in_newArray) {\n\t\tthis._dataArrayRef.deserialize(in_newArray);\n\t}\n\n\t/**\n\t * Inserts a range into the data array\n\t * @param {Number} in_position - Position at which the insert should be done\n\t * @param {Array | string} in_range - The array to insert\n\t */\n\t_dataArrayInsertRange(in_position, in_range) {\n\t\tthis._dataArrayRef.insertRange(in_position, in_range);\n\t}\n\n\t/**\n\t * Removes a range from the data array\n\t * @param {Number} in_position - Position at which to start the removal\n\t * @param {Number} in_length - The number of entries to remove\n\t */\n\t_dataArrayRemoveRange(in_position, in_length) {\n\t\tthis._dataArrayRef.removeRange(in_position, in_length);\n\t}\n\n\t/**\n\t * Overwrites a range in the data array\n\t * @param {Number} in_position - Position at which to start the removal\n\t * @param {Array | string} in_range - The array to overwrite\n\t */\n\t_dataArraySetRange(in_position, in_range) {\n\t\tthis._dataArrayRef.set(in_position, in_range);\n\t}\n\n\t/**\n\t * Get the scope to which this property belongs to.\n\t * @return {string|undefined} The guid representing the scope in which the\n\t * map belongs to. If there is a workspace scope return it, else return the scope of this array.\n\t * @override\n\t * @private\n\t */\n\t_getScope() {\n\t\tvar scope = AbstractStaticCollectionProperty.prototype._getScope.call(this);\n\n\t\treturn scope !== undefined ? scope : this._scope;\n\t}\n\n\t/**\n\t * returns the length of the current array property\n\t */\n\tget length() {\n\t\treturn this.getLength();\n\t}\n\tset length(len) {\n\t\tthrow new Error(MSG.MODIFY_READ_ONLY);\n\t}\n}\n\nArrayProperty.prototype._staticChildren = {};\nArrayProperty.prototype._context = \"array\";\n"]}
@@ -70,8 +70,8 @@ export class ContainerProperty extends IndexedCollectionBaseProperty {
70
70
  * Stores the information to which CheckedOutRepositoryInfo object this root property belongs.
71
71
  * Note: these functions should only be used internally (within the PropertySets library)
72
72
  *
73
- * @param {property-properties.CheckoutView~CheckedOutRepositoryInfo} in_checkedOutRepositoryInfo -
74
- * The checked out repository info this root property belongs to.
73
+ * @param {property-properties.CheckoutView~CheckedOutRepositoryInfo} in_checkedOutRepositoryInfo - The checked out
74
+ * repository info this root property belongs to.
75
75
  * @protected
76
76
  */
77
77
  protected _setCheckedOutRepositoryInfo(in_checkedOutRepositoryInfo: any): void;
@@ -222,8 +222,8 @@ export class ContainerProperty extends IndexedCollectionBaseProperty {
222
222
  * Stores the information to which CheckedOutRepositoryInfo object this root property belongs.
223
223
  * Note: these functions should only be used internally (within the PropertySets library)
224
224
  *
225
- * @param {property-properties.CheckoutView~CheckedOutRepositoryInfo} in_checkedOutRepositoryInfo -
226
- * The checked out repository info this root property belongs to.
225
+ * @param {property-properties.CheckoutView~CheckedOutRepositoryInfo} in_checkedOutRepositoryInfo - The checked out
226
+ * repository info this root property belongs to.
227
227
  * @protected
228
228
  */
229
229
  _setCheckedOutRepositoryInfo(in_checkedOutRepositoryInfo) {