// Copyright 2008 Cyrus Najmabadi // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // 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. #import "GeneratedMessage.h" @protocol PBExtensionField; /** * Generated message classes for message types that contain extension ranges * subclass this. * *

This class implements type-safe accessors for extensions. They * implement all the same operations that you can do with normal fields -- * e.g. "has", "get", and "getCount" -- but for extensions. The extensions * are identified using instances of the class {@link GeneratedExtension}; * the protocol compiler generates a static instance of this class for every * extension in its input. Through the magic of generics, all is made * type-safe. * *

For example, imagine you have the {@code .proto} file: * *

 * option java_class = "MyProto";
 *
 * message Foo {
 *   extensions 1000 to max;
 * }
 *
 * extend Foo {
 *   optional int32 bar;
 * }
 * 
* *

Then you might write code like: * *

 * MyProto.Foo foo = getFoo();
 * int i = foo.getExtension(MyProto.bar);
 * 
* *

See also {@link ExtendableBuilder}. */ @interface PBExtendableMessage : PBGeneratedMessage { @private NSMutableDictionary* extensionMap; NSMutableDictionary* extensionRegistry; } @property (retain) NSMutableDictionary* extensionMap; @property (retain) NSMutableDictionary* extensionRegistry; - (BOOL) hasExtension:(id) extension; - (id) getExtension:(id) extension; //@protected - (BOOL) extensionsAreInitialized; - (int32_t) extensionsSerializedSize; - (void) writeExtensionsToCodedOutputStream:(PBCodedOutputStream*) output from:(int32_t) startInclusive to:(int32_t) endExclusive; /* @internal */ - (void) ensureExtensionIsRegistered:(id) extension; @end