Sha256: 2b69d4e0fb5a6782abc0266a774c34f87ffa235373e0c2d17f8fc75db028fc0d

Contents?: true

Size: 1.85 KB

Versions: 14

Compression:

Stored size: 1.85 KB

Contents

# encoding: ascii-8bit

# Copyright 2014 Ball Aerospace & Technologies Corp.
# All Rights Reserved.
#
# This program is free software; you can modify and/or redistribute it
# under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 3 with
# attribution addendums as found in the LICENSE.txt

require 'cosmos/packets/binary_accessor'
require 'cosmos/ext/cosmos_io' if RUBY_ENGINE == 'ruby' and !ENV['COSMOS_NO_EXT']

# COSMOS specific additions to the Ruby IO and StringIO classes
module CosmosIO
  if RUBY_ENGINE != 'ruby' or ENV['COSMOS_NO_EXT']
    # Reads a length field and then return the String resulting from reading the
    # number of bytes the length field indicates
    #
    # For example:
    #   io = StringIO.new
    #   # where io is "\x02\x01\x02\x03\x04...."
    #   result = io.read_length_bytes(1)
    #   # result will be "\x01x02" because the length field was given
    #   # to be 1 byte. We read 1 byte which is a 2. So we then read two
    #   # bytes and return.
    #
    # @param length_num_bytes [Integer] Number of bytes in the length field
    # @return [String] A String of "length field" number of bytes
    def read_length_bytes(length_num_bytes, max_read_size = nil)
      return nil unless (length_num_bytes == 1) || (length_num_bytes == 2) or (length_num_bytes == 4)

      # Read bytes for string length
      temp_string_length = self.read(length_num_bytes)
      return nil if (temp_string_length.nil?) || (temp_string_length.length != length_num_bytes)
      string_length = Cosmos::BinaryAccessor.read(0, length_num_bytes * 8, :UINT, temp_string_length, :BIG_ENDIAN)

      # Read String
      return nil if max_read_size and string_length > max_read_size
      string = self.read(string_length)
      return nil if (string.nil?) || (string.length != string_length)
      return string
    end
  end

end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
cosmos-4.5.2-java lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.5.2 lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.5.1-java lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.5.1 lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.5.0-java lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.5.0 lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.4.2-java lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.4.2 lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.4.1-java lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.4.1 lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.4.0-java lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.4.0 lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.3.0-java lib/cosmos/core_ext/cosmos_io.rb
cosmos-4.3.0 lib/cosmos/core_ext/cosmos_io.rb