module Kernel

shell command:



Additional alternations to Kernel/Object class: Data element class support, quota support functions

Public Instance Methods

content_size_used(counted=[], options={}) click to toggle source
# File lib/gxg.rb, line 243
def content_size_used(counted=[], options={})
  # returns how many bytes are consumed by this *instance* (and elements) and its instance variables (and elements) all the way down.
  unless counted.is_a?(Array)
    if counted.is_a?(Hash)
      options = counted
    end
    counted = []
  end
  exclusions = [nil]
  if options[:exclude]
    unless options[:exclude].is_a?(Array)
      options[:exclude] = [(options[:exclude])]
    end
    exclusions = (options[:exclude] << nil)
  end
  count = 0
  unless (counted.include?(self) || exclusions.include?(self))
    counted << self
    if self.is_any?(::Array,::Hash,::Struct)
      self.search do |entry,selector,container|
        unless counted.include?(entry)
          unless selector.is_a?(Numeric)
            count += selector.content_size_used(counted, {:exclude => exclusions})
          end
          count += entry.content_size_used(counted, {:exclude => exclusions})
        end
      end
    else
      unless self.is_a?(::GxG::ByteArray)
        if self.respond_to?(:bytesize)
          count = self.bytesize
        else
          if self.respond_to?(:size)
            count = self.size
          else
            # TODO: cull the size of more exotic classes by class:
            count = 0
          end
        end
      end
    end
  end
  #
  self.instance_variables.to_enum.each do |ivar|
    # must decode from symbol to actual instance var
    ivar = self.instance_eval(ivar.to_s)
    unless (counted.include?(ivar) || exclusions.include?(ivar))
      if ivar.is_any?(::Array,::Hash,::Struct)
        ivar.search do |entry,selector,container|
          unless (counted.include?(entry) || exclusions.include?(entry))
            unless selector.is_a?(Numeric)
              # Symbols and Strings in Hashes take up heap space, so lets count it.
              count += selector.content_size_used(counted, {:exclude => exclusions})
            end
            count += entry.content_size_used(counted, {:exclude => exclusions})
          end
        end
      else
        unless (counted.include?(ivar) || exclusions.include?(ivar))
          count += ivar.content_size_used(counted, {:exclude => exclusions}).to_i
          # Subsequent references to this object will only incur an RVALUE slot count (me thinks)
          counted << ivar
        end
      end
    end
  end
  count
end
shell(command=nil,&block) click to toggle source
# File lib/gxg.rb, line 3
def shell(command=nil,&block)
  if command.to_s.size > 0
    block.call(`#{command.to_s}`)
    true
  end
end
slots_used(counted=[], options={}) click to toggle source

alias :stock_enum_for :enum_for alias :stock_to_enum :to_enum def enum_for(method=:each,*args)

GxG::Enumerator.new(self,method,*args)

end alias :to_enum :enum_for

# File lib/gxg.rb, line 191
def slots_used(counted=[], options={})
  # returns how many heap slots are consumed by this *instance* (and elements) and its instance variables (and elements) all the way down.
  # General Research: see memprof for how much is consumed by a Module or Class or Method.
  # TODO: ::Kernel#slots_used : find the byte-size of a given :method and add it to slot_count initial value.
  unless counted.is_a?(Array)
    if counted.is_a?(Hash)
      options = counted
    end
    counted = []
  end
  # warning: assumes references to nil incur no RVALUE allocation.
  exclusions = [nil]
  if options[:exclude]
    unless options[:exclude].is_a?(Array)
      options[:exclude] = [(options[:exclude])]
    end
    exclusions = (options[:exclude] << nil)
  end
  slot_count = 0
  unless (counted.include?(self) || exclusions.include?(self))
    counted << self
    slot_count = 1
    if self.is_any?(::Array,::Hash,::Set,::Struct)
      self.search do |entry,selector,container|
        unless (counted.include?(entry) || exclusions.include?(entry))
          unless selector.is_a?(Numeric)
            slot_count += selector.slots_used(counted, {:exclude => exclusions})
          end
          slot_count += entry.slots_used(counted, {:exclude => exclusions})
        end
      end
    end
  end
  self.instance_variables.to_enum.each do |ivar|
    unless (counted.include?(ivar) || exclusions.include?(ivar))
      if ivar.is_any?(::Array,::Hash,::Set,::Struct)
        ivar.search do |entry,selector,container|
          unless (counted.include?(entry) || exclusions.include?(entry))
            unless selector.is_a?(Numeric)
              slot_count += selector.slots_used(counted, {:exclude => exclusions})
            end
            slot_count += entry.slots_used(counted, {:exclude => exclusions})
          end
        end
      else
        slot_count += ivar.slots_used(counted, {:exclude => exclusions})
      end
    end
  end
  slot_count
end