Sha256: 6ea0d9a269312f37344840fa5379c89f5dc00cbabd37e3683a227dae349c387e

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

module RbPlusPlus
  module Builders

    # Wrap up a class instance variable
    class InstanceVariableNode < Base

      def build
      end

      def write
        ruby_name = Inflector.underscore(code.name)
        parent_name = parent.code.qualified_name.as_variable

        # Setter, only if it isn't const
        if !code.cpp_type.const?
          method_name = "wrap_#{parent_name}_#{code.name}_set"
          declarations << "void #{method_name}(#{parent.code.qualified_name}* self, #{code.cpp_type.to_cpp} val) {"
          declarations << "self->#{code.name} = val;"
          declarations << "}"

          registrations << "#{parent.rice_variable}.define_method(\"#{ruby_name}=\", &#{method_name});"
        end

        # Getter
        method_name = "wrap_#{parent_name}_#{code.name}_get"
        declarations << "#{code.cpp_type.to_cpp} #{method_name}(#{parent.code.qualified_name}* self) {"
        declarations << "return self->#{code.name};"
        declarations << "}"

        registrations << "#{parent.rice_variable}.define_method(\"#{ruby_name}\", &#{method_name});"
      end

    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rbplusplus-0.9.1 lib/rbplusplus/builders/instance_variable.rb