blob: 86b3e600610df72474d9208eb45cdd9379e89967 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
module.exports = {
set: set,
add: add,
remove: remove
};
/*
* This is a utility function for arrays being used as ordered sets.
* If shouldSet is true, add the item to the array set. Otherwise, remove it.
* If no changes are needed, nothing happens.
* The function returns whether or not the array was modified.
*
* Note: indexOfCallback should be used if a custom indexOf function is needed.
* If indexOfCallback is omitted, then array.indexOf will be used by default.
*/
function set(array, item, shouldSet, indexOfCallback) {
var index = indexOfCallback ? indexOfCallback(item) : array.indexOf(item);
if (shouldSet && index === -1) { // need to add
array.push(item);
return true;
} else if (!shouldSet && index !== -1) { // need to remove
array.splice(index, 1);
return true;
}
return false; // did nothing
}
/*
* Wrapper for set that attempts to add the item to the array set.
*/
function add(array, item, indexOfCallback) {
return set(array, item, indexOfCallback, true);
}
/*
* Wrapper for set that attempts to remove the item from the array set.
*/
function remove(array, item, indexOfCallback) {
return set(array, item, indexOfCallback, false);
}