nv-data-fifo

1.0.1 • Public • Published

nv-data-fifo

  • nv-data-fifo is very simple util of FIFO List
  • only support 5 action : unshift/pop/unshift_some/pop_some/clear
  • just a array-like object, the only different is it attach event for each-action
  • two mode: fixed / unlimited
  • in fixed: unshift will trigger auto-drop when reach-max-size, simulate the back-pressure
  • in unlimited, will NOT trigger drop,others same
  • fixed performance is better,coz it only USE Array push/unshift when INIT

install

  • npm install nv-data-fifo

usage

const {Fixed,Unlimited,EVENT_DICT} = require("nv-data-fifo")

fixed mode

const {Fixed,EVENT_DICT} = require("nv-data-fifo")
const {E,ET} = require("nv-facutil-event");

###init

//oet is for back-pressure

var oet = new ET()
oet.addEventListener(EVENT_DICT.unshift,(r)=>{console.log("unshift one: ",r,r.data)})
oet.addEventListener(EVENT_DICT.unshift_some,(r)=>{console.log("unshift some: ",r,r.data)})
oet.addEventListener(EVENT_DICT.drop,(r)=>{console.log("dropped one: ",r,r.data)})
oet.addEventListener(EVENT_DICT.drop_some,(r)=>{console.log("dropped some: ",r,r.data)})

var fixed = new Fixed(6,oet)

//iet is for feedback from who use the pop/pop_some 
fixed.iet.addEventListener(EVENT_DICT.pop,(r)=>{console.log("popped one: ",r,r.data)})
fixed.iet.addEventListener(EVENT_DICT.pop_some,(r)=>{console.log("popped some: ",r,r.data)})

> fixed.max_size
6
> fixed.length
0
>    

unshift

> fixed.unshift('A')
unshift one:  E {
  type: 'unshift',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 11428.103470087051
} A

> fixed.unshift_some('E','D','C','B')
unshift some:  E {
  type: 'unshift_some',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 41938.70773601532
} [ 'E','D','C','B' ]
undefined
>

> fixed.unshift('F')
unshift one:  E {
  type: 'unshift',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 66775.0242960453
} F
undefined

> fixed.length
6
>

> fixed.unshift('G')
dropped one:  E {
  type: 'drop',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 98929.20327019691
} A
unshift one:  E {
  type: 'unshift',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 98931.2591381073
} G
undefined
> fixed
[ 'G', 'F', 'E', 'D', 'C', 'B' ]
>

> fixed.dropped
'A'
>

> fixed.unshift_some('I','H')
dropped some:  E {
  type: 'drop_some',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 326382.5275170803
} [ 'C', 'B' ]
unshift some:  E {
  type: 'unshift_some',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 326383.1321899891
} [ 'I', 'H' ]
undefined
>
> fixed.dropped
[ 'C', 'B' ]
>
> fixed
[ 'I', 'H', 'G', 'F', 'E', 'D' ]

pop

> fixed.pop()
popped one:  E {
  type: 'pop',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 9037.022995948792
} D
'D'
> fixed
[ 'I', 'H', 'G', 'F', 'E' ]
>

fixed.pop_some(2)
popped some:  E {
  type: 'pop_some',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 31407.385972976685
} [ 'F', 'E' ]
[ 'F', 'E' ]
> fixed
[ 'I', 'H', 'G' ]
>

clear

> fixed.lefted_length
6
> fixed
[]
> fixed.length
0
>

unlimited mode

const {Unlimited,EVENT_DICT} = require("nv-data-fifo")
const {E,ET} = require("nv-facutil-event");

###init

//oet is for notification 
var oet = new ET()
oet.addEventListener(EVENT_DICT.unshift,(r)=>{console.log("unshift one: ",r,r.data)})
oet.addEventListener(EVENT_DICT.unshift_some,(r)=>{console.log("unshift some: ",r,r.data)})


var unlimited = new Unlimited(oet)

//iet is for feedback 
unlimited.iet.addEventListener(EVENT_DICT.pop,(r)=>{console.log("popped one: ",r,r.data)})
unlimited.iet.addEventListener(EVENT_DICT.pop_some,(r)=>{console.log("popped some: ",r,r.data)})

unshift

>     unlimited.unshift('A')
unshift one:  E {
  type: 'unshift',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 11576.488898992538
} A
undefined
>     unlimited.unshift_some('D','C','B')
unshift some:  E {
  type: 'unshift_some',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 33032.11891102791
} [ 'D', 'C', 'B' ]
undefined
>
> unlimited
[ 'D', 'C', 'B', 'A' ]
>

pop

unlimited.pop();
popped one:  E {
  type: 'pop',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 41300.350902080536
} A
'A'

> unlimited.pop_some(2)
popped some:  E {
  type: 'pop_some',
  defaultPrevented: false,
  cancelable: false,
  timeStamp: 73560.28495311737
} [ 'C', 'B' ]
[ 'C', 'B' ]
>
> unlimited
[ 'D' ]
>

clear

> unlimited.clear()
undefined
> unlimited
[]
>

METHODS

fixed

fixed.clear                 fixed.constructor           fixed.dropped
fixed.get_item              fixed.iet                   fixed.lefted_length
fixed.length                fixed.lst_index             fixed.max_size
fixed.oet                   fixed.pop                   fixed.pop_some
fixed.unshift               fixed.unshift_some
fixed[Symbol.iterator]

unlimited

unlimited.clear                 unlimited.constructor           unlimited.get_item
unlimited.iet                   unlimited.length                unlimited.lst_index
unlimited.oet                   unlimited.pop                   unlimited.pop_some
unlimited.unshift               unlimited.unshift_some
unlimited[Symbol.iterator]

LICENSE

  • ISC

Package Sidebar

Install

npm i nv-data-fifo

Weekly Downloads

0

Version

1.0.1

License

ISC

Unpacked Size

14.2 kB

Total Files

6

Last publish

Collaborators

  • ihgazni2