def setBitsFn(msg, field, bits, offset, bitOffset, numBits): lookup = "" if "Enum" in bits: # find index that corresponds to string input param lookup = enumLookup(msg, bits) math = "min(max(%s, %s), %s)" % (MsgParser.setMath( "value", bits, "int"), 0, str(2**numBits - 1)) math = lookup + "tmp = " + math ret = '''\ %s %s self.Set%s((self.Get%s() & ~(%s << %s)) | ((%s & %s) << %s)) ''' % (fnHdr(bits, offset, 1, "Set" + MsgParser.BitfieldName(field, bits)), math, field["Name"], field["Name"], MsgParser.Mask(numBits), str(bitOffset), "tmp", MsgParser.Mask(numBits), str(bitOffset)) return ret
def setBitsFn(field, bits, bitOffset, numBits): param = "_ value: " + bitParamType(field, bits) ret = '''\ %s public func Set%s(%s) { ''' % (fnHdr(bits), MsgParser.BitfieldName(field, bits), param) valueString = setMath("value", bits, fieldType(field)) ret += '''\ var valI = Get%s(); // read valI = valI & ~(%s << %s); // clear our bits valI = valI | ((%s & %s) << %s); // set our bits Set%s(valI); // write ''' % (field["Name"], MsgParser.Mask(numBits), str(bitOffset), valueString, MsgParser.Mask(numBits), str(bitOffset), field["Name"]) ret += '};' return ret
def setBitsFn(field, bits, bitOffset, numBits): paramType = fieldType(field) intType = paramType valueString = setMath("value", bits, '(' + fieldType(field) + ')', 'f') if "Offset" in bits or "Scale" in bits: paramType = typeForScaledInt(bits) #elif "Enum" in bits: # valueString = valueString + ".intValue()" # paramType = bits["Enum"] ret = '''\ %s public void Set%s(%s value) { Set%s((%s)((Get%s() & ~(%s << %s)) | ((%s & %s) << %s))); }''' % (fnHdr(bits), MsgParser.BitfieldName(field, bits), paramType, field["Name"], intType, field["Name"], MsgParser.Mask(numBits), str(bitOffset), valueString, MsgParser.Mask(numBits), str(bitOffset)) return ret
def setBitsFn(field, bits, offset, bitOffset, numBits): paramType = returnType(field, bits) valueString = setMath("value", bits) #if "Enum" in bits: # valueString = paramType + "(" + valueString + ")" # paramType = bits["Enum"] oldVal = '''%s() & ~(%s << %s)''' % ( "Get" + field["Name"], MsgParser.Mask(numBits), str(bitOffset)) newVal = '''(%s) | ((%s & %s) << %s)''' % ( oldVal, valueString, MsgParser.Mask(numBits), str(bitOffset)) ret = '''\ %s void Set%s(%s value) { %s(%s); }''' % (fnHdr(bits), MsgParser.BitfieldName( field, bits), paramType, "Set" + field["Name"], newVal) return ret
def setBitsFn(field, bits, bitOffset, numBits): param = "value: " + bitParamType(field, bits) ret = '''\ %s fun set%s(%s) { ''' % (fnHdr(bits), MsgParser.BitfieldName(field, bits), param) valueString = setMath("value", bits) # Kotlin currently only supports bitwise operators for Int, so we are gonna convert the inputs to Int first, # apply the bit operators, and then convert the final result to the actual type ret += '''\ var valI = get%s().toInt() // read valI = valI and (%s shl %s).inv() // clear our bits valI = valI or ((%s.toInt() and %s) shl %s) // set our bits set%s(valI.to%s()) // write ''' % (field["Name"], MsgParser.Mask(numBits), str(bitOffset), valueString, MsgParser.Mask(numBits), str(bitOffset), field["Name"], paramType(field)) ret += '}' return ret
def getBitsFn(msg, field, bits, offset, bitOffset, numBits): access = "(self.Get%s() >> %s) & %s" % (field["Name"], str(bitOffset), MsgParser.Mask(numBits)) access = MsgParser.getMath(access, bits, "float") cleanup = "" if "Enum" in bits: # find index that corresponds to string input param cleanup = reverseEnumLookup(msg, bits) ret = '''\ %s value = %s %sreturn value ''' % (fnHdr(bits,offset,1,"Get"+MsgParser.BitfieldName(field, bits)), access, cleanup) return ret
def setBitsFn(field, bits, offset, bitOffset, numBits): paramType = fieldType(field) valueString = setMath("value", bits, "(" + fieldType(field) + ")", 'f') if "Offset" in bits or "Scale" in bits: paramType = typeForScaledInt(bits) elif "Enum" in bits and namespace == "": valueString = "(" + paramType + ")" + "(" + valueString + ")" paramType = namespace + bits["Enum"] oldVal = '''%s(%s) & ~(%s << %s)''' % (namespace + "Get" + field["Name"], firstParam, MsgParser.Mask(numBits), str(bitOffset)) newVal = '''(%s) | ((%s & %s) << %s)''' % ( oldVal, valueString, MsgParser.Mask(numBits), str(bitOffset)) ret = '''\ %s %s %s(%s value) { %s(%s); }''' % (fnHdr(bits), functionPrefix + "void", namespace + "Set" + MsgParser.BitfieldName(field, bits), params(firstParamDecl, paramType), namespace + "Set" + field["Name"], params(firstParam, newVal)) return ret
def getBitsFn(field, bits, offset, bitOffset, numBits): access = "(Get%s() >> %s) & %s" % (field["Name"], str(bitOffset), MsgParser.Mask(numBits)) access = getMath(access, bits) retType = returnType(field, bits) #if "Enum" in bits: # retType = bits["Enum"] # access = retType + "(" + access + ")" ret = '''\ %s %s Get%s() { return %s; }''' % (fnHdr(bits), retType, MsgParser.BitfieldName(field, bits), access) return ret
def getBitsFn(field, bits, bitOffset, numBits): access = "(this.Get%s() / 2**%s) & %s" % (field["Name"], str(bitOffset), MsgParser.Mask(numBits)) access = getMath(access, bits, "") param = "" if "Enum" in bits: param += "enumAsInt=false" cleanup = "" if "Enum" in bits: cleanup = reverseEnumLookup(bits) ret = '''\ %s <MSGSHORTNAME>.prototype.Get%s = function(%s) { var value = %s; %sreturn value; };''' % (fnHdr(bits), MsgParser.BitfieldName(field, bits), param, access, cleanup) return ret
def getBitsFn(field, bits, bitOffset, numBits): access = "(Get%s() >> %s) & %s" % (field["Name"], str(bitOffset), MsgParser.Mask(numBits)) param = "" ret = '''\ %s public func Get%s(%s) -> %s { ''' % (fnHdr(bits), MsgParser.BitfieldName(field, bits), param, bitParamType(field, bits)) if ("Offset" in bits or "Scale" in bits): ret += ' let valI = '+access+';\n' access = getMath("valI", bits, "Double") ret += ' let valD = '+access+';\n' ret += ' return valD;\n' else: ret += ' return %s;\n' % (access) ret += '};' return ret
def getBitsFn(field, bits, bitOffset, numBits): access = "(Get%s() >> %s) & %s" % (field["Name"], str(bitOffset), MsgParser.Mask(numBits)) access = getMath(access, bits, "(" + typeForScaledInt(bits) + ")", 'f') retType = fieldType(field) if "Offset" in bits or "Scale" in bits: retType = typeForScaledInt(bits) #elif "Enum" in bits: # retType = bits["Enum"] # access = retType + ".construct(" + access + ")" else: access = "(" + retType + ")" + "(" + access + ")" ret = '''\ %s public %s Get%s() { return %s; }''' % (fnHdr(bits), retType, MsgParser.BitfieldName(field, bits), access) return ret
def getBitsFn(field, bits, offset, bitOffset, numBits): access = "(%sGet%s(%s) >> %s) & %s" % (namespace, field["Name"], firstParam, str(bitOffset), MsgParser.Mask(numBits)) access = getMath(access, bits, castForScaledInt(bits), 'f') retType = fieldType(field) if "Offset" in bits or "Scale" in bits: retType = typeForScaledInt(bits) elif "Enum" in bits and namespace == "": retType = namespace + bits["Enum"] access = retType + "(" + access + ")" ret = '''\ %s %s %s(%s)%s { return %s; }''' % (fnHdr(bits), functionPrefix + retType, namespace + "Get" + MsgParser.BitfieldName(field, bits), firstParamDecl, const, access) return ret
def getBitsFn(field, bits, bitOffset, numBits): # Kotlin currently only supports bitwise operators for Int, so we are gonna convert the inputs to Int first, # apply the bit operators, and then convert the final result to the actual type access = "((get%s().toInt() ushr %s) and %s).to%s()" % ( field["Name"], str(bitOffset), MsgParser.Mask(numBits), bitParamType(field, bits)) param = "" ret = '''\ %s fun get%s(%s): %s { ''' % (fnHdr(bits), MsgParser.BitfieldName( field, bits), param, bitParamType(field, bits)) if ("Offset" in bits or "Scale" in bits): ret += ' val valI = ' + access + '\n' access = getMath("valI", bits, "Double") ret += ' val valD = ' + access + '\n' ret += ' return valD\n' else: ret += ' return %s\n' % (access) ret += '}' return ret
def setBitsFn(field, bits, bitOffset, numBits): valueString = setMath("value", bits, "") lookup = "" if "Enum" in bits: # find index that corresponds to string input param lookup = enumLookup(bits) ret = '''\ %s <MSGSHORTNAME>.prototype.Set%s = function(value) { %sthis.Set%s((this.Get%s() & ~(%s * 2**%s)) | ((%s & %s) * 2**%s)); };''' % (fnHdr(bits), MsgParser.BitfieldName(field, bits), lookup, field["Name"], field["Name"], MsgParser.Mask(numBits), str(bitOffset), valueString, MsgParser.Mask(numBits), str(bitOffset)) return ret