Add some bitfield helper methods from 2.4
Change-Id: Ib9bb549602f71a451d2107fb04de17877553860e
This commit is contained in:
parent
71766127eb
commit
ee4410d551
@ -407,6 +407,83 @@ string DefaultValue(const Params& params, const FieldDescriptor* field) {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const char* kBitMasks[] = {
|
||||||
|
"0x00000001",
|
||||||
|
"0x00000002",
|
||||||
|
"0x00000004",
|
||||||
|
"0x00000008",
|
||||||
|
"0x00000010",
|
||||||
|
"0x00000020",
|
||||||
|
"0x00000040",
|
||||||
|
"0x00000080",
|
||||||
|
|
||||||
|
"0x00000100",
|
||||||
|
"0x00000200",
|
||||||
|
"0x00000400",
|
||||||
|
"0x00000800",
|
||||||
|
"0x00001000",
|
||||||
|
"0x00002000",
|
||||||
|
"0x00004000",
|
||||||
|
"0x00008000",
|
||||||
|
|
||||||
|
"0x00010000",
|
||||||
|
"0x00020000",
|
||||||
|
"0x00040000",
|
||||||
|
"0x00080000",
|
||||||
|
"0x00100000",
|
||||||
|
"0x00200000",
|
||||||
|
"0x00400000",
|
||||||
|
"0x00800000",
|
||||||
|
|
||||||
|
"0x01000000",
|
||||||
|
"0x02000000",
|
||||||
|
"0x04000000",
|
||||||
|
"0x08000000",
|
||||||
|
"0x10000000",
|
||||||
|
"0x20000000",
|
||||||
|
"0x40000000",
|
||||||
|
"0x80000000",
|
||||||
|
};
|
||||||
|
|
||||||
|
string GetBitFieldName(int index) {
|
||||||
|
string var_name = "bitField";
|
||||||
|
var_name += SimpleItoa(index);
|
||||||
|
var_name += "_";
|
||||||
|
return var_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
string GetBitFieldNameForBit(int bit_index) {
|
||||||
|
return GetBitFieldName(bit_index / 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
string GenerateGetBit(int bit_index) {
|
||||||
|
string var_name = GetBitFieldNameForBit(bit_index);
|
||||||
|
int bit_in_var_index = bit_index % 32;
|
||||||
|
|
||||||
|
string mask = kBitMasks[bit_in_var_index];
|
||||||
|
string result = "((" + var_name + " & " + mask + ") == " + mask + ")";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
string GenerateSetBit(int bit_index) {
|
||||||
|
string var_name = GetBitFieldNameForBit(bit_index);
|
||||||
|
int bit_in_var_index = bit_index % 32;
|
||||||
|
|
||||||
|
string mask = kBitMasks[bit_in_var_index];
|
||||||
|
string result = var_name + " |= " + mask;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
string GenerateClearBit(int bit_index) {
|
||||||
|
string var_name = GetBitFieldNameForBit(bit_index);
|
||||||
|
int bit_in_var_index = bit_index % 32;
|
||||||
|
|
||||||
|
string mask = kBitMasks[bit_in_var_index];
|
||||||
|
string result = var_name + " = (" + var_name + " & ~" + mask + ")";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace javanano
|
} // namespace javanano
|
||||||
} // namespace compiler
|
} // namespace compiler
|
||||||
} // namespace protobuf
|
} // namespace protobuf
|
||||||
|
@ -138,6 +138,31 @@ string EmptyArrayName(const Params& params, const FieldDescriptor* field);
|
|||||||
|
|
||||||
string DefaultValue(const Params& params, const FieldDescriptor* field);
|
string DefaultValue(const Params& params, const FieldDescriptor* field);
|
||||||
|
|
||||||
|
|
||||||
|
// Methods for shared bitfields.
|
||||||
|
|
||||||
|
// Gets the name of the shared bitfield for the given index.
|
||||||
|
string GetBitFieldName(int index);
|
||||||
|
|
||||||
|
// Gets the name of the shared bitfield for the given bit index.
|
||||||
|
// Effectively, GetBitFieldName(bit_index / 32)
|
||||||
|
string GetBitFieldNameForBit(int bit_index);
|
||||||
|
|
||||||
|
// Generates the java code for the expression that returns the boolean value
|
||||||
|
// of the bit of the shared bitfields for the given bit index.
|
||||||
|
// Example: "((bitField1_ & 0x04) == 0x04)"
|
||||||
|
string GenerateGetBit(int bit_index);
|
||||||
|
|
||||||
|
// Generates the java code for the expression that sets the bit of the shared
|
||||||
|
// bitfields for the given bit index.
|
||||||
|
// Example: "bitField1_ = (bitField1_ | 0x04)"
|
||||||
|
string GenerateSetBit(int bit_index);
|
||||||
|
|
||||||
|
// Generates the java code for the expression that clears the bit of the shared
|
||||||
|
// bitfields for the given bit index.
|
||||||
|
// Example: "bitField1_ = (bitField1_ & ~0x04)"
|
||||||
|
string GenerateClearBit(int bit_index);
|
||||||
|
|
||||||
} // namespace javanano
|
} // namespace javanano
|
||||||
} // namespace compiler
|
} // namespace compiler
|
||||||
} // namespace protobuf
|
} // namespace protobuf
|
||||||
|
Loading…
Reference in New Issue
Block a user