class Gem::Resolv::DNS::SvcParams

def self.decode(msg) # :nodoc:

:nodoc:
def self.decode(msg) # :nodoc:
  params = msg.get_list do
    key, = msg.get_unpack('n')
    msg.get_length16 do
      SvcParam::ClassHash[key].decode(msg)
    end
  end
  return self.new(params)
end

def [](key)

def [](key)
  @params[canonical_key(key)]
end

def add(param)

def add(param)
  @params[param.class.key_number] = param
end

def canonical_key(key) # :nodoc:

:nodoc:
def canonical_key(key) # :nodoc:
  case key
  when Integer
    key
  when /\Akey(\d+)\z/
    Integer($1)
  when Symbol
    SvcParam::ClassHash[key].key_number
  else
    raise TypeError, 'key must be either String or Symbol'
  end
end

def count

def count
  @params.count
end

def delete(key)

def delete(key)
  @params.delete(canonical_key(key))
end

def each(&block)

def each(&block)
  return enum_for(:each) unless block
  @params.each_value(&block)
end

def empty?

def empty?
  @params.empty?
end

def encode(msg) # :nodoc:

:nodoc:
def encode(msg) # :nodoc:
  @params.keys.sort.each do |key|
    msg.put_pack('n', key)
    msg.put_length16 do
      @params.fetch(key).encode(msg)
    end
  end
end

def initialize(params = [])

def initialize(params = [])
  @params = {}
  params.each do |param|
    add param
  end
end