def generate_c2j_swap(element, object_ref_name, struct_ref_name): msg_java_name = element.java_name_lower setters = [] for field in element.fields: field_type = field.type if is_retval(field): # For retval don't generate setters and generate retval check continue elif is_array(field): jni_name = "" template = _ARRAY_C2J_SWAP_TEMPLATE if field_type.is_swap_needed else _ARRAY_C2J_NO_SWAP_TEMPLATE if isinstance(field_type.base_type, Class): template = _ARRAY_C2J_CLASS_SWAP_TEMPLATE jni_name = field_type.base_type.jni_name setters.append( template.substitute( field_reference_name=field.java_name, class_ref_name=msg_java_name, jni_signature=field_type.jni_signature, jni_type=field_type.jni_type, jni_name=jni_name, base_type=field_type.base_type.jni_accessor, field_length=_generate_array_length( field, struct_ref_name), jni_base_type=field_type.base_type.jni_type, object_ref_name=object_ref_name, struct_ref_name=struct_ref_name, net_to_host_function=field_type.net_to_host_function, c_name=field.name)) else: if field_type.is_swap_needed: template = _SIMPLE_TYPE_FIELD_SETTER_TEMPLATE jni_name = "" if isinstance(field_type, Class): template = _STRUCT_SETTER_TEMPLATE jni_name = field_type.jni_name setters.append( template.substitute( java_name=field.java_name, class_ref_name=msg_java_name, jni_signature=field_type.jni_signature, jni_name=jni_name, jni_accessor=field_type.jni_accessor, object_ref_name=object_ref_name, struct_ref_name=struct_ref_name, net_to_host_function=field_type.net_to_host_function, c_name=field.name)) else: setters.append( _SIMPLE_TYPE_NO_SWAP_FIELD_SETTER_TEMPLATE.substitute( java_name=field.java_name, class_ref_name=msg_java_name, jni_signature=field_type.jni_signature, jni_accessor=field_type.jni_accessor, object_ref_name=object_ref_name, struct_ref_name=struct_ref_name, c_name=field.name)) return "".join(setters)
def generate_j2c_swap(element, struct_ref_name): initialization = [] for field in element.fields: if is_array(field): initialization.append( _generate_j2c_array_swap(field, struct_ref_name)) else: initialization.append( _generate_j2c_scalar_swap(field, struct_ref_name)) return "\n".join(initialization)
def generate_equals(class_name, fields): comparisons = [] for f in fields: if is_array(f): comparisons.append(_EQUALS_ARRAY_FIELD_TEMPLATE.substitute(field_name=f.java_name)) else: comparisons.append(_EQUALS_FIELD_TEMPLATE.substitute(field_name=f.java_name)) if comparisons: comparisons.insert(0, _EQUALS_OTHER_TEMPLATE.substitute(cls_name=class_name)) return _EQUALS_TEMPLATE.substitute(comparisons="\n".join(comparisons))
def generate_c2j_swap(element, object_ref_name, struct_ref_name, is_alias): msg_java_name = element.java_name_lower initialization = [] for field in element.fields: if is_retval(field): # For retval don't generate setters and generate retval check continue elif is_array(field): initialization.append(_generate_c2j_array_swap(msg_java_name, field, object_ref_name, struct_ref_name, is_alias)) else: initialization.append(_generate_c2j_scalar_swap(msg_java_name, field, object_ref_name, struct_ref_name, is_alias)) return "".join(initialization)
def generate_to_string(class_name, fields): to_string = [] for f in fields: if is_array(f): to_string.append(_TO_STRING_ARRAY_FIELD_TEMPLATE.substitute(field_name=f.java_name)) else: to_string.append(_TO_STRING_FIELD_TEMPLATE.substitute(field_name=f.java_name)) to_string_fields = " \"}\";" if to_string: to_string_fields = " + \", \" +\n".join(to_string) + " + \"}\";" return _TO_STRING_TEMPLATE.substitute( class_name=class_name, to_string_fields=to_string_fields )
def generate_j2c_swap(element, struct_ref_name): initialization = [] for field in element.fields: field_type = field.type if is_array(field): template = _ARRAY_J2C_NO_SWAP_TEMPLATE field_reference_name = field.java_name c_name = field.name swap_elements = None jni_name = None if field_type.is_swap_needed: template = _ARRAY_J2C_SWAP_TEMPLATE host = "%sArrayElements[_i]" % field_reference_name net = "%s->%s[_i]" % (struct_ref_name, c_name) swap_elements = field_type.get_host_to_net_function(host, net) if isinstance(field_type.base_type, Class): jni_name = field_type.base_type.jni_name host = "%sArrayElement" % field_reference_name net = "%s->%s[_i]" % (struct_ref_name, c_name) swap_elements = field_type.get_host_to_net_function(host, net) template = _CLASS_ARRAY_J2C_TEMPLATE initialization.append( template.substitute( field_reference_name=field_reference_name, field_length_check=_generate_field_length_check(field), base_type=field_type.base_type.jni_accessor, jni_base_type=field_type.base_type.jni_type, struct_reference_name=struct_ref_name, jni_name=jni_name, c_name=c_name, swap_elements=swap_elements)) else: if field_type.is_swap_needed: host = field.java_name net = "%s->%s" % (struct_ref_name, field.name) initialization.append( " %s;" % field_type.get_host_to_net_function(host, net)) else: initialization.append( " %s->%s = %s;" % (struct_ref_name, field.name, field.java_name)) return "\n".join(initialization)
def generate_hash_code(fields): if len(fields) == 1 and is_array(fields[0]): return _HASH_CODE_SINGLE_ARRAY_TEMPLATE.substitute(array_field=fields[0].java_name) return _HASH_CODE_TEMPLATE.substitute(fields=", ".join(f.java_name for f in fields))
def generate_j2c_field_swap(field, struct_ref_name): if is_array(field): return _generate_j2c_array_swap(field, struct_ref_name) else: return _generate_j2c_scalar_swap(field, struct_ref_name)