智慧水务管理系统 - 精河县供水工程综合管理平台

writer_buffer.js 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. "use strict";
  2. module.exports = BufferWriter;
  3. // extends Writer
  4. var Writer = require("./writer");
  5. (BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;
  6. var util = require("./util/minimal");
  7. /**
  8. * Constructs a new buffer writer instance.
  9. * @classdesc Wire format writer using node buffers.
  10. * @extends Writer
  11. * @constructor
  12. */
  13. function BufferWriter() {
  14. Writer.call(this);
  15. }
  16. BufferWriter._configure = function () {
  17. /**
  18. * Allocates a buffer of the specified size.
  19. * @function
  20. * @param {number} size Buffer size
  21. * @returns {Buffer} Buffer
  22. */
  23. BufferWriter.alloc = util._Buffer_allocUnsafe;
  24. BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === "set"
  25. ? function writeBytesBuffer_set(val, buf, pos) {
  26. buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)
  27. // also works for plain array values
  28. }
  29. /* istanbul ignore next */
  30. : function writeBytesBuffer_copy(val, buf, pos) {
  31. if (val.copy) // Buffer values
  32. val.copy(buf, pos, 0, val.length);
  33. else for (var i = 0; i < val.length;) // plain array values
  34. buf[pos++] = val[i++];
  35. };
  36. };
  37. /**
  38. * @override
  39. */
  40. BufferWriter.prototype.bytes = function write_bytes_buffer(value) {
  41. if (util.isString(value))
  42. value = util._Buffer_from(value, "base64");
  43. var len = value.length >>> 0;
  44. this.uint32(len);
  45. if (len)
  46. this._push(BufferWriter.writeBytesBuffer, len, value);
  47. return this;
  48. };
  49. /**
  50. * Writes raw bytes without a tag or length prefix.
  51. * @name BufferWriter#raw
  52. * @function
  53. * @param {Uint8Array} value Raw bytes
  54. * @returns {BufferWriter} `this`
  55. */
  56. BufferWriter.prototype.raw = function write_raw_buffer(value) {
  57. var len = value.length >>> 0;
  58. return len ? this._push(BufferWriter.writeBytesBuffer, len, value) : this;
  59. };
  60. function writeStringBufferAscii(val, buf, pos) {
  61. for (var i = 0; i < val.length;)
  62. buf[pos++] = val.charCodeAt(i++);
  63. }
  64. function writeStringBuffer(val, buf, pos) {
  65. if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)
  66. util.utf8.write(val, buf, pos);
  67. else if (buf.utf8Write)
  68. buf.utf8Write(val, pos);
  69. else
  70. buf.write(val, pos);
  71. }
  72. /**
  73. * @override
  74. */
  75. BufferWriter.prototype.string = function write_string_buffer(value) {
  76. var len = util.Buffer.byteLength(value);
  77. this.uint32(len);
  78. if (len)
  79. this._push(len === value.length && len < 40 ? writeStringBufferAscii : writeStringBuffer, len, value);
  80. return this;
  81. };
  82. /**
  83. * Finishes the write operation.
  84. * @name BufferWriter#finish
  85. * @function
  86. * @returns {Buffer} Finished buffer
  87. */
  88. BufferWriter._configure();