def _SimpleSizer(compute_value_size):
 def SpecificSizer(field_number, is_repeated, is_packed):
  tag_size = _TagSize(field_number)
  if is_packed:
   local_VarintSize = _VarintSize
   def PackedFieldSize(value):
    result = 0
    for element in value:
     result += compute_value_size(element)
    return ((result + local_VarintSize(result)) + tag_size)
   return PackedFieldSize
  elif is_repeated:
   def RepeatedFieldSize(value):
    result = (tag_size * len(value))
    for element in value:
     result += compute_value_size(element)
    return result
   return RepeatedFieldSize
  else:
   def FieldSize(value):
    return (tag_size + compute_value_size(value))
   return FieldSize
 return SpecificSizer

def _SimpleSizer ( compute_value_size ) : def SpecificSizer ( field_number , is_repeated , is_packed ) : tag_size = _TagSize ( field_number ) if is_packed : local_VarintSize = _VarintSize def PackedFieldSize ( value ) : result = 0 for element in value : result += compute_value_size ( element ) return ( ( result + local_VarintSize ( result ) ) + tag_size ) return PackedFieldSize elif is_repeated : def RepeatedFieldSize ( value ) : result = ( tag_size * len ( value ) ) for element in value : result += compute_value_size ( element ) return result return RepeatedFieldSize else : def FieldSize ( value ) : return ( tag_size + compute_value_size ( value ) ) return FieldSize return SpecificSizer
a sizer which uses the function compute_value_size to compute the size of each value .