Module: CAS::C_PLUGIN

Defined in:
lib/Mr.CAS/c.rb

Constant Summary collapse

C_STD_LIBRARIES =
[
  "math.h"
]
C_LOCAL_LIBRARIES =
[ ]
C_DEFINES =
{
  "M_PI"       => Math::PI.to_s,
  "M_INFINITY" => "HUGE_VAL",
  "M_E"        => Math::E.to_s,
  "M_EPSILON"  => (1E-16).to_s
}

Class Method Summary collapse

Class Method Details

.write_header(op, name) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/Mr.CAS/c.rb', line 24

def self.write_header(op, name)
  <<-TO_HEADER
#ifndef #{name}_HEADER
#define #{name}_HEADER

// Standard Libraries
#{ CAS::C_PLUGIN::C_STD_LIBRARIES.map { |e| "#include <#{e}>" }.join("\n") }

// Local Libraries
#{ CAS::C_PLUGIN::C_LOCAL_LIBRARIES.map { |e| "#include <#{e}>" }.join("\n") }

// Definitions
#{ CAS::C_PLUGIN::C_DEFINES.map { |k, v| "#define #{k} #{v}" }.join("\n") }

// Function
double #{name}(#{ op.args.map { |x| "double #{x.name}"}.join(", ") });

#endif // #{name}_HEADER
  TO_HEADER
end

.write_source(op, name) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'lib/Mr.CAS/c.rb', line 45

def self.write_source(op, name)
  <<-TO_SOURCE
#include "#{name}.h"

double #{name}(#{ op.args.map { |x| "double #{x.name}"}.join(", ") }) {
  return #{op.to_c};
}
  TO_SOURCE
end