diff --git a/packages/display/package.json b/packages/display/package.json index d30914a..7917e5b 100644 --- a/packages/display/package.json +++ b/packages/display/package.json @@ -28,8 +28,7 @@ "@pixi/math": "^5.0.0-rc.2", "@pixi/settings": "^5.0.0-rc.2", "@pixi/utils": "^5.0.0-rc.2", - "eventemitter3": "^3.1.0", - "remove-array-items": "^1.0.0" + "eventemitter3": "^3.1.0" }, "devDependencies": { "floss": "^2.1.5" diff --git a/packages/display/package.json b/packages/display/package.json index d30914a..7917e5b 100644 --- a/packages/display/package.json +++ b/packages/display/package.json @@ -28,8 +28,7 @@ "@pixi/math": "^5.0.0-rc.2", "@pixi/settings": "^5.0.0-rc.2", "@pixi/utils": "^5.0.0-rc.2", - "eventemitter3": "^3.1.0", - "remove-array-items": "^1.0.0" + "eventemitter3": "^3.1.0" }, "devDependencies": { "floss": "^2.1.5" diff --git a/packages/display/src/Container.js b/packages/display/src/Container.js index f3d58ad..ff301ef 100644 --- a/packages/display/src/Container.js +++ b/packages/display/src/Container.js @@ -1,5 +1,5 @@ import { settings } from '@pixi/settings'; -import removeItems from 'remove-array-items'; +import { removeItems } from '@pixi/utils'; import DisplayObject from './DisplayObject'; function sortChildren(a, b) diff --git a/packages/display/package.json b/packages/display/package.json index d30914a..7917e5b 100644 --- a/packages/display/package.json +++ b/packages/display/package.json @@ -28,8 +28,7 @@ "@pixi/math": "^5.0.0-rc.2", "@pixi/settings": "^5.0.0-rc.2", "@pixi/utils": "^5.0.0-rc.2", - "eventemitter3": "^3.1.0", - "remove-array-items": "^1.0.0" + "eventemitter3": "^3.1.0" }, "devDependencies": { "floss": "^2.1.5" diff --git a/packages/display/src/Container.js b/packages/display/src/Container.js index f3d58ad..ff301ef 100644 --- a/packages/display/src/Container.js +++ b/packages/display/src/Container.js @@ -1,5 +1,5 @@ import { settings } from '@pixi/settings'; -import removeItems from 'remove-array-items'; +import { removeItems } from '@pixi/utils'; import DisplayObject from './DisplayObject'; function sortChildren(a, b) diff --git a/packages/utils/package.json b/packages/utils/package.json index 13fb25f..8ed639b 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -30,7 +30,6 @@ "earcut": "^2.1.3", "eventemitter3": "^3.1.0", "ismobilejs": "^0.5.1", - "remove-array-items": "^1.0.0", "url": "^0.11.0" }, "devDependencies": { diff --git a/packages/display/package.json b/packages/display/package.json index d30914a..7917e5b 100644 --- a/packages/display/package.json +++ b/packages/display/package.json @@ -28,8 +28,7 @@ "@pixi/math": "^5.0.0-rc.2", "@pixi/settings": "^5.0.0-rc.2", "@pixi/utils": "^5.0.0-rc.2", - "eventemitter3": "^3.1.0", - "remove-array-items": "^1.0.0" + "eventemitter3": "^3.1.0" }, "devDependencies": { "floss": "^2.1.5" diff --git a/packages/display/src/Container.js b/packages/display/src/Container.js index f3d58ad..ff301ef 100644 --- a/packages/display/src/Container.js +++ b/packages/display/src/Container.js @@ -1,5 +1,5 @@ import { settings } from '@pixi/settings'; -import removeItems from 'remove-array-items'; +import { removeItems } from '@pixi/utils'; import DisplayObject from './DisplayObject'; function sortChildren(a, b) diff --git a/packages/utils/package.json b/packages/utils/package.json index 13fb25f..8ed639b 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -30,7 +30,6 @@ "earcut": "^2.1.3", "eventemitter3": "^3.1.0", "ismobilejs": "^0.5.1", - "remove-array-items": "^1.0.0", "url": "^0.11.0" }, "devDependencies": { diff --git a/packages/utils/src/data/index.js b/packages/utils/src/data/index.js index 7302193..e77949c 100644 --- a/packages/utils/src/data/index.js +++ b/packages/utils/src/data/index.js @@ -1,4 +1,5 @@ export * from './createIndicesForQuads'; +export * from './removeItems'; export * from './uid'; export * from './sign'; export * from './pow2'; diff --git a/packages/display/package.json b/packages/display/package.json index d30914a..7917e5b 100644 --- a/packages/display/package.json +++ b/packages/display/package.json @@ -28,8 +28,7 @@ "@pixi/math": "^5.0.0-rc.2", "@pixi/settings": "^5.0.0-rc.2", "@pixi/utils": "^5.0.0-rc.2", - "eventemitter3": "^3.1.0", - "remove-array-items": "^1.0.0" + "eventemitter3": "^3.1.0" }, "devDependencies": { "floss": "^2.1.5" diff --git a/packages/display/src/Container.js b/packages/display/src/Container.js index f3d58ad..ff301ef 100644 --- a/packages/display/src/Container.js +++ b/packages/display/src/Container.js @@ -1,5 +1,5 @@ import { settings } from '@pixi/settings'; -import removeItems from 'remove-array-items'; +import { removeItems } from '@pixi/utils'; import DisplayObject from './DisplayObject'; function sortChildren(a, b) diff --git a/packages/utils/package.json b/packages/utils/package.json index 13fb25f..8ed639b 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -30,7 +30,6 @@ "earcut": "^2.1.3", "eventemitter3": "^3.1.0", "ismobilejs": "^0.5.1", - "remove-array-items": "^1.0.0", "url": "^0.11.0" }, "devDependencies": { diff --git a/packages/utils/src/data/index.js b/packages/utils/src/data/index.js index 7302193..e77949c 100644 --- a/packages/utils/src/data/index.js +++ b/packages/utils/src/data/index.js @@ -1,4 +1,5 @@ export * from './createIndicesForQuads'; +export * from './removeItems'; export * from './uid'; export * from './sign'; export * from './pow2'; diff --git a/packages/utils/src/data/removeItems.js b/packages/utils/src/data/removeItems.js new file mode 100644 index 0000000..fee5867 --- /dev/null +++ b/packages/utils/src/data/removeItems.js @@ -0,0 +1,30 @@ +/** + * Remove items from a javascript array without generating garbage + * + * @function removeItems + * @memberof PIXI.utils + * @param {Array} arr Array to remove elements from + * @param {number} startIdx starting index + * @param {number} removeCount how many to remove + */ +export function removeItems(arr, startIdx, removeCount) +{ + const length = arr.length; + let i; + + if (startIdx >= length || removeCount === 0) + { + return; + } + + removeCount = (startIdx + removeCount > length ? length - startIdx : removeCount); + + const len = length - removeCount; + + for (i = startIdx; i < len; ++i) + { + arr[i] = arr[i + removeCount]; + } + + arr.length = len; +} diff --git a/packages/display/package.json b/packages/display/package.json index d30914a..7917e5b 100644 --- a/packages/display/package.json +++ b/packages/display/package.json @@ -28,8 +28,7 @@ "@pixi/math": "^5.0.0-rc.2", "@pixi/settings": "^5.0.0-rc.2", "@pixi/utils": "^5.0.0-rc.2", - "eventemitter3": "^3.1.0", - "remove-array-items": "^1.0.0" + "eventemitter3": "^3.1.0" }, "devDependencies": { "floss": "^2.1.5" diff --git a/packages/display/src/Container.js b/packages/display/src/Container.js index f3d58ad..ff301ef 100644 --- a/packages/display/src/Container.js +++ b/packages/display/src/Container.js @@ -1,5 +1,5 @@ import { settings } from '@pixi/settings'; -import removeItems from 'remove-array-items'; +import { removeItems } from '@pixi/utils'; import DisplayObject from './DisplayObject'; function sortChildren(a, b) diff --git a/packages/utils/package.json b/packages/utils/package.json index 13fb25f..8ed639b 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -30,7 +30,6 @@ "earcut": "^2.1.3", "eventemitter3": "^3.1.0", "ismobilejs": "^0.5.1", - "remove-array-items": "^1.0.0", "url": "^0.11.0" }, "devDependencies": { diff --git a/packages/utils/src/data/index.js b/packages/utils/src/data/index.js index 7302193..e77949c 100644 --- a/packages/utils/src/data/index.js +++ b/packages/utils/src/data/index.js @@ -1,4 +1,5 @@ export * from './createIndicesForQuads'; +export * from './removeItems'; export * from './uid'; export * from './sign'; export * from './pow2'; diff --git a/packages/utils/src/data/removeItems.js b/packages/utils/src/data/removeItems.js new file mode 100644 index 0000000..fee5867 --- /dev/null +++ b/packages/utils/src/data/removeItems.js @@ -0,0 +1,30 @@ +/** + * Remove items from a javascript array without generating garbage + * + * @function removeItems + * @memberof PIXI.utils + * @param {Array} arr Array to remove elements from + * @param {number} startIdx starting index + * @param {number} removeCount how many to remove + */ +export function removeItems(arr, startIdx, removeCount) +{ + const length = arr.length; + let i; + + if (startIdx >= length || removeCount === 0) + { + return; + } + + removeCount = (startIdx + removeCount > length ? length - startIdx : removeCount); + + const len = length - removeCount; + + for (i = startIdx; i < len; ++i) + { + arr[i] = arr[i + removeCount]; + } + + arr.length = len; +} diff --git a/packages/utils/src/index.js b/packages/utils/src/index.js index ea62cd7..4e71aa1 100644 --- a/packages/utils/src/index.js +++ b/packages/utils/src/index.js @@ -30,18 +30,6 @@ export { isMobile }; /** - * Remove items from a javascript array without generating garbage - * - * @see {@link https://github.com/mreinstein/remove-array-items} - * - * @memberof PIXI.utils - * @function removeItems - * @type {Object} - */ -import removeItems from 'remove-array-items'; -export { removeItems }; - -/** * A high performance event emitter * * @see {@link https://github.com/primus/eventemitter3} diff --git a/packages/display/package.json b/packages/display/package.json index d30914a..7917e5b 100644 --- a/packages/display/package.json +++ b/packages/display/package.json @@ -28,8 +28,7 @@ "@pixi/math": "^5.0.0-rc.2", "@pixi/settings": "^5.0.0-rc.2", "@pixi/utils": "^5.0.0-rc.2", - "eventemitter3": "^3.1.0", - "remove-array-items": "^1.0.0" + "eventemitter3": "^3.1.0" }, "devDependencies": { "floss": "^2.1.5" diff --git a/packages/display/src/Container.js b/packages/display/src/Container.js index f3d58ad..ff301ef 100644 --- a/packages/display/src/Container.js +++ b/packages/display/src/Container.js @@ -1,5 +1,5 @@ import { settings } from '@pixi/settings'; -import removeItems from 'remove-array-items'; +import { removeItems } from '@pixi/utils'; import DisplayObject from './DisplayObject'; function sortChildren(a, b) diff --git a/packages/utils/package.json b/packages/utils/package.json index 13fb25f..8ed639b 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -30,7 +30,6 @@ "earcut": "^2.1.3", "eventemitter3": "^3.1.0", "ismobilejs": "^0.5.1", - "remove-array-items": "^1.0.0", "url": "^0.11.0" }, "devDependencies": { diff --git a/packages/utils/src/data/index.js b/packages/utils/src/data/index.js index 7302193..e77949c 100644 --- a/packages/utils/src/data/index.js +++ b/packages/utils/src/data/index.js @@ -1,4 +1,5 @@ export * from './createIndicesForQuads'; +export * from './removeItems'; export * from './uid'; export * from './sign'; export * from './pow2'; diff --git a/packages/utils/src/data/removeItems.js b/packages/utils/src/data/removeItems.js new file mode 100644 index 0000000..fee5867 --- /dev/null +++ b/packages/utils/src/data/removeItems.js @@ -0,0 +1,30 @@ +/** + * Remove items from a javascript array without generating garbage + * + * @function removeItems + * @memberof PIXI.utils + * @param {Array} arr Array to remove elements from + * @param {number} startIdx starting index + * @param {number} removeCount how many to remove + */ +export function removeItems(arr, startIdx, removeCount) +{ + const length = arr.length; + let i; + + if (startIdx >= length || removeCount === 0) + { + return; + } + + removeCount = (startIdx + removeCount > length ? length - startIdx : removeCount); + + const len = length - removeCount; + + for (i = startIdx; i < len; ++i) + { + arr[i] = arr[i + removeCount]; + } + + arr.length = len; +} diff --git a/packages/utils/src/index.js b/packages/utils/src/index.js index ea62cd7..4e71aa1 100644 --- a/packages/utils/src/index.js +++ b/packages/utils/src/index.js @@ -30,18 +30,6 @@ export { isMobile }; /** - * Remove items from a javascript array without generating garbage - * - * @see {@link https://github.com/mreinstein/remove-array-items} - * - * @memberof PIXI.utils - * @function removeItems - * @type {Object} - */ -import removeItems from 'remove-array-items'; -export { removeItems }; - -/** * A high performance event emitter * * @see {@link https://github.com/primus/eventemitter3} diff --git a/packages/utils/test/index.js b/packages/utils/test/index.js index 82f0f2a..4567122 100755 --- a/packages/utils/test/index.js +++ b/packages/utils/test/index.js @@ -188,6 +188,38 @@ { expect(utils.removeItems).to.be.a('function'); }); + + it('should return if the start index is greater than or equal to the length of the array', function () + { + const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + + utils.removeItems(arr, arr.length + 1, 5); + expect(arr.length).to.equal(10); + }); + + it('should return if the remove count is 0', function () + { + const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + + utils.removeItems(arr, 2, 0); + expect(arr.length).to.equal(10); + }); + + it('should remove the number of elements specified from the array, starting from the start index', function () + { + const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + + utils.removeItems(arr, 3, 4); + expect(arr).to.deep.equal([1, 2, 3, 8, 9, 10]); + }); + + it('should remove other elements if delete count is > than the number of elements after start index', function () + { + const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + + utils.removeItems(arr, 7, 10); + expect(arr).to.deep.equal([1, 2, 3, 4, 5, 6, 7]); + }); }); describe('EventEmitter', function ()