npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nv-data-dlink

v1.0.2

Published

Double Linked List

Downloads

3

Readme

nv-data-dlink

  • nv-data-dlink is very simple util of Double Linked List
  • two mode:
  • easy-mode no need to init with queue
  • queue-mode has more apis

install

  • npm install nv-data-dlink

usage

easy mode

  • const Easy = require("nv-data-dlink").Easy

examples

###init

var nd = new Easy({'abcd':'ABCD'})
nd.add_prev([1,2,3,4])
nd.prev.add_next(8)
nd.prev.add_prev("this-is-a-string")
nd.add_next(new Set([10,20,30]))
nd.next.add_next(new Map([[1,2],[3,4]]))
nd.next.next.add_prev(Symbol('sym'))

###relations

nd.index
nd.psibs
nd.fsibs
nd.head
nd.head.is_head()
nd.tail
nd.tail.is_tail()
> nd.index
3
> nd.psibs
[ [ 1, 2, 3, 4 ], this-is-a-string, 8 ]
> nd.fsibs
[ Set { 10, 20, 30 }, Symbol(sym), Map { 1 => 2, 3 => 4 } ]
> nd.head
[ 1, 2, 3, 4 ]
> nd.head.is_head()
true
> nd.tail
Map { 1 => 2, 3 => 4 }
> nd.tail.is_tail()
true
>

append,prepend,disconn

var nd1 = new Easy(function tst(){})
var nd2 = new Easy(Array)
nd.prepend(nd1)
nd.append(nd2)
nd.all
nd.disconn()
nd1.all

> nd.prepend(nd1)
[Function: tst]
> nd.append(nd2)
[Function: Array]
> nd.all
[
  [ 1, 2, 3, 4 ],
  this-is-a-string,
  8,
  [Function: tst],
  { abcd: 'ABCD' },
  [Function: Array],
  Set { 10, 20, 30 },
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]
> nd.disconn()
{ abcd: 'ABCD' }
> nd1.all
[
  [ 1, 2, 3, 4 ],
  this-is-a-string,
  8,
  [Function: tst],
  [Function: Array],
  Set { 10, 20, 30 },
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]
>

###swap

var st = nd1.next.next
st.swap(st.prev.prev.prev)
st.all
st.swap(st.prev)
st.all
st.swap(st.prev)
st.all
st.swap(st.tail)
st.swap(st)

>     st.swap(st.prev.prev.prev)
8
>     st.all
[
  [ 1, 2, 3, 4 ],
  this-is-a-string,
  Set { 10, 20, 30 },
  [Function: tst],
  [Function: Array],
  8,
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]
>
undefined
>     st.swap(st.prev)
this-is-a-string
>     st.all
[
  [ 1, 2, 3, 4 ],
  Set { 10, 20, 30 },
  this-is-a-string,
  [Function: tst],
  [Function: Array],
  8,
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]
>     st.swap(st.prev)
[ 1, 2, 3, 4 ]
>     st.all
[
  Set { 10, 20, 30 },
  [ 1, 2, 3, 4 ],
  this-is-a-string,
  [Function: tst],
  [Function: Array],
  8,
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]
>     st.swap(st.tail)
Map { 1 => 2, 3 => 4 }
>     st.swap(st)
Set { 10, 20, 30 }
>

queue mode

  • const Queue = require("nv-data-dlink").Queue

examples

var queue = new Queue()
> queue.size
0
> queue.is_empty()
true
>

###init

var nd = queue.init_with_data({'abcd':'ABCD'})
> queue
[ { abcd: 'ABCD' }, ->, ..., { size: 1 }, ..., ->, { abcd: 'ABCD' } ]
>

###add nodes

nd.add_prev([1,2,3,4])
nd.prev.add_next(8)
nd.prev.add_prev("this-is-a-string")
nd.add_next(new Set([10,20,30]))
nd.next.add_next(new Map([[1,2],[3,4]]))
nd.next.next.add_prev(Symbol('sym'))
> queue.size
7
> Array.from(queue)
[
  [ [ 1, 2, 3, 4 ], 0 ],
  [ this-is-a-string, 1 ],
  [ 8, 2 ],
  [ { abcd: 'ABCD' }, 3 ],
  [ Set { 10, 20, 30 }, 4 ],
  [ Symbol(sym), 5 ],
  [ Map { 1 => 2, 3 => 4 }, 6 ]
]
>
> queue.forEach((r,i)=>{console.log(typeof(r.data))})
object
string
number
object
object
symbol
object
undefined
>

> queue.datas
[
  [ 1, 2, 3, 4 ],
  'this-is-a-string',
  8,
  { abcd: 'ABCD' },
  Set { 10, 20, 30 },
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]
>

###relations

> queue.index_of(nd)
3
>
> queue.get_which(3)
{ abcd: 'ABCD' }
> nd.index
3
>
> queue.find(r=>(r.data instanceof Set))
[ Set { 10, 20, 30 } ]
>

> nd.psibs
[ [ 1, 2, 3, 4 ], this-is-a-string, 8 ]
>
> nd.fsibs
[ Set { 10, 20, 30 }, Symbol(sym), Map { 1 => 2, 3 => 4 } ]

> queue.includes(nd)
true
> queue.includes_data(nd.data)
true
>
> queue.get_id(nd)
'75d19a4e-5a7f-467a-b7d1-2ba629b47984'
> queue.get_node_with_id('75d19a4e-5a7f-467a-b7d1-2ba629b47984')
{ abcd: 'ABCD' }
>
> queue.nodes[5]
Symbol(sym)
>
> queue.distance_between(nd,queue.nodes[5])
-2
> queue.distance_between(queue.nodes[5],nd)
2

###move

