Class: BOAST::Index

Inherits:
Expression show all
Defined in:
lib/BOAST/Language/Index.rb

Constant Summary

Constants inherited from Expression

Expression::ANNOTATIONS

Instance Attribute Summary collapse

Attributes inherited from Expression

#operand1, #operand2, #operator

Instance Method Summary collapse

Methods included from Functor

extended

Methods included from Annotation

#annotate_array, #annotate_indepth?, #annotate_scalar, #annotate_var, #annotation, #annotation_identifier

Methods included from PrivateStateAccessor

#address_size, #address_size=, #annotate, #annotate=, #annotate?, #annotate_indepth_list, #annotate_indepth_list=, #annotate_level, #annotate_level=, #annotate_list, #annotate_list=, #architecture, #architecture=, #array_start, #array_start=, #chain_code, #chain_code=, #chain_code?, #debug, #debug=, #debug?, #debug_source, #debug_source=, #debug_source?, #decl_module, #decl_module=, #decl_module?, #default_align, #default_align=, #default_int_signed, #default_int_signed=, #default_int_signed?, #default_int_size, #default_int_size=, #default_real_size, #default_real_size=, #disable_openmp, #disable_openmp=, #disable_openmp?, #ffi, #ffi=, #ffi?, #fortran_line_length, #fortran_line_length=, #get_address_size, #get_annotate, #get_annotate_indepth_list, #get_annotate_level, #get_annotate_list, #get_architecture, #get_array_start, #get_chain_code, #get_debug, #get_debug_source, #get_decl_module, #get_default_align, #get_default_int_signed, #get_default_int_size, #get_default_real_size, #get_disable_openmp, #get_ffi, #get_fortran_line_length, #get_indent_increment, #get_indent_level, #get_keep_temp, #get_lang, #get_model, #get_optimizer_log, #get_optimizer_log_file, #get_output, #get_replace_constants, #get_use_vla, #get_verbose, #indent_increment, #indent_increment=, #indent_level, #indent_level=, #keep_temp, #keep_temp=, #keep_temp?, #lang, #lang=, #model, #model=, #optimizer_log, #optimizer_log=, #optimizer_log?, #optimizer_log_file, #optimizer_log_file=, #output, #output=, #replace_constants, #replace_constants=, #replace_constants?, #set_address_size, #set_annotate, #set_annotate_indepth_list, #set_annotate_level, #set_annotate_list, #set_architecture, #set_array_start, #set_chain_code, #set_debug, #set_debug_source, #set_decl_module, #set_default_align, #set_default_int_signed, #set_default_int_size, #set_default_real_size, #set_disable_openmp, #set_ffi, #set_fortran_line_length, #set_indent_increment, #set_indent_level, #set_keep_temp, #set_lang, #set_model, #set_optimizer_log, #set_optimizer_log_file, #set_output, #set_replace_constants, #set_use_vla, #set_verbose, #use_vla, #use_vla=, #use_vla?, #verbose, #verbose=, #verbose?

Methods included from TypeTransition

#get_transition, #set_transition, #transition

Methods included from Inspectable

#inspect

Methods included from Arithmetic

#!, #!=, #*, #**, #+, #+@, #-, #-@, #/, #<, #<=, #==, #===, #>, #>=, #and, #cast, #components, #dereference, #or, #reference

Constructor Details

#initialize(source, *indexes) ⇒ Index

Returns a new instance of Index.



8
9
10
11
# File 'lib/BOAST/Language/Index.rb', line 8

def initialize(source, *indexes)
  @source = source
  @indexes = indexes
end

Instance Attribute Details

#alignmentObject

Returns the value of attribute alignment.



6
7
8
# File 'lib/BOAST/Language/Index.rb', line 6

def alignment
  @alignment
end

#indexesObject (readonly)

Returns the value of attribute indexes.



5
6
7
# File 'lib/BOAST/Language/Index.rb', line 5

def indexes
  @indexes
end

#sourceObject (readonly)

Returns the value of attribute source.



4
5
6
# File 'lib/BOAST/Language/Index.rb', line 4

def source
  @source
end

Instance Method Details

#align?Boolean

Returns:

  • (Boolean)


13
14
15
# File 'lib/BOAST/Language/Index.rb', line 13

def align?
  return !!@alignment
end

#copy(*args) ⇒ Object



31
32
33
# File 'lib/BOAST/Language/Index.rb', line 31

def copy(*args)
  return to_var.copy(*args)
end

#prObject



61
62
63
64
65
66
67
68
# File 'lib/BOAST/Language/Index.rb', line 61

def pr
  s=""
  s += indent
  s += to_s
  s += ";" if [C, CL, CUDA].include?( lang )
  output.puts s
  return self
end

#set(x) ⇒ Object



27
28
29
# File 'lib/BOAST/Language/Index.rb', line 27

def set(x)
  return to_var === Set(x,to_var)
end

#set_align(align) ⇒ Object



17
18
19
20
# File 'lib/BOAST/Language/Index.rb', line 17

def set_align(align)
  @alignment = align
  return self
end

#to_sObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/BOAST/Language/Index.rb', line 39

def to_s
  if get_replace_constants then
    begin
      const = @source.constant
      indxs = @indexes.reverse
      dims = @source.dimension.reverse
      (0...dims.length).each { |indx|
        dim = dims[indx]
        s = "#{indxs[indx]}"
        s += " - (#{dim.start})" unless 0.equal?(dim.start)
        ind = eval(s)
        ind = ind.to_i
        const = const[ind]
      }
      return "#{const}#{@source.type.suffix}"
    rescue Exception => e
    end
  end
  return to_s_fortran if lang == FORTRAN
  return to_s_c if [C, CL, CUDA].include?( lang )
end

#to_varObject



22
23
24
25
# File 'lib/BOAST/Language/Index.rb', line 22

def to_var
  var = @source.copy("#{self}", :const => nil, :constant => nil, :dim => nil, :dimension => nil, :direction => nil, :dir => nil, :align => alignment)
  return var
end

#typeObject



35
36
37
# File 'lib/BOAST/Language/Index.rb', line 35

def type
  return to_var.type
end