ByteBuffer.vala 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. namespace Invercargill.DataStructures {
  2. public class ByteBuffer : Buffer<uint8>, Hashable, Sticky<BinaryData, uint8>, BinaryData, ReadOnlyAddressableBytes, AddressableBytes {
  3. public ByteBuffer(uint size) {
  4. base(size);
  5. }
  6. public uint hash_code() {
  7. return aggregate<uint>(5381, (h, b) => h * 33 + b);
  8. }
  9. protected BinaryData adhere(Enumerable<uint8> enumerable) {
  10. return enumerable.assert_promotion<BinaryData>();
  11. }
  12. public ByteBuffer.from_enumerable(Enumerable<uint8> data) {
  13. base.take_array(data.to_array());
  14. }
  15. public ByteBuffer.from_bytes(Bytes data) {
  16. base.take_array(data.get_data());
  17. }
  18. public ByteBuffer.from_byte_array(uint8[] data) {
  19. base.take_array(data);
  20. }
  21. public ByteBuffer.from_base64(string data) {
  22. base.take_array(Base64.decode(data));
  23. }
  24. public ByteBuffer.from_hex(string data) {
  25. var groomed = data.replace(" ", "").replace("-", "").replace(":", "").replace("0x", "");
  26. base(groomed.length/2);
  27. for(var i = 0; i < groomed.length/2; i++) {
  28. non_error(() => this[i] = (uint8)uint.parse(groomed[i*2:(i+1)*2], 16));
  29. }
  30. }
  31. }
  32. }