queue.qid '44b991c2-441b-4877-ab53-46f87eea5f81'

> var nqueue = queue.move_to()
> nqueue
Queue {}
> nqueue.size
7
> queue.size
0
>
> nqueue.qid
'a3b661b4-a91a-4c47-b549-2e679a8af11f'
>

###pop_range

var queue = nqueue
> queue.nodes
[
  [ 1, 2, 3, 4 ],
  this-is-a-string,
  8,
  { abcd: 'ABCD' },
  Set { 10, 20, 30 },
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]
>
> var from = queue.nodes[3]
> var to = queue.nodes[5]
var nqueue = queue.pop_range(from,to);
> nqueue.nodes
[ { abcd: 'ABCD' }, Set { 10, 20, 30 } ]
>
> queue.nodes
[
  [ 1, 2, 3, 4 ],
  this-is-a-string,
  8,
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]
>

###disconn append

> nqueue.nodes
[ { abcd: 'ABCD' }, Set { 10, 20, 30 } ]
>
var nd0 = nqueue.nodes[0].disconn()
var nd1 = nqueue.nodes[0].disconn()
queue.get_which(2).append(nd0)
nd0.append(nd1)
> queue.nodes
[
  [ 1, 2, 3, 4 ],
  this-is-a-string,
  8,
  { abcd: 'ABCD' },
  Set { 10, 20, 30 },
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]

###split

> var nqueue = queue.split(nd)
undefined
> nqueue
Queue {}
> nqueue.nodes
[
  { abcd: 'ABCD' },
  Set { 10, 20, 30 },
  Symbol(sym),
  Map { 1 => 2, 3 => 4 }
]
> queue.nodes
[ [ 1, 2, 3, 4 ], this-is-a-string, 8 ]
>

###add_with queue

var queue0 = new Queue()
var nd = queue0.init_with_data(1)
nd.add_next(20)
nd.next.add_next(3)
var queue1 = new Queue()
var nd = queue1.init_with_data(4)
nd.add_next(20)
nd.next.add_next(10)
queue0.add_with(queue1)
> queue0.nodes
[ 1, 20, 3, 4, 20, 10 ]
> queue1.nodes
[]
>

sort,reverse

    > queue0.nodes
    [ 1, 20, 3, 4, 20, 10 ]
    >
    > queue0.sort()
    Queue {}
    > queue0.nodes
    [ 1, 3, 4, 10, 20, 20 ]
    >
    > queue0.reverse()
    > queue0.nodes
    [ 20, 20, 10, 4, 3, 1 ]
    >

###insert

queue0.nodes
[ 20, 20, 10, 4, 3, 1 ]
>
queue0.insert_with_data(999,3)
> queue0.nodes
[
  20, 20, 10, 999,
  4,  3,  1
]
>

###splice

queue0.nodes
[
  20, 20, 10, 999,
  4,  3,  1
]
>
var queue1 = new Queue()
queue1.init_from_data_array(['a','b','c'])
> queue1.nodes
[ a, b, c ]
>
queue0.splice(1,2,queue1)
> queue0.nodes
[
  20,  a, b, c,
  999, 4, 3, 1
]
> queue1.nodes
[]
>

###swap

queue0.nodes
[ 20, 999, 4, 3, 1 ]
>
var nd = queue0.head
nd.swap(nd.next.next)
> queue0.nodes
[ 4, 999, 20, 3, 1 ]
>
//swap with queue
nd.swap(nd.queue)
> queue0.nodes
[ 3, 1, 20, 4, 999 ]
>

###swap_inplace

> queue0.nodes
[ 1, 20, 3, 'b', 20, 10 ]
queue0.swap_inplace_with_index(0,2,3,4)
//swap [1,20] with ['b']
> queue0.nodes
[ 'b', 3, 1, 20, 20, 10 ]
>

###swap_with

var q0 = new Queue()
q0.init_from_data_array(['A','B','C'])
var q1 = new Queue()
q1.init_from_data_array(['x','y'])
> q0.swap_with(q1)
undefined
> q0.nodes
[ x, y ]
> q1.nodes
[ A, B, C ]
>

METHODS

easy mode

nd.all                    nd.disconn                nd.distance_to            nd.fsib
nd.fsibs                  nd.get_mids               nd.has_mid_between        nd.head
nd.index                  nd.is_after               nd.is_before              nd.is_head
nd.is_lsib_of             nd.is_neighbor_of         nd.is_rsib_of             nd.is_tail
nd.psib                   nd.psibs                  nd.tail

nd.add_next               nd.add_prev               nd.append                 nd.constructor
nd.is_in_same_queue_with  nd.is_lonely              nd.prepend                nd.split_together_with
nd.swap

nd.data                   nd.id                     nd.next                   nd.prev
nd.qid                    nd.queue

queue mode

q.QHT                      q.add_with                 q.constructor              q.datas
q.distance_between         q.fforeach                 q.find                     q.forEach
q.from_to_foreach          q.get_id                   q.get_node_with_id         q.get_which
q.head                     q.ids                      q.includes                 q.includes_data
q.index_of                 q.indexes_of_data          q.init_from_data_array     q.init_with_data
q.insert_head              q.insert_tail              q.insert_with_data         q.insert_with_node
q.is_empty                 q.move_to                  q.next_data_iter           q.next_entry_iter
q.next_node_iter           q.nodes                    q.pforeach                 q.pop_range
q.prev_data_iter           q.prev_entry_iter          q.prev_node_iter           q.reset
q.reverse                  q.rm_range                 q.size                     q.sort
q.splice                   q.split                    q.swap_inplace_with_index  q.swap_inplace_with_node
q.swap_with                q.tail

q.id                       q.next                     q.prev                     q.qid
q.queue

LICENSE

  • ISC