nv-facutil-generator

1.0.6 • Public • Published

nv-facutil-generator

  • nv-facutil-generator
  • generator with .prev ,history cache

install

  • npm install nv-facutil-generator

usage

example

notify style async generator

const {creat_async_noti_gen} = require("nv-facutil-generator");

var anoti = creat_async_noti_gen();
> anoti
Object [AsyncGenerator] {
  type: { resolve: 0, reject: 1 },
  noti: [Function: noti]
}
>



var p = (async () => {
    for await (let v of anoti) { 
        console.log(v)
    }
})();


> anoti.noti(100)
> 100

> anoti.noti(999,anoti.type.resolve)
> 999


> anoti.noti('some-error',anoti.type.reject)
undefined
> Uncaught 'some-error'
>

shift unshift

const {
    syncg_unshift,
    syncg_push,
    syncg_prextend,
    syncg_extend,
    asyncg_unshift,
    asyncg_push,
    asyncg_prextend,
    asyncg_extend,
} = require("nv-facutil-generator")

async function* agen0() {
  var i = 0;
  while (i < 3) {
    yield i++;
  }
}

async function* agen1() {
  var i = 3;
  while (i < 5) {
    yield i++;
  }
}

async function* agen2() {
  var i = 5;
  while (i < 8) {
    yield i++;
  }
}

async function* agen3() {
  var i = 8;
  while (i < 10) {
    yield i++;
  }
}

async function* agen4() {
  var i = 10;
  while (i < 12) {
    yield i++;
  }
}

async function * asyncg_push(sg,g) {
    yield * sg;
    yield * g;
}


async function * asyncg_unshift(sg,g) {
    yield * g;
    yield * sg;
}



(async function() {
    var sg = agen2()
    sg = asyncg_prextend(sg,[agen0(),agen1()])
    sg = asyncg_extend(sg,[agen3(),agen4()])
    for await (num of sg) {
      console.log(num);
    }
})();

/*
> 0
1
2
3
4
5
6
7
8
9
10
11

*/


> var g = sync_cirarr_from_fst([1,2,3,4])
> g.next()
{ value: 1, done: false }
> g.next()
{ value: 2, done: false }
> g.next()
{ value: 3, done: false }
> g.next()
{ value: 4, done: false }
> g.next()
{ value: 1, done: false }
> g.next()
{ value: 2, done: false }
> g.next()
{ value: 3, done: false }
> g.next()
{ value: 4, done: false }
>

> var g = sync_cirarr_from_lst([1,2,3,4])
undefined
> g.next()
{ value: 4, done: false }
> g.next()
{ value: 3, done: false }
> g.next()
{ value: 2, done: false }
> g.next()
{ value: 1, done: false }
> g.next()
{ value: 4, done: false }
> g.next()
{ value: 3, done: false }
> g.next()
{ value: 2, done: false }
> g.next()
{ value: 1, done: false }
>

prev

const {SyncGen,is_prev_end} = require("nv-facutil-generator")

function *gen(arr) {for(let i=0;i<arr.length;i++) {yield(arr[i])}}
var g0 = new SyncGen(gen,[1,2,3,4,5])
g0.history_size = 2

> g0
{
  circular: false,
  history_size: 2,
  history: [],
  his_cursor: -1,
  inuse: 'false <used when .next(force=false),default .next(true)>'
}
> g0.next()
{ value: 1, done: false }
> g0.next()
{ value: 2, done: false }
> g0.next()
{ value: 3, done: false }
> g0.prev()
{ value: 2, done: false }
> g0.prev()
{ value: Symbol(empty), done: false }
> g0

> g0.prev()
{ value: Symbol(empty), done: false }
> g0


> g0.next()
{ value: 2, done: false }
> g0.next()
{ value: 3, done: false }
> g0.next()
{ value: 4, done: false }
> g0.next()
{ value: 5, done: false }
> g0.next()
{ value: undefined, done: true }
> g0

> g0.next()
{ value: undefined, done: true }
>

