|
@@ -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
|