Class: TypeInstanceDef

Inherits:
Def
  • Object
show all
Defined in:
lib/runtime.rb,
lib/generators/scala_server_generator.rb,
lib/generators/unity_client_generator.rb,
lib/generators/elixir_server_generator.rb

Constant Summary collapse

@@lambda_index =
0

Instance Attribute Summary collapse

Attributes inherited from Def

#ast

Instance Method Summary collapse

Constructor Details

#initialize(ast, type, params, runtime) ⇒ TypeInstanceDef

Returns a new instance of TypeInstanceDef.



91
92
93
94
95
96
# File 'lib/runtime.rb', line 91

def initialize ast, type, params, runtime
  super ast
  @type = type
  @params = params
  @runtime = runtime
end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



89
90
91
# File 'lib/runtime.rb', line 89

def params
  @params
end

#runtimeObject (readonly)

Returns the value of attribute runtime.



89
90
91
# File 'lib/runtime.rb', line 89

def runtime
  @runtime
end

#typeObject (readonly)

Returns the value of attribute type.



89
90
91
# File 'lib/runtime.rb', line 89

def type
  @type
end

Instance Method Details

#elixir_list(node) ⇒ Object



312
313
314
# File 'lib/generators/elixir_server_generator.rb', line 312

def elixir_list node
    'list(' + @params[0].elixir_type(node)  + ')'
end

#elixir_list_read(node) ⇒ Object



316
317
318
# File 'lib/generators/elixir_server_generator.rb', line 316

def elixir_list_read node
    'Brotorift.Binary.read_list(data, ' + @params[0].elixir_reader(node) + ')'
end

#elixir_list_reader(node) ⇒ Object



324
325
326
# File 'lib/generators/elixir_server_generator.rb', line 324

def elixir_list_reader node
    '&Brotorift.Binary.read_list(&1, ' + @params[0].elixir_reader(node) + ')'
end

#elixir_list_write(node, member_name) ⇒ Object



320
321
322
# File 'lib/generators/elixir_server_generator.rb', line 320

def elixir_list_write node, member_name
    'Brotorift.Binary.write_list(data, ' + member_name + ', ' + @params[0].elixir_writer(node) + ')'
end

#elixir_list_writer(node) ⇒ Object



328
329
330
# File 'lib/generators/elixir_server_generator.rb', line 328

def elixir_list_writer node
    '&Brotorift.Binary.write_list(&1, &2, ' + @params[0].elixir_writer(node) + ')'
end

#elixir_map(node) ⇒ Object



352
353
354
# File 'lib/generators/elixir_server_generator.rb', line 352

def elixir_map node
    '%{' + @params[0].elixir_type(node) + ' => ' + @params[1].elixir_type(node) + '}'
end

#elixir_map_read(node) ⇒ Object



356
357
358
# File 'lib/generators/elixir_server_generator.rb', line 356

def elixir_map_read node
    'Brotorift.Binary.read_map(data, ' + @params[0].elixir_reader(node) + ', ' + @params[1].elixir_reader(node) + ')'
end

#elixir_map_reader(node) ⇒ Object



364
365
366
# File 'lib/generators/elixir_server_generator.rb', line 364

def elixir_map_reader node
    '&Brotorift.Binary.read_map(&1, ' + @params[0].elixir_reader(node) + ', ' + @params[1].elixir_reader(node) + ')'
end

#elixir_map_write(node, member_name) ⇒ Object



360
361
362
# File 'lib/generators/elixir_server_generator.rb', line 360

def elixir_map_write node, member_name
    'Brotorift.Binary.write_map(data, ' + member_name + ', ' + @params[0].elixir_writer(node) + ', ' + @params[1].elixir_writer(node) + ')'
end

#elixir_map_writer(node) ⇒ Object



368
369
370
# File 'lib/generators/elixir_server_generator.rb', line 368

def elixir_map_writer node
    '&Brotorift.Binary.write_map(&1, &2, ' + @params[0].elixir_writer(node) + ', ' + @params[1].elixir_writer(node) + ')'
end

#elixir_read(node) ⇒ Object



