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