class TubeAddress

github.com/jordansissel/experiments/blob/master/ruby/ipaddr-is-slow/code.rb

Constants

IPV4MASK

Public Class Methods

ip_to_num(addr) click to toggle source
# File lib/fluent/plugin/out_mobile_carrier.rb, line 109
def self.ip_to_num(addr)
  addr.split('.').reduce(0) { |a, e| (a << 8) + (e.to_i) }
end
new(addr) click to toggle source
# File lib/fluent/plugin/out_mobile_carrier.rb, line 91
def initialize(addr)
  @address, cidr, _ = addr.split('/') + ['32']

  @address_int = self.class.ip_to_num(@address)
  @cidr = cidr.to_i
  @base = @address_int & cidr_mask
end

Public Instance Methods

cidr_mask() click to toggle source
# File lib/fluent/plugin/out_mobile_carrier.rb, line 99
def cidr_mask
  # Convert /24 to 0xffffff00, etc
  @cidr_mask ||= IPV4MASK ^ ((1 << (32 - @cidr)) - 1)
end
include?(addr) click to toggle source
# File lib/fluent/plugin/out_mobile_carrier.rb, line 104
def include?(addr)
  return false if addr.nil?
  self.class.ip_to_num(addr) & @cidr_mask == @base
end
to_s() click to toggle source
# File lib/fluent/plugin/out_mobile_carrier.rb, line 113
def to_s
  "#{@address}/#{@cidr}"
end