/// <summary> /// Resets the builder to an empty set. /// </summary> public Builder Clear() { fields.Clear(); lastFieldNumber = 0; lastField = null; return this; }
/// <summary> /// Returns a field builder for the specified field number, including any values /// which already exist. /// </summary> private UnknownField.Builder GetFieldBuilder(int number) { if (lastField != null) { if (number == lastFieldNumber) { return lastField; } // Note: AddField() will reset lastField and lastFieldNumber. AddField(lastFieldNumber, lastField.Build()); } if (number == 0) { return null; } lastField = UnknownField.CreateBuilder(); UnknownField existing; if (fields.TryGetValue(number, out existing)) { lastField.MergeFrom(existing); } lastFieldNumber = number; return lastField; }
/// <summary> /// Adds a field to the set. If a field with the same number already exists, it /// is replaced. /// </summary> public Builder AddField(int number, UnknownField field) { if (number == 0) { throw new ArgumentOutOfRangeException("number", "Zero is not a valid field number."); } if (lastField != null && lastFieldNumber == number) { // Discard this. lastField = null; lastFieldNumber = 0; } fields[number] = field; return this; }