class BOAST::CStruct

@!parse module VarFunctors; var_functorize CStruct; end

Attributes

members[R]
members_array[R]
name[R]

Public Class Methods

new(hash={}) click to toggle source

Creates a new structured type. @param [Hash] hash named options @option hash [#to_s] :type_name @option hash [Array<Variable>] :members list of Variable that create the type

# File lib/BOAST/Language/DataTypes.rb, line 279
def initialize(hash={})
  @name = hash[:type_name]
  @members = {}
  @members_array = []
  hash[:members].each { |m|
    mc = m.copy
    @members_array.push(mc)
    @members[mc.name] = mc
  }
end

Public Instance Methods

decl() click to toggle source
# File lib/BOAST/Language/DataTypes.rb, line 290
def decl
  return decl_c if [C, CL, CUDA].include?( lang )
  return decl_fortran if lang == FORTRAN
end
define() click to toggle source
# File lib/BOAST/Language/DataTypes.rb, line 295
def define
  return define_c if [C, CL, CUDA].include?( lang )
  return define_fortran if lang == FORTRAN
end

Private Instance Methods

decl_c() click to toggle source
# File lib/BOAST/Language/DataTypes.rb, line 302
def decl_c
  return "struct #{@name}" if [C, CL, CUDA].include?( lang )
end
decl_fortran() click to toggle source
# File lib/BOAST/Language/DataTypes.rb, line 306
def decl_fortran
  return "TYPE(#{@name})" if lang == FORTRAN
end
define_c() click to toggle source
# File lib/BOAST/Language/DataTypes.rb, line 310
def define_c
  s = indent
  s << decl_c + " {"
  output.puts s
  increment_indent_level
  @members_array.each { |value|
     value.decl
  }
  decrement_indent_level
  s = indent
  s << "}"
  s << finalize
  output.print s
  return self
end
define_fortran() click to toggle source
# File lib/BOAST/Language/DataTypes.rb, line 326
def define_fortran
  s = indent
  s << "TYPE :: #{@name}\n"
  output.puts s
  increment_indent_level
  @members_array.each { |value|
     value.decl
  }
  decrement_indent_level
  s = indent
  s << "END TYPE #{@name}"
  s << finalize
  output.print s
  return self
end
finalize() click to toggle source
# File lib/BOAST/Language/DataTypes.rb, line 342
def finalize
   s = ""
   s << ";" if [C, CL, CUDA].include?( lang )
   s << "\n"
   return s
end