|  | @@ -13,6 +13,7 @@
 | 
	
		
			
				|  |  |  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
	
		
			
				|  |  |  // See the License for the specific language governing permissions and
 | 
	
		
			
				|  |  |  // limitations under the License.
 | 
	
		
			
				|  |  | +using System;
 | 
	
		
			
				|  |  |  using System.Reflection;
 | 
	
		
			
				|  |  |  using Google.ProtocolBuffers.Descriptors;
 | 
	
		
			
				|  |  |  using System.Collections.Generic;
 | 
	
	
		
			
				|  | @@ -77,19 +78,45 @@ namespace Google.ProtocolBuffers {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /// <summary>
 | 
	
		
			
				|  |  | -    /// Immutable mapping from field type to wire type. Built using the attributes on
 | 
	
		
			
				|  |  | -    /// FieldType values.
 | 
	
		
			
				|  |  | +    /// Converts a field type to its wire type. Done with a switch for the sake
 | 
	
		
			
				|  |  | +    /// of speed - this is significantly faster than a dictionary lookup.
 | 
	
		
			
				|  |  |      /// </summary>
 | 
	
		
			
				|  |  | -    public static readonly IDictionary<FieldType, WireType> FieldTypeToWireFormatMap = MapFieldTypes();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    private static IDictionary<FieldType, WireType> MapFieldTypes() {
 | 
	
		
			
				|  |  | -      var map = new Dictionary<FieldType, WireType>();
 | 
	
		
			
				|  |  | -      foreach (FieldInfo field in typeof(FieldType).GetFields(BindingFlags.Static | BindingFlags.Public)) {
 | 
	
		
			
				|  |  | -        FieldType fieldType = (FieldType) field.GetValue(null);
 | 
	
		
			
				|  |  | -        FieldMappingAttribute mapping = (FieldMappingAttribute)field.GetCustomAttributes(typeof(FieldMappingAttribute), false)[0];
 | 
	
		
			
				|  |  | -        map[fieldType] = mapping.WireType;
 | 
	
		
			
				|  |  | +    public static WireType GetWireType(FieldType fieldType) {
 | 
	
		
			
				|  |  | +      switch (fieldType) {
 | 
	
		
			
				|  |  | +        case FieldType.Double:
 | 
	
		
			
				|  |  | +          return WireType.Fixed64;
 | 
	
		
			
				|  |  | +        case FieldType.Float:
 | 
	
		
			
				|  |  | +          return WireType.Fixed32;
 | 
	
		
			
				|  |  | +        case FieldType.Int64:
 | 
	
		
			
				|  |  | +        case FieldType.UInt64:
 | 
	
		
			
				|  |  | +        case FieldType.Int32:
 | 
	
		
			
				|  |  | +          return WireType.Varint;
 | 
	
		
			
				|  |  | +        case FieldType.Fixed64:
 | 
	
		
			
				|  |  | +          return WireType.Fixed64;
 | 
	
		
			
				|  |  | +        case FieldType.Fixed32:
 | 
	
		
			
				|  |  | +          return WireType.Fixed32;
 | 
	
		
			
				|  |  | +        case FieldType.Bool:
 | 
	
		
			
				|  |  | +          return WireType.Varint;
 | 
	
		
			
				|  |  | +        case FieldType.String:
 | 
	
		
			
				|  |  | +          return WireType.LengthDelimited;
 | 
	
		
			
				|  |  | +        case FieldType.Group:
 | 
	
		
			
				|  |  | +          return WireType.StartGroup;
 | 
	
		
			
				|  |  | +        case FieldType.Message:
 | 
	
		
			
				|  |  | +        case FieldType.Bytes:
 | 
	
		
			
				|  |  | +          return WireType.LengthDelimited;
 | 
	
		
			
				|  |  | +        case FieldType.UInt32:
 | 
	
		
			
				|  |  | +          return WireType.Varint;
 | 
	
		
			
				|  |  | +        case FieldType.SFixed32:
 | 
	
		
			
				|  |  | +          return WireType.Fixed32;
 | 
	
		
			
				|  |  | +        case FieldType.SFixed64:
 | 
	
		
			
				|  |  | +          return WireType.Fixed64;
 | 
	
		
			
				|  |  | +        case FieldType.SInt32:
 | 
	
		
			
				|  |  | +        case FieldType.SInt64:
 | 
	
		
			
				|  |  | +        case FieldType.Enum:
 | 
	
		
			
				|  |  | +          return WireType.Varint;
 | 
	
		
			
				|  |  | +        default:
 | 
	
		
			
				|  |  | +          throw new ArgumentOutOfRangeException("No such field type");
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      return Dictionaries.AsReadOnly(map);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 |