280
281
282
283
284
285
286
# File 'lib/generators/elixir_server_generator.rb', line 280

def elixir_read node
    return self.elixir_list_read node if @type.name == 'List'
    return self.elixir_set_read node if @type.name == 'Set'
    return self.elixir_map_read node if @type.name == 'Map'
    return @type.elixir_read if @type.is_a? BuiltinTypeDef or @type.is_a? EnumTypeDef
    return @type.elixir_read node if @type.is_a? StructTypeDef
end

#elixir_reader(node) ⇒ Object



296
297
298
299
300
301
302
# File 'lib/generators/elixir_server_generator.rb', line 296

def elixir_reader node
    return self.elixir_list_reader node if @type.name == 'List'
    return self.elixir_set_reader node if @type.name == 'Set'
    return self.elixir_map_reader node if @type.name == 'Map'
    return @type.elixir_reader if @type.is_a? BuiltinTypeDef or @type.is_a? EnumTypeDef
    return @type.elixir_reader node if @type.is_a? StructTypeDef
end

#elixir_set(node) ⇒ Object



332
333
334
# File 'lib/generators/elixir_server_generator.rb', line 332

def elixir_set node
    'MapSet.t(' + @params[0].elixir_type(node)  + ')'
end

#elixir_set_read(node) ⇒ Object



336
337
338
# File 'lib/generators/elixir_server_generator.rb', line 336

def elixir_set_read node
    'Brotorift.Binary.read_set(data, ' + @params[0].elixir_reader(node) + ')'
end

#elixir_set_reader(node) ⇒ Object



344
345
346
# File 'lib/generators/elixir_server_generator.rb', line 344

def elixir_set_reader node
    '&Brotorift.Binary.read_set(&1, ' + @params[0].elixir_reader(node) + ')'
end

#elixir_set_write(node, member_name) ⇒ Object



340
341
342
# File 'lib/generators/elixir_server_generator.rb', line 340

def elixir_set_write node, member_name
    'Brotorift.Binary.write_set(data, ' + member_name + ', ' + @params[0].elixir_writer(node) + ')'
end

#elixir_set_writer(node) ⇒ Object



348
349
350
# File 'lib/generators/elixir_server_generator.rb', line 348

def elixir_set_writer node
    '&Brotorift.Binary.write_set(&1, &2, ' + @params[0].elixir_writer(node) + ')'
end

#elixir_type(node) ⇒ Object



272
273
274
275
276
277
278
# File 'lib/generators/elixir_server_generator.rb', line 272

def elixir_type node
    return self.elixir_list node if @type.name == 'List'
    return self.elixir_set node if @type.name == 'Set'
    return self.elixir_map node if @type.name == 'Map'
    return @type.elixir_type if @type.is_a? BuiltinTypeDef or @type.is_a? EnumTypeDef
    return @type.elixir_type node if @type.is_a? StructTypeDef
end

#elixir_write(node, member_name) ⇒ Object



288
289
290
291
292
293
294
# File 'lib/generators/elixir_server_generator.rb', line 288

def elixir_write node, member_name
    return self.elixir_list_write node, member_name if @type.name == 'List'
    return self.elixir_set_write node, member_name if @type.name == 'Set'
    return self.elixir_map_write node, member_name if @type.name == 'Map'
    return @type.elixir_write member_name if @type.is_a? BuiltinTypeDef or @type.is_a? EnumTypeDef
    return @type.elixir_write node, member_name if @type.is_a? StructTypeDef
end

#elixir_writer(node) ⇒ Object



304
305
306
307
308
309
310
# File 'lib/generators/elixir_server_generator.rb', line 304

def elixir_writer node
    return self.elixir_list_writer node if @type.name == 'List'
    return self.elixir_set_writer node if @type.name == 'Set'
    return self.elixir_map_writer node if @type.name == 'Map'
    return @type.elixir_writer if @type.is_a? BuiltinTypeDef or @type.is_a? EnumTypeDef
    return @type.elixir_writer node if @type.is_a? StructTypeDef
end

#scalaObject



