Sha256: 82babd87a12028be0fb5ad4e170b0f96525db0e455faedddd2854f58533d4584

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

module RbPlusPlus
  module Builders

    # Handles code generation for telling Rice how to allocate / deallocate
    # classes. See ClassNode#check_allocation_strategies.
    class AllocationStrategyNode < Base

      def initialize(parent, code, has_public_constructor, has_public_destructor)
        super(code, parent)
        @public_constructor = has_public_constructor
        @public_destructor = has_public_destructor
      end

      # Used by MultipleFileWriter to only wrap a given type once.
      def qualified_name
        "#{self.code.qualified_name}_AllocStrat"
      end

      def build
      end

      def write
        includes << "#include <rice/Allocation_Strategies.hpp>"

        node_name = self.code.qualified_name
        code = <<-END
namespace Rice {
  template<>
  struct Default_Allocation_Strategy< #{node_name} > {
    static void free(#{node_name} * obj);
  };
}
        END

        declarations << code

        pre = "Rice::Default_Allocation_Strategy< #{node_name} >::"

        tmp = "void #{pre}free(#{node_name} * obj) { "
        tmp += @public_destructor ? "delete obj;" : ""
        tmp += " }"

        registrations << tmp
      end

    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rbplusplus-1.0.3 lib/rbplusplus/builders/allocation_strategy.rb
rbplusplus-1.0.1 lib/rbplusplus/builders/allocation_strategy.rb
rbplusplus-1.0 lib/rbplusplus/builders/allocation_strategy.rb