Module: Kernel

Defined in:
lib/ode.rb

Overview

TODO put these functions in a more reasonable place

Instance Method Summary collapse

Instance Method Details

#attr_reader_vector_argument(*args) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/ode.rb', line 91

def attr_reader_vector_argument(*args)
  args.each { |ruby_name, length|
    class_name = self.to_s.sub(/.*::/,'')
    c_name = "d#{class_name}Get#{ODE.camelize_method_name(ruby_name)}"
    class_eval <<-EOS
      def #{ruby_name.to_s}
 c_vect = SWIG::TYPE_p_float.create(#{length})
 ODE.#{c_name}(@id, c_vect)
 ruby_vect = c_vect.to_a
 c_vect.destroy
 ruby_vect
	end
    EOS
  }
end

#attr_reader_vector_return(*args) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/ode.rb', line 77

def attr_reader_vector_return(*args)
  args.each { |ruby_name, length|
    class_name = self.to_s.sub(/.*::/,'')
    c_name = "d#{class_name}Get#{ODE.camelize_method_name(ruby_name)}"
    class_eval <<-EOS
      def #{ruby_name.to_s}
 v = ODE.#{c_name}(@id)
 v.length = #{length}
 v
	end
    EOS
  }
end

#attr_writer_vector_coordinates(*args) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
# File 'lib/ode.rb', line 107

def attr_writer_vector_coordinates(*args)
  args.each { |ruby_name|
    class_name = self.to_s.sub(/.*::/,'')
    c_name = "d#{class_name}Set#{ODE.camelize_method_name(ruby_name)}"
    class_eval <<-EOS
      def #{ruby_name.to_s}=(v)
 ODE.#{c_name}(@id, *(v.to_a))
	end
    EOS
  }
end

#vector_transform(*args) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/ode.rb', line 119

def vector_transform(*args)
  args.each { |ruby_name, length|
    class_name = self.to_s.sub(/.*::/,'')
    c_name = "d#{class_name}#{ODE.camelize_method_name(ruby_name)}"
    unless (ODE.respond_to?(c_name.intern))
      c_name = "d#{class_name}Get#{ODE.camelize_method_name(ruby_name)}"
    end
    c_args = ((0...length).collect { |i| "vin[#{i}]" }).join(", ")
    class_eval <<-EOS
      def #{ruby_name.to_s}(vin)
 c_vout = SWIG::TYPE_p_float.create(#{length})
 ODE.#{c_name}(@id, #{c_args}, c_vout)
 ruby_vout = c_vout.to_a
 c_vout.destroy
 ruby_vout
	end
    EOS
  }
end