• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc.  All rights reserved.
3 //
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file or at
6 // https://developers.google.com/open-source/licenses/bsd
7 
8 package com.google.protobuf;
9 
10 import com.google.protobuf.MapEntryLite.Metadata;
11 import java.util.Map;
12 
13 @CheckReturnValue
14 final class MapFieldSchemaLite implements MapFieldSchema {
15 
16   @Override
forMutableMapData(Object mapField)17   public Map<?, ?> forMutableMapData(Object mapField) {
18     return (MapFieldLite<?, ?>) mapField;
19   }
20 
21   @Override
forMapMetadata(Object mapDefaultEntry)22   public Metadata<?, ?> forMapMetadata(Object mapDefaultEntry) {
23     return ((MapEntryLite<?, ?>) mapDefaultEntry).getMetadata();
24   }
25 
26   @Override
forMapData(Object mapField)27   public Map<?, ?> forMapData(Object mapField) {
28     return (MapFieldLite<?, ?>) mapField;
29   }
30 
31   @Override
isImmutable(Object mapField)32   public boolean isImmutable(Object mapField) {
33     return !((MapFieldLite<?, ?>) mapField).isMutable();
34   }
35 
36   @Override
toImmutable(Object mapField)37   public Object toImmutable(Object mapField) {
38     ((MapFieldLite<?, ?>) mapField).makeImmutable();
39     return mapField;
40   }
41 
42   @Override
newMapField(Object unused)43   public Object newMapField(Object unused) {
44     return MapFieldLite.emptyMapField().mutableCopy();
45   }
46 
47   @Override
mergeFrom(Object destMapField, Object srcMapField)48   public Object mergeFrom(Object destMapField, Object srcMapField) {
49     return mergeFromLite(destMapField, srcMapField);
50   }
51 
52   @SuppressWarnings("unchecked")
mergeFromLite(Object destMapField, Object srcMapField)53   private static <K, V> MapFieldLite<K, V> mergeFromLite(Object destMapField, Object srcMapField) {
54     MapFieldLite<K, V> mine = (MapFieldLite<K, V>) destMapField;
55     MapFieldLite<K, V> other = (MapFieldLite<K, V>) srcMapField;
56     if (!other.isEmpty()) {
57       if (!mine.isMutable()) {
58         mine = mine.mutableCopy();
59       }
60       mine.mergeFrom(other);
61     }
62     return mine;
63   }
64 
65   @Override
getSerializedSize(int fieldNumber, Object mapField, Object mapDefaultEntry)66   public int getSerializedSize(int fieldNumber, Object mapField, Object mapDefaultEntry) {
67     return getSerializedSizeLite(fieldNumber, mapField, mapDefaultEntry);
68   }
69 
70   @SuppressWarnings("unchecked")
getSerializedSizeLite( int fieldNumber, Object mapField, Object defaultEntry)71   private static <K, V> int getSerializedSizeLite(
72       int fieldNumber, Object mapField, Object defaultEntry) {
73     MapFieldLite<K, V> mapFieldLite = (MapFieldLite<K, V>) mapField;
74     MapEntryLite<K, V> defaultEntryLite = (MapEntryLite<K, V>) defaultEntry;
75 
76     if (mapFieldLite.isEmpty()) {
77       return 0;
78     }
79     int size = 0;
80     for (Map.Entry<K, V> entry : mapFieldLite.entrySet()) {
81       size += defaultEntryLite.computeMessageSize(fieldNumber, entry.getKey(), entry.getValue());
82     }
83     return size;
84   }
85 }
86