123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- doctype 5
- html(lang="en")
- head
- meta(charset="utf-8")
- title "ref" documentation v#{package.version}
- meta(name="description", content=package.description)
- meta(name="keywords", content=['node.js', package.name].concat(package.keywords).join(', '))
- meta(name="author", content="Nathan Rajlich")
- meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1")
- link(rel="stylesheet", href="stylesheets/hightlight.css")
- link(rel="stylesheet", href="stylesheets/base.css")
- link(rel="stylesheet", href="stylesheets/skeleton.css")
- link(rel="stylesheet", href="stylesheets/layout.css")
- link(rel="shortcut icon", href="images/favicon.ico")
- link(rel="apple-touch-icon", href="images/apple-touch-icon.png")
- link(rel="apple-touch-icon", sizes="72x72", href="images/apple-touch-icon-72x72.png")
- link(rel="apple-touch-icon", sizes="114x114", href="images/apple-touch-icon-114x114.png")
- body
- .container
- .columns.three.logo
- a(href="")
- h1 #{package.name}
- span.pointer *
- span.version v#{package.version}
- .columns.thirteen.subtitle
- h3= package.description
- .columns.sixteen.intro
- h4 What is <code>ref</code>?
- p
- code ref
- | is a native addon for
- a(href="http://nodejs.org") Node.js
- | that aids in doing C programming in JavaScript, by extending
- | the built-in
- a(href="http://nodejs.org/api/buffer.html")
- code Buffer
- | class
- | with some fancy additions like:
- ul
- li Getting the memory address of a Buffer
- li Checking the endianness of the processor
- li Checking if a Buffer represents the NULL pointer
- li Reading and writing "pointers" with Buffers
- li Reading and writing C Strings (NULL-terminated)
- li Reading and writing JavaScript Object references
- li Reading and writing
- strong int64_t
- | and
- strong uint64_t
- | values
- li A "type" convention to define the contents of a Buffer
- p
- | There is indeed a lot of
- em meat
- | to
- code ref
- | , but it all fits together in one way or another in the end.
- br
- | For simplicity,
- code ref
- | 's API can be broken down into 3 sections:
- a.nav.columns.five(href='#exports')
- h4 ref <code>exports</code>
- p
- | All the static versions of
- code ref
- | 's functions and default "types" available on the exports returned from
- code require('ref')
- | .
- a.nav.columns.five(href='#types')
- h4 <em>"type"</em> system
- p
- | The
- em "type"
- | system allows you to define a "type" on any Buffer instance, and then
- | use generic
- code ref()
- | and
- code deref()
- | functions to reference and dereference values.
- a.nav.columns.five(href='#extensions')
- h4 <code>Buffer</code> extensions
- p
- code Buffer.prototype
- | gets extended with some convenience functions. These all just mirror
- | their static counterpart, using the Buffer's
- code this
- | variable as the
- code buffer
- | variable.
- hr
- .columns.eight.section.exports
- a(name="exports")
- a(href="#exports")
- h2 ref exports
- .columns.sixteen.intro
- p
- | This section documents all the functions exported from
- code require('ref')
- | .
- each doc in exports
- if (!doc.ignore)
- .columns.sixteen.section
- a(name='exports-' + doc.name)
- a(href='#exports-' + doc.name)
- isFunc = doc.type == 'method' || doc.isPrivate
- h3
- | ref.#{doc.name}
- if (isFunc)
- | (
- each param, i in doc.paramTypes
- span.param #{param.types.join('|')} #{param.name}
- if (i + 1 < doc.paramTypes.length)
- | ,
- | )
- if (doc.returnType)
- |
- span.rtn → #{doc.returnType.types.join('|')}
- if (!isFunc)
- |
- span.rtn ⇒ #{doc.type}
- if (doc.paramTypes.length > 0 || doc.returnType)
- ul
- each param in doc.paramTypes
- li #{param.name} - !{param.description}
- if (doc.returnType)
- li
- strong Return:
- | !{doc.returnType.description}
- != (doc && doc.description.full || '').replace(/\<br ?\/?\>/g, ' ')
- hr
- .columns.eight.section.types
- a(name="types")
- a(href="#types")
- h2
- em "type"
- | system
- .columns.sixteen.intro.types
- p
- | A "type" in
- code ref
- | is simply an plain 'ol JavaScript Object, with a set
- | of expected properties attached that implement the logic for getting
- | & setting values on a given
- code Buffer
- | instance.
- p
- | To attach a "type" to a Buffer instance, you simply attach the "type"
- | object to the Buffer's <code>type</code> property.
- code ref
- | comes with a set of commonly used types which are described in this
- | section.
- h4 Creating your own "type"
- p
- | It's trivial to create your own "type" that reads and writes your
- | own custom datatype/class to and from Buffer instances using
- code ref
- | 's unified API.
- br
- | To create your own "type", simply create a JavaScript Object with
- | the following properties defined:
- table
- tr
- th Name
- th Data Type
- th Description
- tr
- td: code size
- td: code Number
- td The size in bytes required to hold this datatype.
- tr
- td: code indirection
- td: code Number
- td
- | The current level of indirection of the buffer. When defining
- | your own "types", just set this value to <code>1</code>.
- tr
- td: code get
- td: code Function
- td
- | The function to invoke when
- a(href="#exports-get")
- code ref.get()
- | is invoked on a buffer of this type.
- tr
- td: code set
- td: code Function
- td
- | The function to invoke when
- a(href="#exports-set")
- code ref.set()
- | is invoked on a buffer of this type.
- tr
- td: code name
- td: code String
- td
- em (Optional)
- | The name to use during debugging for this datatype.
- tr
- td: code alignment
- td: code Number
- td
- em (Optional)
- | The alignment of this datatype when placed inside a struct.
- | Defaults to the type's
- code size
- | .
- h4 The built-in "types"
- p
- | Here is the list of
- code ref
- | 's built-in "type" Objects. All these built-in "types" can be found
- | on the
- code ref.types
- | export Object. All the built-in types use "native endianness" when
- | multi-byte datatypes are involved.
- each doc in types
- if (!doc.ignore)
- .columns.sixteen.section
- a(name='types-' + doc.name)
- a(href='#types-' + doc.name)
- h3 types.#{doc.name}
- != doc.description.full.replace(/\<br ?\/?\>/g, ' ')
- hr
- .columns.eight.section.exports
- a(name="extensions")
- a(href="#extensions")
- h2 Buffer extensions
- .columns.sixteen.intro
- p
- code Buffer.prototype
- | gets extended with some convenience functions that you can use in
- | your modules and/or applications.
- each doc in extensions
- if (!doc.ignore)
- .columns.sixteen.section
- a(name='extensions-' + doc.name)
- a(href='#extensions-' + doc.name)
- h3 Buffer##{doc.name}()
- if (doc.name === 'inspect')
- != doc.description.full.replace(/\<br ?\/?\>/g, ' ')
- else
- p
- | Shorthand for
- a(href='#exports-' + doc.name)
- code ref.#{doc.name}(this, …)
- | .
- != (doc.ref && doc.ref.description.full || '').replace(/\<br ?\/?\>/g, ' ')
- .ribbon
- a(href="https://github.com/TooTallNate/ref", rel="me") Fork me on GitHub
- script(src="scripts/jquery-1.7.2.min.js")
- script(src="scripts/main.js")
|