Jump To …

LoggableToWrite.coffee

fs = require 'fs'
Loggable = (require './Loggable.coffee').Loggable
CompressedUnsignedLongByteIterable =
  (require './iterate/CompressedUnsignedLongByteIterable.coffee').
  CompressedUnsignedLongByteIterable
UnsupportedOperationError =
  (require '../errors/UnsupportedOperationError.coffee').
  UnsupportedOperationError

This class allows to create blocks of data - logables - and write them to log, using WriteIterator.

class LoggableToWrite extends Loggable

@private

  type: undefined

@private

  data: undefined

@private

  structureId: undefined

Constructor.

@param type the type of loggable. @param data the ByteIterable with data.

  @create$int$ByteIterable: (type, data, o) ->
    return LoggableToWrite.create$int$ByteIterable$int type, data,
            Loggable.NO_STRUCTURE_ID, o

Constructor.

@param type the type of loggable. @param data the ByteIterable with data. @param structureId.

  @create$int$ByteIterable$int: (type, data, structureId, o) ->
    if !o? then o = new LoggableToWrite
    o.type = type
    o.data = data
    o.structureId = structureId
    return o

  getAddress: () ->
    throw new UnsupportedOperationError("Loggable for writing has" +
    " no address until it is written to log");

  getType: () =>
    return @type

Get length.

@return the length of the whole loggable, including header and data.

  length: () =>
    return @data.length +
          CompressedUnsignedLongByteIterable.getCompressedSize$int(@type) +
          CompressedUnsignedLongByteIterable.getCompressedSize$int(@structureId) +
          CompressedUnsignedLongByteIterable.getCompressedSize$int(@data.length)

  getData: () ->
    return @data

  getDataLength: () ->
    return @data.length

  getStructureId: () ->
    return @structureId

exports.LoggableToWrite = LoggableToWrite