mirror of
				https://github.com/flynx/types.js.git
				synced 2025-11-04 13:30:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**********************************************************************
 | 
						|
* 
 | 
						|
*
 | 
						|
*
 | 
						|
**********************************************/  /* c8 ignore next 2 */
 | 
						|
((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)
 | 
						|
(function(require){ var module={} // make module AMD/node compatible...
 | 
						|
/*********************************************************************/
 | 
						|
 | 
						|
var object = require('ig-object')
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************/
 | 
						|
 | 
						|
var SetProtoMixin =
 | 
						|
module.SetProtoMixin =
 | 
						|
object.Mixin('SetMixin', 'soft', {
 | 
						|
	// Set set operation shorthands...
 | 
						|
	unite: function(other=[]){ 
 | 
						|
		return new Set([...this, ...other]) },
 | 
						|
	intersect: function(other){
 | 
						|
		var test = other.has ?  
 | 
						|
			'has' 
 | 
						|
			: 'includes'
 | 
						|
		return new Set([...this]
 | 
						|
			.filter(function(e){ 
 | 
						|
				return other[test](e) })) },
 | 
						|
	subtract: function(other=[]){
 | 
						|
		other = new Set(other)
 | 
						|
		return new Set([...this]
 | 
						|
			.filter(function(e){ 
 | 
						|
				return !other.has(e) })) },
 | 
						|
 | 
						|
	sort: function(keys=[]){
 | 
						|
		keys = (typeof(keys) == 'function' 
 | 
						|
				|| keys === undefined) ?
 | 
						|
			[...this].sort(keys)
 | 
						|
			: keys
 | 
						|
		var del = this.delete.bind(this)
 | 
						|
		var add = this.add.bind(this)
 | 
						|
		new Set([...keys, ...this])
 | 
						|
			.forEach(function(e){
 | 
						|
				if(this.has(e)){
 | 
						|
					del(e)
 | 
						|
					add(e) } }.bind(this))
 | 
						|
		return this },
 | 
						|
})
 | 
						|
 | 
						|
 | 
						|
SetProtoMixin(Set.prototype)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**********************************************************************
 | 
						|
* vim:set ts=4 sw=4 :                               */ return module })
 |