BinaryData.vala 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using Invercargill.DataStructures;
  2. namespace Invercargill {
  3. public interface BinaryData : Enumerable<uint8> {
  4. public virtual string to_raw_string(bool null_terminate = true) {
  5. Enumerable<uint8> data = this;
  6. if(null_terminate) {
  7. data.concat(Invercargill.single<uint8>(0));
  8. }
  9. return (string)data.to_array();
  10. }
  11. public virtual string to_base64() {
  12. return Base64.encode(to_array());
  13. }
  14. public virtual string to_hex() {
  15. return to_string(i => i.to_string("%x"));
  16. }
  17. public virtual Bytes to_bytes() {
  18. return new Bytes(to_array());
  19. }
  20. public virtual ByteBuffer to_byte_buffer() {
  21. return new ByteBuffer.from_enumerable(this);
  22. }
  23. public virtual BinaryData slice(int start, int end) {
  24. return skip(start).take(end-start).assert_promotion<BinaryData>();
  25. }
  26. public virtual ByteBuffer read(int start, int length) {
  27. return new ByteBuffer.from_enumerable(skip(start).take(length));
  28. }
  29. public virtual size_t write_to(void* array, size_t max_size) {
  30. var data = to_array();
  31. var size = max_size > data.length ? data.length : max_size;
  32. Memory.copy(array, data, size);
  33. return size;
  34. }
  35. }
  36. }