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 "";
|
||||
}
|
||||
|
||||
|
||||
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 compiler
|
||||
} // namespace protobuf
|
||||
|
@ -138,6 +138,31 @@ string EmptyArrayName(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 compiler
|
||||
} // namespace protobuf
|
||||
|
Loading…
Reference in New Issue
Block a user