am cc652daa: Merge "Add some bitfield helper methods from 2.4"

* commit 'cc652daaec7fc6ebf8b12d361444364da257988b':
  Add some bitfield helper methods from 2.4
pull/91/head
Ulas Kirazci 11 years ago committed by Android Git Automerger
commit f64af91673
  1. 77
      src/google/protobuf/compiler/javanano/javanano_helpers.cc
  2. 25
      src/google/protobuf/compiler/javanano/javanano_helpers.h

@ -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…
Cancel
Save