Spec-Zone.ru › Pony

Writer

[Источник]

Буфер для построения сообщений.

Writer предоставляет способ создания последовательностей байтов с помощью стандартных кодировок данных. Writer управляет базовыми массивами и размерами. Это полезно для кодирования данных для отправки по сети или сохранения в файле. После построения сообщения вы можете вызвать done() для получения ByteSeq сообщения, а затем повторно использовать Writer для создания нового сообщения.

Например, предположим, что у нас есть сетевой протокол на основе TCP, где сообщения состоят из следующего:

  • message_length - количество байтов в сообщении как 32-битное целое число в формате big-endian
  • list_size - количество элементов в следующем списке элементов как 32-битное целое число в формате big-endian
  • ноль или более элементов следующих данных:
  • 64-битное число с плавающей точкой в формате big-endian
  • строка, начинающаяся с 32-битного целого числа в формате big-endian, указывающего длину строки, за которым следует количество байтов, представляющих строку

Сообщение будет выглядеть примерно так:

[message_length][list_size][float1][string1][float2][string2]...

Следующая программа использует буфер записи для кодирования массива кортежей в виде сообщения этого типа:

use "buffered"

actor Main
  new create(env: Env) =>
    let wb = Writer
    let messages = [[(F32(3597.82), "Anderson"); (F32(-7979.3), "Graham")]
                    [(F32(3.14159), "Hopper"); (F32(-83.83), "Jones")]]
    for items in messages.values() do
      wb.i32_be((items.size() / 2).i32())
      for (f, s) in items.values() do
        wb.f32_be(f)
        wb.i32_be(s.size().i32())
        wb.write(s.array())
      end
      let wb_msg = Writer
      wb_msg.i32_be(wb.size().i32())
      wb_msg.writev(wb.done())
      env.out.writev(wb_msg.done())
    end
class ref Writer

Конструкторы

create

[Источник]

new iso create()
: Writer iso^

Возвращает

  • Writer iso^

Открытые функции

reserve_chunks

[Источник]

Зарезервировать место для блоков размером size'.

Это необходимо вызывать после каждого вызова done, так как done сбрасывает блоки.

fun ref reserve_chunks(
  size': USize val)
: None val

Параметры

  • size': USize значение

Возвращает

  • None значение

reserve_current

[Источник]

Зарезервировать место для size байт в _current.

fun ref reserve_current(
  size': USize val)
: None val

Параметры

  • size': USize значение

Возвращает

  • None значение

size

[Источник]

fun box size()
: USize val

Возвращает

  • USize значение

u8

[Источник]

Записать байт в буфер.

fun ref u8(
  data: U8 val)
: None val

Параметры

  • data: U8 значение

Возвращает

  • None значение

u16_le

[Источник]

Записать U16 в буфер в порядке байтов little-endian.

fun ref u16_le(
  data: U16 val)
: None val

Параметры

  • data: U16 значение

Возвращает

  • None значение

u16_be

[Источник]

Записать U16 в буфер в порядке байтов big-endian.

fun ref u16_be(
  data: U16 val)
: None val

Параметры

  • data: U16 значение

Возвращает

  • None значение

i16_le

[Источник]

Записать I16 в буфер в порядке байтов little-endian.

fun ref i16_le(
  data: I16 val)
: None val

Параметры

  • data: I16 значение

Возвращает

  • None значение

i16_be

[Источник]

Записать I16 в буфер в порядке байтов big-endian.

fun ref i16_be(
  data: I16 val)
: None val

Параметры

  • data: I16 значение

Возвращает

  • None значение

u32_le

[Источник]

Записать U32 в буфер в порядке байтов little-endian.

fun ref u32_le(
  data: U32 val)
: None val

Параметры

  • data: U32 значение

Возвращает

  • None значение

u32_be

[Источник]

Записать U32 в буфер в порядке байтов big-endian.

fun ref u32_be(
  data: U32 val)
: None val

Параметры

  • data: U32 значение

Возвращает

  • None значение

i32_le

[Источник]

Записать I32 в буфер в порядке байтов little-endian.

fun ref i32_le(
  data: I32 val)
: None val

Параметры

  • data: I32 значение

Возвращает

  • None значение

i32_be

[Источник]

Записать I32 в буфер в порядке байтов big-endian.

fun ref i32_be(
  data: I32 val)
: None val

Параметры

  • data: I32 значение

Возвращает

  • None значение

f32_le

[Источник]

Записать F32 в буфер в порядке байтов little-endian.

fun ref f32_le(
  data: F32 val)
: None val

Параметры

  • data: F32 значение

Возвращает

  • None значение

f32_be

[Источник]

Записать F32 в буфер в порядке байтов big-endian.

fun ref f32_be(
  data: F32 val)
: None val

Параметры

  • data: F32 значение

Возвращает

  • None значение

u64_le

[Источник]

Записать U64 в буфер в порядке байтов little-endian.

fun ref u64_le(
  data: U64 val)
: None val

Параметры

  • data: U64 значение

Возвращает

  • None значение

u64_be

[Источник]

Записать U64 в буфер в порядке байтов big-endian.

fun ref u64_be(
  data: U64 val)
: None val

Параметры

  • data: U64 значение

Возвращает

  • None значение

i64_le

[Источник]

Записать I64 в буфер в порядке байтов little-endian.

fun ref i64_le(
  data: I64 val)
: None val

Параметры

  • data: I64 значение

Возвращает

  • None значение

i64_be

[Источник]

Записать I64 в буфер в порядке байтов big-endian.

fun ref i64_be(
  data: I64 val)
: None val

Параметры

  • data: I64 значение

Возвращает

  • None значение

f64_le

[Источник]

Записать F64 в буфер в порядке байтов little-endian.

fun ref f64_le(
  data: F64 val)
: None val

Параметры

  • data: F64 значение

Возвращает

  • None значение

f64_be

[Источник]

Записать F64 в буфер в порядке байтов big-endian.

fun ref f64_be(
  data: F64 val)
: None val

Параметры

  • data: F64 значение

Возвращает

  • None значение

u128_le

[Источник]

Записать U128 в буфер в порядке байтов little-endian.

fun ref u128_le(
  data: U128 val)
: None val

Параметры

  • data: U128 значение

Возвращает

  • None значение

u128_be

[Источник]

Записать U128 в буфер в порядке байтов big-endian.

fun ref u128_be(
  data: U128 val)
: None val

Параметры

  • data: U128 значение

Возвращает

  • None значение

i128_le

[Источник]

Записать I128 в буфер в порядке байтов little-endian.

fun ref i128_le(
  data: I128 val)
: None val

Параметры

  • data: I128 значение

Возвращает

  • None значение

i128_be

[Источник]

Записать I128 в буфер в порядке байтов big-endian.

fun ref i128_be(
  data: I128 val)
: None val

Параметры

  • data: I128 значение

Возвращает

  • None значение

write

[Источник]

Записать ByteSeq в буфер.

fun ref write(
  data: (String val | Array[U8 val] val))
: None val

Параметры

  • данные: (Строка val | Массив[U8 val] val)

Возвращаемое значение

  • None val

writev

[Исходный код]

Записать ByteSeq в буфер.

fun ref writev(
  data: ByteSeqIter val)
: None val

Параметры

  • данные: ByteSeqIter val

Возвращаемое значение

  • None val

done

[Исходный код]

Возвращает массив буферизованных ByteSeq и сбрасывает буфер Writer.

fun ref done()
: Array[(String val | Array[U8 val] val)] iso^

Возвращаемое значение

  • Массив[(Строка val | Массив[U8 val] val)] iso^

© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/buffered-Writer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API