make yourself some VectorClock instances
npm install vector-clock-class#vector-clock-class#
A [vector clock][vclock-paper] is a data structure for keeping
track of logical time for a set of events, allowing them to be partially
ordered.
Install it with
```
npm install --save vector-clock-class
`javascript
var Clock = require('vector-clock-class')
Clock(
String | Number id,
(Integer start) | null
) -> vector_clock
`
- id should distinguish this clock from all the others. It isid
saved to the class instance as start
- is an optional parameter which sets the version number from which the
clock should start counting.
In the methods below, id is a hashable object. Semantically, it should be the
unique identifier of another clock.
###vector_clock.clock###
The vector clock-- a map from source_ids to version numbers. Like the C
function from [Lamport's paper][vclock-paper]. It's worth noting that this
means this module plays well with [npm.im/vectorclock][vectorclock], although this
breaks the contract somewhat, since mixu's library
expects object literals.
###vector_clock.get(id) -> Integer version###
Returns the version number for the specified id, or -Infinity if it cannot be
found.
###vector_clock.update(id, version) -> Integer|false###
Bump the entry for a given id. version is required to ensure updates fromvector_clock
this which occur after the bump have a later version number.version
Note that the is optional only if id === vector_clock.id. Thefalse
return value is if version is not specified when it should be.id
Otherwise it is the new version number for .
###vector_clock.createReadStream() -> stream###
This method creates a stream; randomly orders the keys of the clock; pushes
onto a newly-created readableStream one object of form {id: key, version: n}vector_clock.update(vector_clock.id)`. This facilitates easily creating
per key; and then closes the stream. It also
digests of all the updates the clock has seen, useful for the [scuttlebutt][]
There's already another venerable vector clock library out
there. This one more or less grew out of my [scuttlebutt][] implementation. It
differs from [vectorclock][] in it's scope (slightly smaller), that it presents
a way to stream clock data out of it, and it's API.
[vclock-paper]: http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf
[vectorclock]: https://npmjs.org/package/vectorclock
[scuttlebutt]: https://github.com/AWinterman/simple-scuttle