34
35
36
# File 'lib/generators/scala_server_generator.rb', line 34

def scala
  "#{@type.scala}#{scala_type_param}"
end

#scala_read(is_top_scope) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/generators/scala_server_generator.rb', line 44

def scala_read is_top_scope
  str = ''
  if @type.is_a? StructTypeDef
    str = "packet.readStruct(new #{@type.name})"
  elsif @type.is_a? EnumTypeDef
    str = "#{@type.name}(packet.readInt())"
  else
    str = "packet.read#{scala_type}"
    if @params.empty?
      str += '()'
    else
      param_str = @params.map { |p| p.scala_read false } .join ', '
      str += '(' + param_str + ')'
    end
  end

  unless is_top_scope
    str = '() => ' + str
  end

  str
end

#scala_typeObject



86
87
88
# File 'lib/generators/scala_server_generator.rb', line 86

def scala_type
  @type.name + scala_type_param
end

#scala_type_paramObject



38
39
40
41
42
# File 'lib/generators/scala_server_generator.rb', line 38

def scala_type_param
  return '' if @params.empty?
  param_str = @params.map { |p| p.scala } .join ', '
  '[' + param_str + ']'
end

#scala_write(member_name, is_top_scope) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/generators/scala_server_generator.rb', line 67

def scala_write member_name, is_top_scope
  str = ''
  if @type.is_a? StructTypeDef
    str = "packet.writeStruct(#{member_name})"
  elsif @type.is_a? EnumTypeDef
    str = "packet.writeInt(#{member_name}.id)"
  else
    str = "packet.write#{scala_type}"
    if @params.empty?
      str += "(#{member_name})"
    else
      param_str = @params.map { |p| p.scala_write '_', false } .join ', '
      str += "(#{member_name}, #{param_str})"
    end
  end

  str
end

#unityObject



52
53
54
55
56
57
58
# File 'lib/generators/unity_client_generator.rb', line 52

def unity
  if @params.empty?
    return @type.unity
  else
    return "#{@type.unity}#{unity_type_param}"
  end
end

#unity_read(is_top_scope) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/generators/unity_client_generator.rb', line 60

def unity_read is_top_scope
  str = ''
  if @type.is_a? StructTypeDef
    str = "packet.ReadStruct( new #{@type.name}() )"
  elsif @type.is_a? EnumTypeDef
    str = "(#{@type.name})packet.ReadInt()"
  else
    str = "packet.Read#{unity_read_write}"
    if @params.empty?
      str += '()'
    else
      param_str = @params.map { |p| p.unity_read false } .join ', '
      str += '( ' + param_str + ' )'
    end
  end

  if is_top_scope == false
    str = '() => ' + str
  end

  str
end

#unity_read_writeObject



111
112
113
114
115
116
117
# File 'lib/generators/unity_client_generator.rb', line 111

def unity_read_write
  if @params.empty?
    return @type.name
  else
    return "#{@type.name}#{unity_type_param}"
  end
end

#unity_type_paramObject



119
120
121
122
123
# File 'lib/generators/unity_client_generator.rb', line 119

def unity_type_param
  return '' if @params.empty?
  param_str = @params.map { |p| p.unity } .join ', '
  '<' + param_str + '>'
end

#unity_write(member_name, is_top_scope) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/generators/unity_client_generator.rb', line 83

def unity_write member_name, is_top_scope
  str = ''
  if @type.is_a? StructTypeDef
    str = "packet.WriteStruct( #{member_name} )"
  elsif @type.is_a? EnumTypeDef
    str = "packet.WriteInt( (int)#{member_name} )"
  else
    str = "packet.Write#{unity_read_write}"
    if @params.empty?
      str += "( #{member_name} )"
    else
      params_str = @params.map do |p|
        @@lambda_index += 1
        arg_name = '_' + @@lambda_index.to_s
        p.unity_write arg_name, false
      end
      param_str = params_str.join ', '
      str += "( #{member_name}, #{param_str} )"
    end
  end

  if is_top_scope == false
    str = "( #{member_name} ) => " + str
  end

  str
end