alchemy/examples/convert_vector2.rs
Jason Travis Smith 4291a1ef5d Any conversion to bytes now uses a Vec<u8>.
This was changed to make everything easier to use. The mutable buffers
were not working well for combined types. It was move to a growable array
to make these more advanced combined types, other structures, easier to
implement.
2016-04-14 13:33:07 -04:00

85 lines
2.0 KiB
Rust

extern crate alchemy;
extern crate sigils;
use alchemy::U64_BYTES;
use alchemy::{Endianess, Transmutable};
use sigils::vector::Vector2;
/// The size of 2 u64 whole numbers.
/// This would be different if the contained type
/// was something different, like an i16 or f32.
const SIZE_OF_VECTOR_2: usize = U64_BYTES * 2;
/// This just help pretty up the printing of an array of bytes.
fn stringify_array(buffer: &[u8]) -> String
{
let mut result: String;
let mut count: usize;
// Create a new string that starts with just
// the array opening bracket.
result = String::new();
result.push_str("[");
// Loop through the buffer keeping track
// of our place in it.
count = 0usize;
for byte in buffer
{
// Handle priting the last value differently.
if count >= buffer.len() - 1
{
result.push_str(byte.to_string().as_str());
}
else
{
result.push_str(byte.to_string().as_str());
result.push_str(", ");
}
// Mark that we are going to look at
// the next byte in the array.
count += 1;
}
// Add the array closing bracket and
// return the new String.
result.push_str("]");
result
}
pub fn main()
{
let vec: Vector2<u64>;
let final_vec: Vector2<u64>;
let endianess: Endianess;
let mut buffer: Vec<u8>;
// Initialize the variables.
vec = Vector2::<u64>::new(629u64, 1985u64);
buffer = Vec::with_capacity(SIZE_OF_VECTOR_2);
endianess = Endianess::PLATFORM;
println!("Transmuting a Vector2:");
println!("Converting the value {} into and out of an array of bytes.",
vec);
println!("Buffer starts as: {}", stringify_array(buffer.as_slice()));
// Convert the Vector2 into an array of bytes.
buffer = vec.to_bytes(endianess);
println!("Buffer contains: {}", stringify_array(buffer.as_slice()));
// Convert the array of bytes into a Vector2.
final_vec = Vector2::from_bytes(buffer.as_slice(), endianess);
println!("The buffer converts back to: {}", final_vec);
}