Update README.
This commit is contained in:
parent
360152a84f
commit
404a798b20
111
README.md
111
README.md
@ -33,7 +33,7 @@ While the runtime provides methods for directly acquring and releasing memory, i
|
|||||||
|Boolean|x02|--|True or false|
|
|Boolean|x02|--|True or false|
|
||||||
|Natural|x10|--|Non-negative integers|
|
|Natural|x10|--|Non-negative integers|
|
||||||
|Integer|x11|--|Integers|
|
|Integer|x11|--|Integers|
|
||||||
|Decimal|x12|--|Floating-point representable numbers|
|
|Significant|x13|--|Fixed-precision, variable-magnitude numbers|
|
||||||
|Block|x1e|size|Constant-sized series of bytes|
|
|Block|x1e|size|Constant-sized series of bytes|
|
||||||
|Sequence|x1f|--|Variable-sized series of bytes|
|
|Sequence|x1f|--|Variable-sized series of bytes|
|
||||||
|Array|x22|size, type|Constant-sized, ordered collection|
|
|Array|x22|size, type|Constant-sized, ordered collection|
|
||||||
@ -48,6 +48,7 @@ Type building functions are used to generate identifiers used in the constructio
|
|||||||
* `boolean()`
|
* `boolean()`
|
||||||
* `natural()`
|
* `natural()`
|
||||||
* `integer()`
|
* `integer()`
|
||||||
|
* `significant()`
|
||||||
* `block(size)`
|
* `block(size)`
|
||||||
* `sequence()`
|
* `sequence()`
|
||||||
* `array(size, type)`
|
* `array(size, type)`
|
||||||
@ -62,6 +63,78 @@ let type_id = block(4);
|
|||||||
let list = List::new(type_id);
|
let list = List::new(type_id);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Code Examples
|
||||||
|
|
||||||
|
### Example 1
|
||||||
|
```
|
||||||
|
const VEC3F :usize = 0x200;
|
||||||
|
const VEC3U :usize = 0x201;
|
||||||
|
const MESH :usize = 0x202;
|
||||||
|
|
||||||
|
fn vec3f(x:f64, y:f64, z:f64) -> szun::Record
|
||||||
|
{
|
||||||
|
use szun::*;
|
||||||
|
Record::with_values(VEC3F, vec![
|
||||||
|
*Significant::with(x),
|
||||||
|
*Significant::with(y),
|
||||||
|
*Significant::with(z),
|
||||||
|
]).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn vec3u(x:u64, y:u64, z:u64) -> szun::Record
|
||||||
|
{
|
||||||
|
use szun::*;
|
||||||
|
Record::with_values(VEC3U, vec![
|
||||||
|
*Natural::with(x),
|
||||||
|
*Natural::with(y),
|
||||||
|
*Natural::with(z),
|
||||||
|
]).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main()
|
||||||
|
{
|
||||||
|
use szun::*;
|
||||||
|
|
||||||
|
// Vec3f
|
||||||
|
Schema::with(vec![
|
||||||
|
("x", significant()),
|
||||||
|
("y", significant()),
|
||||||
|
("z", significant()),
|
||||||
|
]).bind(VEC3F);
|
||||||
|
|
||||||
|
// Vec3u
|
||||||
|
Schema::with(vec![
|
||||||
|
("x", natural()),
|
||||||
|
("y", natural()),
|
||||||
|
("z", natural()),
|
||||||
|
]).bind(VEC3U);
|
||||||
|
|
||||||
|
// Mesh
|
||||||
|
Schema::with(vec![
|
||||||
|
("vertices", list(record(VEC3F))),
|
||||||
|
("faces", list(record(VEC3U))),
|
||||||
|
]).bind(MESH);
|
||||||
|
|
||||||
|
let pyramid = Record::with(MESH, vec![
|
||||||
|
("vertices", *List::with(record(VEC3F), vec![
|
||||||
|
*vec3f(0.0, 2.0, 0.0),
|
||||||
|
*vec3f(1.0, 0.0, 1.0),
|
||||||
|
*vec3f(1.0, 0.0, -1.0),
|
||||||
|
*vec3f(-1.0, 0.0, -1.0),
|
||||||
|
*vec3f(-1.0, 0.0, 1.0),
|
||||||
|
])),
|
||||||
|
("faces", *List::with(record(VEC3U), vec![
|
||||||
|
*vec3u(0, 1, 2),
|
||||||
|
*vec3u(0, 2, 3),
|
||||||
|
*vec3u(0, 3, 4),
|
||||||
|
*vec3u(0, 4, 1),
|
||||||
|
*vec3u(1, 2, 3),
|
||||||
|
*vec3u(1, 3, 4),
|
||||||
|
])),
|
||||||
|
]).unwrap();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Global Functions
|
## Global Functions
|
||||||
|
|
||||||
`acquire(type) -> Reference`
|
`acquire(type) -> Reference`
|
||||||
@ -81,13 +154,39 @@ release(refer);
|
|||||||
---
|
---
|
||||||
|
|
||||||
`transfer(dst:Reference, src:Reference) -> Result<(),()>`
|
`transfer(dst:Reference, src:Reference) -> Result<(),()>`
|
||||||
|
|
||||||
Move an object from one location to another, clearing the original.
|
Move an object from one location to another, clearing the original.
|
||||||
|
|
||||||
|
```
|
||||||
|
let original = Sequence::with("Hello, world!");
|
||||||
|
let target = Sequence::new();
|
||||||
|
|
||||||
|
println!("{}", original.get()); // prints "Hello, world!"
|
||||||
|
println!("{}", target.get()); // prints ""
|
||||||
|
|
||||||
|
transfer(target, original);
|
||||||
|
|
||||||
|
println!("{}", original.get()); // prints ""
|
||||||
|
println!("{}", target.get()); // prints "Hello, world!"
|
||||||
|
```
|
||||||
---
|
---
|
||||||
|
|
||||||
`copy(dst:Reference, src:Reference) -> Result<(),()>`
|
`copy(dst:Reference, src:Reference) -> Result<(),()>`
|
||||||
|
|
||||||
Copy the contents of an objcet to another location, keeping the original.
|
Copy the contents of an objcet to another location, keeping the original.
|
||||||
|
|
||||||
|
```
|
||||||
|
let original = Sequence::with("Hello, world!");
|
||||||
|
let target = Sequence::new();
|
||||||
|
|
||||||
|
println!("{}", original.get()); // prints "Hello, world!"
|
||||||
|
println!("{}", target.get()); // prints ""
|
||||||
|
|
||||||
|
copy(target, original);
|
||||||
|
|
||||||
|
println!("{}", original.get()); // prints "Hello, world!"
|
||||||
|
println!("{}", target.get()); // prints "Hello, world!"
|
||||||
|
```
|
||||||
---
|
---
|
||||||
|
|
||||||
## Encoding
|
## Encoding
|
||||||
@ -97,8 +196,9 @@ Encoding converts data between runtime memory and binary serialization.
|
|||||||
`encode_raw(refer:Reference) -> Vec<u8>`
|
`encode_raw(refer:Reference) -> Vec<u8>`
|
||||||
`encode_tag(refer:Reference) -> Vec<u8>`
|
`encode_tag(refer:Reference) -> Vec<u8>`
|
||||||
|
|
||||||
Serializes an object into binary encoding.
|
Serializes an object into binary encoding.
|
||||||
The raw variant does not produce a tag prefix for the root object.
|
The raw variant does not produce a tag prefix for the root object.
|
||||||
|
The tag variant only produces a tag prefix.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -106,8 +206,9 @@ The raw variant does not produce a tag prefix for the root object.
|
|||||||
`decode_raw(data:&Vec<u8>, type_id:usize, index:&mut usize) -> Result<Type,()>`
|
`decode_raw(data:&Vec<u8>, type_id:usize, index:&mut usize) -> Result<Type,()>`
|
||||||
`decode_tag(data:&Vec<u8>, index:&mut usize) -> Result<usize,()>`
|
`decode_tag(data:&Vec<u8>, index:&mut usize) -> Result<usize,()>`
|
||||||
|
|
||||||
Parses a valid binary encoding and produces the represented object.
|
Parses a valid binary encoding and produces the represented object.
|
||||||
The raw variant does not decode a tag prefix on the root object.
|
The raw variant does not decode a tag prefix on the root object.
|
||||||
|
The tag variant only decodes a tag prefix.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -1,4 +1 @@
|
|||||||
fn main()
|
fn main() { szun::test(); }
|
||||||
{
|
|
||||||
szun::test();
|
|
||||||
}
|
|
||||||
|
@ -3,8 +3,7 @@
|
|||||||
mod tag;
|
mod tag;
|
||||||
mod util;
|
mod util;
|
||||||
mod runtime;
|
mod runtime;
|
||||||
mod interface;
|
mod interface; pub use interface::*;
|
||||||
pub use interface::*;
|
|
||||||
mod encoding; pub use encoding::*;
|
mod encoding; pub use encoding::*;
|
||||||
|
|
||||||
pub fn test() {
|
pub fn test() {
|
||||||
|
Reference in New Issue
Block a user