> g0.prev()
{ value: 5, done: false }
> g0.next()
{ value: undefined, done: true }
> g0.next()
{ value: undefined, done: true }
> g0.prev()
{ value: 5, done: false }
> g0.prev()
{ value: 4, done: false }
> g0.prev()
{ value: Symbol(empty), done: false }
> g0.next()
{ value: 4, done: false }
>


function *gen(arr) {for(let i=0;i<arr.length;i++) {yield(arr[i])}}
var g0 = new SyncGen(gen,[1,2,3,4,5])
g0.history_size = 2
g0.circular = true
> g0
{
  circular: true,
  history_size: 2,
  history: [],
  his_cursor: -1,
  inuse: 'false <used when .next(force=false),default .next(true)>'
}
> g0.next
g0.next

> g0.next()
{ value: 1, done: false }
> g0.next()
{ value: 2, done: false }
> g0.next()
{ value: 3, done: false }
> g0.next()
{ value: 4, done: false }
> g0.next()
{ value: 5, done: false }
> g0.next()
{ value: 1, done: false }
> g0
{
  circular: true,
  history_size: 2,
  history: [ { value: 5, done: false }, { value: 1, done: false } ],
  his_cursor: 1,
  inuse: 'false <used when .next(force=false),default .next(true)>'
}
> g0.prev()
{ value: 5, done: false }
> g0.next()
{ value: 1, done: false }
> g0.next()
{ value: 2, done: false }
> g0.next()
{ value: 3, done: false }
> g0.next()
{ value: 4, done: false }
> g0.next()
{ value: 5, done: false }
> g0.next()
{ value: 1, done: false }
> g0.next()
{ value: 2, done: false }
> g0.next()
{ value: 3, done: false }
> g0.prev()
{ value: 2, done: false }
> g0.next()
{ value: 3, done: false }
>
> g0.prev()
{ value: 2, done: false }
> g0.prev()
{ value: Symbol(empty), done: false }
> g0.prev()
{ value: Symbol(empty), done: false }
>
>
> is_prev_end(g0.prev())
true
>

###METHODS

g0.args                  g0.circular              g0.constructor           g0.gen                   g0.his_cursor
g0.history               g0.history_size          g0.inuse                 g0.is_prev_end           g0.launch
g0.next                  g0.prev                  g0.reset

sync_combo

const {SyncGen,is_prev_end,sync_combo} = require("nv-facutil-generator")
function *gen(arr) {for(let r of arr) { yield(r)}}

var g0 = new SyncGen(gen,[1,2,3])
var g1 = new SyncGen(gen,['A','B'])
var g2 = new SyncGen(gen,[100,200,300])

var gs = [g0,g1,g2]

var g = sync_combo(gs)

> Array.from(g)
[
  [ 1, 'A', 100 ], [ 1, 'A', 200 ],
  [ 1, 'A', 300 ], [ 1, 'B', 100 ],
  [ 1, 'B', 200 ], [ 1, 'B', 300 ],
  [ 2, 'A', 100 ], [ 2, 'A', 200 ],
  [ 2, 'A', 300 ], [ 2, 'B', 100 ],
  [ 2, 'B', 200 ], [ 2, 'B', 300 ],
  [ 3, 'A', 100 ], [ 3, 'A', 200 ],
  [ 3, 'A', 300 ], [ 3, 'B', 100 ],
  [ 3, 'B', 200 ], [ 3, 'B', 300 ]
]
>
> var g = sync_combo(gs)
> g.next()
{ value: [ 1, 'A', 100 ], done: false }
> g.next()
{ value: [ 1, 'A', 200 ], done: false }
> g.next()
{ value: [ 1, 'A', 300 ], done: false }
> g.next()
{ value: [ 1, 'B', 100 ], done: false }
>

wrq

const {sync_cirarr_from_fst} = require("nv-facutil-generator")
function *gen(arr) {for(let r of arr) { yield(r)}}

