def sort(list, options=nil)
if ( !list.kind_of?(Array) )
raise ArgumentError, "Array of NetAddr::CIDR or NetStruct " +
"objects expected, but #{list.class} provided."
end
desc = false
by_mask = false
if (options)
known_args = [:Desc, :ByMask]
raise ArgumentError, "Hash expected for argument 'options' but #{options.class} provided." if (!options.kind_of?(Hash))
NetAddr.validate_args(options.keys,known_args)
if( options.has_key?(:Desc) && options[:Desc] == true )
desc = true
end
if( options.has_key?(:ByMask) && options[:ByMask] == true )
by_mask = true
end
end
version = nil
cidr_hash = {}
list.each do |cidr|
if (!cidr.kind_of?(NetAddr::CIDR))
begin
new_cidr = NetAddr::CIDR.create(cidr)
rescue Exception => error
raise ArgumentError, "An element of the provided Array " +
"raised the following errors: #{error}"
end
else
new_cidr = cidr
end
cidr_hash[new_cidr] = cidr
version = new_cidr.version if (!version)
unless (new_cidr.version == version)
raise VersionError, "Provided CIDR addresses must all be of the same IP version."
end
end
if (by_mask)
sorted_list = netmask_sort(cidr_hash.keys, desc)
else
sorted_list = cidr_sort(cidr_hash.keys, desc)
end
ret_list = []
sorted_list.each {|x| ret_list.push(cidr_hash[x])}
return(ret_list)
end