Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
6fdf08c8a9 | |||
de04d75e18 | |||
5159d7e4bf | |||
7b78aaea72 | |||
54a63d1f41 | |||
dd5a009d0f | |||
e7933cd7f4 | |||
56a8d9182b |
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@pushrocks/lik",
|
||||
"version": "3.0.16",
|
||||
"version": "4.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@pushrocks/lik",
|
||||
"version": "3.0.16",
|
||||
"version": "4.0.0",
|
||||
"private": false,
|
||||
"description": "light little helpers for node",
|
||||
"main": "dist/index.js",
|
||||
|
@ -11,7 +11,7 @@ interface ITestObject {
|
||||
propOne: string;
|
||||
propTwo: string;
|
||||
}
|
||||
let testObjectmap: lik.Objectmap<ITestObject>;
|
||||
let testObjectmap: lik.ObjectMap<ITestObject>;
|
||||
let testObject1: ITestObject = {
|
||||
propOne: 'hello',
|
||||
propTwo: 'hello2'
|
||||
@ -22,8 +22,8 @@ let testObject2: ITestObject = {
|
||||
};
|
||||
|
||||
tap.test('new lik.Objectmap() -> should correctly instantiate an Objectmap', async () => {
|
||||
testObjectmap = new lik.Objectmap<ITestObject>();
|
||||
expect(testObjectmap).be.instanceof(lik.Objectmap);
|
||||
testObjectmap = new lik.ObjectMap<ITestObject>();
|
||||
expect(testObjectmap).be.instanceof(lik.ObjectMap);
|
||||
});
|
||||
|
||||
tap.test('lik.Objectmap.add() -> should correctly add an object to Objectmap', async () => {
|
||||
|
@ -1,7 +1,4 @@
|
||||
import * as plugins from './lik.plugins';
|
||||
|
||||
// import modules
|
||||
|
||||
export * from './lik.fastmap';
|
||||
export * from './lik.interestmap';
|
||||
export * from './lik.limitedarray';
|
||||
export * from './lik.looptracker';
|
||||
|
@ -10,8 +10,14 @@ export class FastMap<T> {
|
||||
return this.mapObject[keyArg] ? false : true;
|
||||
}
|
||||
|
||||
public addToMap(keyArg: string, objectArg: T): boolean {
|
||||
if (this.isUniqueKey(keyArg)) {
|
||||
public addToMap(
|
||||
keyArg: string,
|
||||
objectArg: T,
|
||||
optionsArg?: {
|
||||
force: boolean;
|
||||
}
|
||||
): boolean {
|
||||
if (this.isUniqueKey(keyArg) || (optionsArg && optionsArg.force)) {
|
||||
this.mapObject[keyArg] = objectArg;
|
||||
return true;
|
||||
} else {
|
||||
@ -32,10 +38,45 @@ export class FastMap<T> {
|
||||
public getKeys() {
|
||||
const keys: string[] = [];
|
||||
for (const keyArg in this.mapObject) {
|
||||
if (this.mapObject[keyArg]) {
|
||||
keys.push(keyArg);
|
||||
}
|
||||
if (this.mapObject[keyArg]) {
|
||||
keys.push(keyArg);
|
||||
}
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
public clean() {
|
||||
this.mapObject = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a new Objectmap that includes
|
||||
*/
|
||||
public concat(fastMapArg: FastMap<T>) {
|
||||
const concatedFastmap = new FastMap<T>();
|
||||
for (const key of this.getKeys()) {
|
||||
concatedFastmap.addToMap(key, this.getByKey(key));
|
||||
}
|
||||
|
||||
for (const key of fastMapArg.getKeys()) {
|
||||
concatedFastmap.addToMap(key, fastMapArg.getByKey(key), {
|
||||
force: true
|
||||
});
|
||||
}
|
||||
|
||||
return concatedFastmap;
|
||||
}
|
||||
|
||||
/**
|
||||
* tries to merge another Objectmap
|
||||
* Note: uniqueKeyCollisions will cause overwrite
|
||||
* @param objectMapArg
|
||||
*/
|
||||
public addAllFromOther(fastMapArg: FastMap<T>) {
|
||||
for (const key of fastMapArg.getKeys()) {
|
||||
this.addToMap(key, fastMapArg.getByKey(key), {
|
||||
force: true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
import * as plugins from './lik.plugins';
|
||||
import { Objectmap } from './lik.objectmap';
|
||||
import { ObjectMap } from './lik.objectmap';
|
||||
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
@ -11,7 +11,7 @@ export class InterestMap<DTInterestId, DTInterestFullfillment> {
|
||||
/**
|
||||
* stores interests that are currently fullfilled by the cache
|
||||
*/
|
||||
private interestObjectMap = new Objectmap<Interest<DTInterestId, DTInterestFullfillment>>();
|
||||
private interestObjectMap = new ObjectMap<Interest<DTInterestId, DTInterestFullfillment>>();
|
||||
|
||||
/**
|
||||
* a function to compare interests
|
||||
@ -106,8 +106,8 @@ export class InterestMap<DTInterestId, DTInterestFullfillment> {
|
||||
*/
|
||||
public findInterest(objectArg: DTInterestId): Interest<DTInterestId, DTInterestFullfillment> {
|
||||
const comparableString = this.comparisonFunc(objectArg);
|
||||
const interest = this.interestObjectMap.find(interest => {
|
||||
return interest.comparisonString === comparableString;
|
||||
const interest = this.interestObjectMap.find(interestArg => {
|
||||
return interestArg.comparisonString === comparableString;
|
||||
});
|
||||
return interest; // if an interest is found, the interest is returned, otherwise interest is null
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
import * as plugins from './lik.plugins';
|
||||
|
||||
import { Objectmap } from './lik.objectmap';
|
||||
import { ObjectMap } from './lik.objectmap';
|
||||
|
||||
export class LoopTracker<T> {
|
||||
referenceObjectMap = new Objectmap<any>();
|
||||
referenceObjectMap = new ObjectMap<any>();
|
||||
constructor() {
|
||||
// nothing here
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ export interface IObjectmapFindFunction<T> {
|
||||
/**
|
||||
* allows keeping track of objects
|
||||
*/
|
||||
export class Objectmap<T> {
|
||||
export class ObjectMap<T> {
|
||||
private fastMap = new FastMap<T>();
|
||||
|
||||
// events
|
||||
@ -87,7 +87,7 @@ export class Objectmap<T> {
|
||||
|
||||
/**
|
||||
* get key for object
|
||||
* @param findFunction
|
||||
* @param findFunction
|
||||
*/
|
||||
public getKeyForObject(objectArg: T) {
|
||||
let foundKey: string = null;
|
||||
@ -137,10 +137,14 @@ export class Objectmap<T> {
|
||||
*/
|
||||
public getOneAndRemove(): T {
|
||||
const keys = this.fastMap.getKeys();
|
||||
const keyToUse = keys[keys.length - 1];
|
||||
const removedItem = this.fastMap.removeFromMap(keyToUse);
|
||||
this.eventSubject.next('remove');
|
||||
return removedItem;
|
||||
if (keys.length === 0) {
|
||||
return null;
|
||||
} else {
|
||||
const keyToUse = keys[0];
|
||||
const removedItem = this.fastMap.removeFromMap(keyToUse);
|
||||
this.eventSubject.next('remove');
|
||||
return removedItem;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -181,6 +185,24 @@ export class Objectmap<T> {
|
||||
for (const keyArg of this.fastMap.getKeys()) {
|
||||
this.fastMap.removeFromMap(keyArg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a new Objectmap that includes
|
||||
*/
|
||||
public concat(objectMapArg: ObjectMap<T>) {
|
||||
const concattedObjectMap = new ObjectMap<T>();
|
||||
concattedObjectMap.fastMap.addAllFromOther(this.fastMap);
|
||||
concattedObjectMap.fastMap.addAllFromOther(objectMapArg.fastMap);
|
||||
return concattedObjectMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* tries to merge another Objectmap
|
||||
* Note: uniqueKeyCollisions will cause overwrite
|
||||
* @param objectMapArg
|
||||
*/
|
||||
public addAllFromOther(objectMapArg: ObjectMap<T>) {
|
||||
this.fastMap.addAllFromOther(objectMapArg.fastMap);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user