var g0 = sync_cirarr_from_fst([10])
var g1 = sync_cirarr_from_fst([20])
var g2 = sync_cirarr_from_fst([30])

var gs = [
    {g:g0,weight:1},
    {g:g1,weight:2},
    {g:g2,weight:3},
]


> var g =  sync_wrq(gs)
>
> g.next()
{ value: [ 10, 20, 20, 30, 30, 30 ], done: false }
> g.next()
{ value: [ 10, 20, 20, 30, 30, 30 ], done: false }
> g.next()
{ value: [ 10, 20, 20, 30, 30, 30 ], done: false }
> g.next()
{ value: [ 10, 20, 20, 30, 30, 30 ], done: false }
>

rwq

const {sync_cirarr_from_fst} = require("nv-facutil-generator")
function *gen(arr) {for(let r of arr) { yield(r)}}

var g0 = sync_cirarr_from_fst([10,100,1000])
var g1 = sync_cirarr_from_fst([20,2,2.2])
var g2 = sync_cirarr_from_fst([30])

var gs = [
    {g:g0,weight:1},
    {g:g1,weight:2},
    {g:g2,weight:3},
]



> var g = sync_rwq(gs)
undefined
> g.next()
{ value: [ 10, 20, 30, 2, 30, 30 ], done: false }
> g.next()
{ value: [ 100, 2.2, 30, 20, 30, 30 ], done: false }
> g.next()
{ value: [ 1000, 2, 30, 2.2, 30, 30 ], done: false }
> g.next()
{ value: [ 10, 20, 30, 2, 30, 30 ], done: false }
> g.next()
{ value: [ 100, 2.2, 30, 20, 30, 30 ], done: false }
> g.next()
{ value: [ 1000, 2, 30, 2.2, 30, 30 ], done: false }
> g.next()
{ value: [ 10, 20, 30, 2, 30, 30 ], done: false }
> g.next()
{ value: [ 100, 2.2, 30, 20, 30, 30 ], done: false }
>

G

> var g = G.ary([12,13,14])
> g
{ v: 12, i: 0 }
> g.next_
{ v: 13, i: 1 }
> g.next_
{ v: 14, i: 2 }
> g.next_
{ v: 12, i: 0 }
> g.next_
{ v: 13, i: 1 }
> g.prev_
{ v: 12, i: 0 }
> g.prev_
{ v: 14, i: 2 }
> g.prev_
{ v: 13, i: 1 }
>
> g.



g.$regis_fst_to_lst_trans    g.$regis_is_fst              g.$regis_is_lst
g.$regis_lst_to_fst_trans    g.$regis_next                g.$regis_prev
g.$unregis_fst_to_lst_trans  g.$unregis_lst_to_fst_trans  g.ary_
g.constructor                g.curr_                      g.db_
g.next_                      g.prev_


G.ary                   G.ary_fst_to_lst_trans  G.ary_is_fst            G.ary_is_lst
G.ary_lst_to_fst_trans  G.ary_next              G.ary_prev              G.empty

API

  • function is_sync_gfunc(f)
  • function is_async_gfunc(f)
  • function is_sync_generator(g)
  • function is_async_generator(g)
  • function * syncg_push(sg,g)
  • function * syncg_unshift(sg,g)
  • function * syncg_prextend(sg,garr)
  • function * syncg_extend(sg,garr)
  • async function * asyncg_push(ag,g)
  • async function * asyncg_unshift(ag,g)
  • async function * asyncg_prextend(ag,garr)
  • async function * asyncg_extend(ag,garr)
  • function * sync_cirarr_from_fst(arr)
  • function * sync_cirarr_from_lst(arr)
  • function * sync_combo(sgs)
  • function * sync_wrq(gs)
  • function * sync_rwq(gs)

LICENSE

  • ISC

Readme

Keywords

none

Package Sidebar

Install

npm i nv-facutil-generator

Weekly Downloads

5

Version

1.0.6

License

ISC

Unpacked Size

18.5 kB

Total Files

3

Last publish

Collaborators

  • ihgazni2