15a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Protocol Buffers - Google's data interchange format 25a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Copyright 2008 Google Inc. All rights reserved. 35a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// https://developers.google.com/protocol-buffers/ 45a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 55a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Redistribution and use in source and binary forms, with or without 65a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// modification, are permitted provided that the following conditions are 75a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// met: 85a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 95a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// * Redistributions of source code must retain the above copyright 105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// notice, this list of conditions and the following disclaimer. 115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// * Redistributions in binary form must reproduce the above 125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// copyright notice, this list of conditions and the following disclaimer 135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// in the documentation and/or other materials provided with the 145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// distribution. 155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// * Neither the name of Google Inc. nor the names of its 165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// contributors may be used to endorse or promote products derived from 175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// this software without specific prior written permission. 185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Author: kenton@google.com (Kenton Varda) 325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Based on original Protocol Buffers design by 335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Sanjay Ghemawat, Jeff Dean, and others. 345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// This file contains classes which describe a type of protocol message. 365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// You can use a message's descriptor to learn at runtime what fields 375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// it contains and what the types of those fields are. The Message 385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// interface also allows you to dynamically access and modify individual 395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// fields by passing the FieldDescriptor of the field you are interested 405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// in. 415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Most users will not care about descriptors, because they will write 435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// code specific to certain protocol types and will simply use the classes 445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// generated by the protocol compiler directly. Advanced users who want 455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// to operate on arbitrary types (not known at compile time) may want to 465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// read descriptors in order to learn about the contents of a message. 475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// A very small number of users will want to construct their own 485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Descriptors, either because they are implementing Message manually or 495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// because they are writing something like the protocol compiler. 505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// For an example of how you might use descriptors, see the code example 525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// at the top of message.h. 535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#ifndef GOOGLE_PROTOBUF_DESCRIPTOR_H__ 555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#define GOOGLE_PROTOBUF_DESCRIPTOR_H__ 565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#include <memory> 585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#ifndef _SHARED_PTR_H 595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#include <google/protobuf/stubs/shared_ptr.h> 605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#endif 615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#include <set> 625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#include <string> 635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#include <vector> 645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#include <google/protobuf/stubs/common.h> 655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#include <google/protobuf/stubs/scoped_ptr.h> 665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// TYPE_BOOL is defined in the MacOS's ConditionalMacros.h. 685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#ifdef TYPE_BOOL 695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#undef TYPE_BOOL 705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#endif // TYPE_BOOL 715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotnamespace google { 735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotnamespace protobuf { 745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Defined in this file. 765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass Descriptor; 775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass FieldDescriptor; 785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass OneofDescriptor; 795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass EnumDescriptor; 805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass EnumValueDescriptor; 815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass ServiceDescriptor; 825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass MethodDescriptor; 835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass FileDescriptor; 845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass DescriptorDatabase; 855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass DescriptorPool; 865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Defined in descriptor.proto 885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass DescriptorProto; 895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass FieldDescriptorProto; 905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass OneofDescriptorProto; 915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass EnumDescriptorProto; 925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass EnumValueDescriptorProto; 935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass ServiceDescriptorProto; 945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass MethodDescriptorProto; 955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass FileDescriptorProto; 965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass MessageOptions; 975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass FieldOptions; 985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass EnumOptions; 995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass EnumValueOptions; 1005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass ServiceOptions; 1015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass MethodOptions; 1025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass FileOptions; 1035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass UninterpretedOption; 1045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass SourceCodeInfo; 1055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Defined in message.h 1075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass Message; 1085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Defined in descriptor.cc 1105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass DescriptorBuilder; 1115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass FileDescriptorTables; 1125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Defined in unknown_field_set.h. 1145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass UnknownField; 1155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Defined in generated_message_reflection.h. 1175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotnamespace internal { 1185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass GeneratedMessageReflection; 1195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} // namespace internal 1205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Defined in command_line_interface.cc 1225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotnamespace compiler { 1235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass CommandLineInterface; 1245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} // namespace compiler 1255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotnamespace descriptor_unittest { 1275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass DescriptorTest; 1285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} // namespace descriptor_unittest 1295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Defined in printer.h 1315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotnamespace io { 1325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass Printer; 1335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} // namespace io 1345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// NB, all indices are zero-based. 1365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotstruct SourceLocation { 1375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int start_line; 1385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int end_line; 1395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int start_column; 1405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int end_column; 1415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Doc comments found at the source location. 1435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See the comments in SourceCodeInfo.Location (descriptor.proto) for details. 1445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string leading_comments; 1455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string trailing_comments; 1465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot vector<string> leading_detached_comments; 1475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 1485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Options when generating machine-parsable output from a descriptor with 1505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// DebugString(). 1515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotstruct DebugStringOptions { 1525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // include original user comments as recorded in SourceLocation entries. N.B. 1535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // that this must be |false| by default: several other pieces of code (for 1545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // example, the C++ code generation for fields in the proto compiler) rely on 1555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // DebugString() output being unobstructed by user comments. 1565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool include_comments; 1575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If true, elide the braced body in the debug string. 1585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool elide_group_body; 1595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool elide_oneof_body; 1605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot DebugStringOptions() 1625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot : include_comments(false), 1635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot elide_group_body(false), 1645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot elide_oneof_body(false) {} 1655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 1665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Describes a type of protocol message, or a particular group within a 1685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// message. To obtain the Descriptor for a given message object, call 1695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Message::GetDescriptor(). Generated message classes also have a 1705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// static method called descriptor() which returns the type's descriptor. 1715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Use DescriptorPool to construct your own descriptors. 1725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass LIBPROTOBUF_EXPORT Descriptor { 1735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 1745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The name of the message type, not including its scope. 1755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& name() const; 1765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The fully-qualified name of the message type, scope delimited by 1785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // periods. For example, message type "Foo" which is declared in package 1795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // "bar" has full name "bar.Foo". If a type "Baz" is nested within 1805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Foo, Baz's full_name is "bar.Foo.Baz". To get only the part that 1815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // comes after the last '.', use name(). 1825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& full_name() const; 1835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Index of this descriptor within the file or containing type's message 1855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // type array. 1865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index() const; 1875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The .proto file in which this message type was defined. Never NULL. 1895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* file() const; 1905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If this Descriptor describes a nested type, this returns the type 1925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in which it is nested. Otherwise, returns NULL. 1935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* containing_type() const; 1945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 1955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get options for this message type. These are specified in the .proto file 1965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // by placing lines like "option foo = 1234;" in the message definition. 1975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allowed options are defined by MessageOptions in 1985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // google/protobuf/descriptor.proto, and any available extensions of that 1995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // message. 2005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const MessageOptions& options() const; 2015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Write the contents of this Descriptor into the given DescriptorProto. 2035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The target DescriptorProto must be clear before calling this; if it 2045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // isn't, the result may be garbage. 2055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyTo(DescriptorProto* proto) const; 2065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Write the contents of this decriptor in a human-readable form. Output 2085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // will be suitable for re-parsing. 2095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugString() const; 2105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Similar to DebugString(), but additionally takes options (e.g., 2125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // include original user comments in output). 2135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugStringWithOptions(const DebugStringOptions& options) const; 2145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns true if this is a placeholder for an unknown type. This will 2165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // only be the case if this descriptor comes from a DescriptorPool 2175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // with AllowUnknownDependencies() set. 2185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_placeholder() const; 2195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Field stuff ----------------------------------------------------- 2215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of fields in this message type. 2235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int field_count() const; 2245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a field by index, where 0 <= index < field_count(). 2255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 2265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* field(int index) const; 2275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a field by declared tag number. Returns NULL if no such field 2295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // exists. 2305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindFieldByNumber(int number) const; 2315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a field by name. Returns NULL if no such field exists. 2325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindFieldByName(const string& name) const; 2335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a field by lowercased name (as returned by lowercase_name()). 2355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // This lookup may be ambiguous if multiple field names differ only by case, 2365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in which case the field returned is chosen arbitrarily from the matches. 2375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindFieldByLowercaseName( 2385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& lowercase_name) const; 2395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a field by camel-case name (as returned by camelcase_name()). 2415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // This lookup may be ambiguous if multiple field names differ in a way that 2425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // leads them to have identical camel-case names, in which case the field 2435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // returned is chosen arbitrarily from the matches. 2445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindFieldByCamelcaseName( 2455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& camelcase_name) const; 2465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of oneofs in this message type. 2485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int oneof_decl_count() const; 2495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get a oneof by index, where 0 <= index < oneof_decl_count(). 2505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 2515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const OneofDescriptor* oneof_decl(int index) const; 2525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a oneof by name. Returns NULL if no such oneof exists. 2545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const OneofDescriptor* FindOneofByName(const string& name) const; 2555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Nested type stuff ----------------------------------------------- 2575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of nested types in this message type. 2595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int nested_type_count() const; 2605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a nested type by index, where 0 <= index < nested_type_count(). 2615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 2625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* nested_type(int index) const; 2635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a nested type by name. Returns NULL if no such nested type 2655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // exists. 2665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* FindNestedTypeByName(const string& name) const; 2675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Enum stuff ------------------------------------------------------ 2695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of enum types in this message type. 2715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int enum_type_count() const; 2725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets an enum type by index, where 0 <= index < enum_type_count(). 2735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 2745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumDescriptor* enum_type(int index) const; 2755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up an enum type by name. Returns NULL if no such enum type exists. 2775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumDescriptor* FindEnumTypeByName(const string& name) const; 2785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up an enum value by name, among all enum types in this message. 2805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns NULL if no such value exists. 2815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor* FindEnumValueByName(const string& name) const; 2825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Extensions ------------------------------------------------------ 2845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // A range of field numbers which are designated for third-party 2865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extensions. 2875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot struct ExtensionRange { 2885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int start; // inclusive 2895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int end; // exclusive 2905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot }; 2915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of extension ranges in this message type. 2935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int extension_range_count() const; 2945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets an extension range by index, where 0 <= index < 2955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extension_range_count(). These are returned in the order they were defined 2965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in the .proto file. 2975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ExtensionRange* extension_range(int index) const; 2985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 2995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns true if the number is in one of the extension ranges. 3005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool IsExtensionNumber(int number) const; 3015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns NULL if no extension range contains the given number. 3035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ExtensionRange* FindExtensionRangeContainingNumber(int number) const; 3045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of extensions -- extending *other* messages -- that were 3065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // defined nested within this message type's scope. 3075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int extension_count() const; 3085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get an extension by index, where 0 <= index < extension_count(). 3095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 3105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* extension(int index) const; 3115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a named extension (which extends some *other* message type) 3135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // defined within this message type's scope. 3145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindExtensionByName(const string& name) const; 3155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Similar to FindFieldByLowercaseName(), but finds extensions defined within 3175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // this message type's scope. 3185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindExtensionByLowercaseName(const string& name) const; 3195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Similar to FindFieldByCamelcaseName(), but finds extensions defined within 3215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // this message type's scope. 3225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindExtensionByCamelcaseName(const string& name) const; 3235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Reserved fields ------------------------------------------------- 3255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // A range of reserved field numbers. 3275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot struct ReservedRange { 3285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int start; // inclusive 3295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int end; // exclusive 3305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot }; 3315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of reserved ranges in this message type. 3335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int reserved_range_count() const; 3345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets an reserved range by index, where 0 <= index < 3355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // reserved_range_count(). These are returned in the order they were defined 3365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in the .proto file. 3375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ReservedRange* reserved_range(int index) const; 3385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns true if the number is in one of the reserved ranges. 3405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool IsReservedNumber(int number) const; 3415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns NULL if no reserved range contains the given number. 3435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ReservedRange* FindReservedRangeContainingNumber(int number) const; 3445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of reserved field names in this message type. 3465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int reserved_name_count() const; 3475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a reserved name by index, where 0 <= index < reserved_name_count(). 3495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& reserved_name(int index) const; 3505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns true if the field name is reserved. 3525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool IsReservedName(const string& name) const; 3535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Source Location --------------------------------------------------- 3555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Updates |*out_location| to the source location of the complete 3575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extent of this message declaration. Returns false and leaves 3585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // |*out_location| unchanged iff location information was not available. 3595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool GetSourceLocation(SourceLocation* out_location) const; 3605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 3625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot typedef MessageOptions OptionsType; 3635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allows tests to test CopyTo(proto, true). 3655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ::google::protobuf::descriptor_unittest::DescriptorTest; 3665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allows access to GetLocationPath for annotations. 3685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ::google::protobuf::io::Printer; 3695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Fill the json_name field of FieldDescriptorProto. 3715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyJsonNameTo(DescriptorProto* proto) const; 3725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Internal version of DebugString; controls the level of indenting for 3745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // correct depth. Takes |options| to control debug-string options, and 3755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // |include_opening_clause| to indicate whether the "message ... " part of the 3765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // clause has already been generated (this varies depending on context). 3775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void DebugString(int depth, string *contents, 3785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const DebugStringOptions& options, 3795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool include_opening_clause) const; 3805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Walks up the descriptor tree to generate the source location path 3825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // to this descriptor from the file root. 3835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void GetLocationPath(std::vector<int>* output) const; 3845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* name_; 3865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* full_name_; 3875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* file_; 3885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* containing_type_; 3895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const MessageOptions* options_; 3905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // True if this is a placeholder for an unknown type. 3925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_placeholder_; 3935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // True if this is a placeholder and the type name wasn't fully-qualified. 3945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_unqualified_placeholder_; 3955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 3965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int field_count_; 3975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot FieldDescriptor* fields_; 3985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int oneof_decl_count_; 3995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot OneofDescriptor* oneof_decls_; 4005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int nested_type_count_; 4015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Descriptor* nested_types_; 4025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int enum_type_count_; 4035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot EnumDescriptor* enum_types_; 4045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int extension_range_count_; 4055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ExtensionRange* extension_ranges_; 4065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int extension_count_; 4075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot FieldDescriptor* extensions_; 4085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int reserved_range_count_; 4095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ReservedRange* reserved_ranges_; 4105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int reserved_name_count_; 4115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string** reserved_names_; 4125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // IMPORTANT: If you add a new field, make sure to search for all instances 4135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // of Allocate<Descriptor>() and AllocateArray<Descriptor>() in descriptor.cc 4145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // and update them to initialize the field. 4155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 4165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Must be constructed using DescriptorPool. 4175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Descriptor() {} 4185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class DescriptorBuilder; 4195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class EnumDescriptor; 4205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FieldDescriptor; 4215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class OneofDescriptor; 4225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class MethodDescriptor; 4235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FileDescriptor; 4245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Descriptor); 4255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 4265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 4275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Describes a single field of a message. To get the descriptor for a given 4285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// field, first get the Descriptor for the message in which it is defined, 4295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// then call Descriptor::FindFieldByName(). To get a FieldDescriptor for 4305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// an extension, do one of the following: 4315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// - Get the Descriptor or FileDescriptor for its containing scope, then 4325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// call Descriptor::FindExtensionByName() or 4335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// FileDescriptor::FindExtensionByName(). 4345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// - Given a DescriptorPool, call DescriptorPool::FindExtensionByNumber(). 4355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// - Given a Reflection for a message object, call 4365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Reflection::FindKnownExtensionByName() or 4375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Reflection::FindKnownExtensionByNumber(). 4385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Use DescriptorPool to construct your own descriptors. 4395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass LIBPROTOBUF_EXPORT FieldDescriptor { 4405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 4415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Identifies a field type. 0 is reserved for errors. The order is weird 4425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // for historical reasons. Types 12 and up are new in proto2. 4435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot enum Type { 4445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_DOUBLE = 1, // double, exactly eight bytes on the wire. 4455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_FLOAT = 2, // float, exactly four bytes on the wire. 4465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_INT64 = 3, // int64, varint on the wire. Negative numbers 4475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // take 10 bytes. Use TYPE_SINT64 if negative 4485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // values are likely. 4495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_UINT64 = 4, // uint64, varint on the wire. 4505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_INT32 = 5, // int32, varint on the wire. Negative numbers 4515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // take 10 bytes. Use TYPE_SINT32 if negative 4525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // values are likely. 4535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_FIXED64 = 6, // uint64, exactly eight bytes on the wire. 4545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_FIXED32 = 7, // uint32, exactly four bytes on the wire. 4555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_BOOL = 8, // bool, varint on the wire. 4565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_STRING = 9, // UTF-8 text. 4575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_GROUP = 10, // Tag-delimited message. Deprecated. 4585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_MESSAGE = 11, // Length-delimited message. 4595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 4605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_BYTES = 12, // Arbitrary byte array. 4615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_UINT32 = 13, // uint32, varint on the wire 4625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_ENUM = 14, // Enum, varint on the wire 4635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_SFIXED32 = 15, // int32, exactly four bytes on the wire 4645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_SFIXED64 = 16, // int64, exactly eight bytes on the wire 4655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_SINT32 = 17, // int32, ZigZag-encoded varint on the wire 4665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE_SINT64 = 18, // int64, ZigZag-encoded varint on the wire 4675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 4685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot MAX_TYPE = 18, // Constant useful for defining lookup tables 4695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // indexed by Type. 4705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot }; 4715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 4725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Specifies the C++ data type used to represent the field. There is a 4735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // fixed mapping from Type to CppType where each Type maps to exactly one 4745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // CppType. 0 is reserved for errors. 4755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot enum CppType { 4765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_INT32 = 1, // TYPE_INT32, TYPE_SINT32, TYPE_SFIXED32 4775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_INT64 = 2, // TYPE_INT64, TYPE_SINT64, TYPE_SFIXED64 4785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_UINT32 = 3, // TYPE_UINT32, TYPE_FIXED32 4795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_UINT64 = 4, // TYPE_UINT64, TYPE_FIXED64 4805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_DOUBLE = 5, // TYPE_DOUBLE 4815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_FLOAT = 6, // TYPE_FLOAT 4825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_BOOL = 7, // TYPE_BOOL 4835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_ENUM = 8, // TYPE_ENUM 4845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_STRING = 9, // TYPE_STRING, TYPE_BYTES 4855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CPPTYPE_MESSAGE = 10, // TYPE_MESSAGE, TYPE_GROUP 4865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 4875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot MAX_CPPTYPE = 10, // Constant useful for defining lookup tables 4885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // indexed by CppType. 4895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot }; 4905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 4915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Identifies whether the field is optional, required, or repeated. 0 is 4925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // reserved for errors. 4935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot enum Label { 4945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot LABEL_OPTIONAL = 1, // optional 4955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot LABEL_REQUIRED = 2, // required 4965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot LABEL_REPEATED = 3, // repeated 4975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 4985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot MAX_LABEL = 3, // Constant useful for defining lookup tables 4995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // indexed by Label. 5005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot }; 5015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Valid field numbers are positive integers up to kMaxNumber. 5035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const int kMaxNumber = (1 << 29) - 1; 5045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // First field number reserved for the protocol buffer library implementation. 5065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Users may not declare fields that use reserved numbers. 5075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const int kFirstReservedNumber = 19000; 5085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Last field number reserved for the protocol buffer library implementation. 5095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Users may not declare fields that use reserved numbers. 5105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const int kLastReservedNumber = 19999; 5115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& name() const; // Name of this field within the message. 5135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& full_name() const; // Fully-qualified name of the field. 5145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& json_name() const; // JSON name of this field. 5155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* file() const;// File in which this field was defined. 5165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_extension() const; // Is this an extension field? 5175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int number() const; // Declared tag number. 5185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Same as name() except converted to lower-case. This (and especially the 5205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // FindFieldByLowercaseName() method) can be useful when parsing formats 5215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // which prefer to use lowercase naming style. (Although, technically 5225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // field names should be lowercased anyway according to the protobuf style 5235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // guide, so this only makes a difference when dealing with old .proto files 5245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // which do not follow the guide.) 5255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& lowercase_name() const; 5265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Same as name() except converted to camel-case. In this conversion, any 5285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // time an underscore appears in the name, it is removed and the next 5295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // letter is capitalized. Furthermore, the first letter of the name is 5305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // lower-cased. Examples: 5315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // FooBar -> fooBar 5325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // foo_bar -> fooBar 5335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // fooBar -> fooBar 5345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // This (and especially the FindFieldByCamelcaseName() method) can be useful 5355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // when parsing formats which prefer to use camel-case naming style. 5365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& camelcase_name() const; 5375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Type type() const; // Declared type of this field. 5395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const char* type_name() const; // Name of the declared type. 5405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot CppType cpp_type() const; // C++ type of this field. 5415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const char* cpp_type_name() const; // Name of the C++ type. 5425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Label label() const; // optional/required/repeated 5435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_required() const; // shorthand for label() == LABEL_REQUIRED 5455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_optional() const; // shorthand for label() == LABEL_OPTIONAL 5465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_repeated() const; // shorthand for label() == LABEL_REPEATED 5475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_packable() const; // shorthand for is_repeated() && 5485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // IsTypePackable(type()) 5495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_packed() const; // shorthand for is_packable() && 5505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // options().packed() 5515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_map() const; // shorthand for type() == TYPE_MESSAGE && 5525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // message_type()->options().map_entry() 5535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Index of this field within the message's field array, or the file or 5555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extension scope's extensions array. 5565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index() const; 5575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Does this field have an explicitly-declared default value? 5595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool has_default_value() const; 5605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the field default value if cpp_type() == CPPTYPE_INT32. If no 5625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // explicit default was defined, the default is 0. 5635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int32 default_value_int32() const; 5645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the field default value if cpp_type() == CPPTYPE_INT64. If no 5655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // explicit default was defined, the default is 0. 5665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int64 default_value_int64() const; 5675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the field default value if cpp_type() == CPPTYPE_UINT32. If no 5685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // explicit default was defined, the default is 0. 5695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot uint32 default_value_uint32() const; 5705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the field default value if cpp_type() == CPPTYPE_UINT64. If no 5715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // explicit default was defined, the default is 0. 5725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot uint64 default_value_uint64() const; 5735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the field default value if cpp_type() == CPPTYPE_FLOAT. If no 5745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // explicit default was defined, the default is 0.0. 5755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot float default_value_float() const; 5765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the field default value if cpp_type() == CPPTYPE_DOUBLE. If no 5775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // explicit default was defined, the default is 0.0. 5785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot double default_value_double() const; 5795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the field default value if cpp_type() == CPPTYPE_BOOL. If no 5805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // explicit default was defined, the default is false. 5815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool default_value_bool() const; 5825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the field default value if cpp_type() == CPPTYPE_ENUM. If no 5835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // explicit default was defined, the default is the first value defined 5845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in the enum type (all enum types are required to have at least one value). 5855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // This never returns NULL. 5865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor* default_value_enum() const; 5875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the field default value if cpp_type() == CPPTYPE_STRING. If no 5885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // explicit default was defined, the default is the empty string. 5895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& default_value_string() const; 5905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The Descriptor for the message of which this is a field. For extensions, 5925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // this is the extended type. Never NULL. 5935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* containing_type() const; 5945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If the field is a member of a oneof, this is the one, otherwise this is 5965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // NULL. 5975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const OneofDescriptor* containing_oneof() const; 5985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 5995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If the field is a member of a oneof, returns the index in that oneof. 6005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index_in_oneof() const; 6015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // An extension may be declared within the scope of another message. If this 6035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // field is an extension (is_extension() is true), then extension_scope() 6045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // returns that message, or NULL if the extension was declared at global 6055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // scope. If this is not an extension, extension_scope() is undefined (may 6065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // assert-fail). 6075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* extension_scope() const; 6085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If type is TYPE_MESSAGE or TYPE_GROUP, returns a descriptor for the 6105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // message or the group type. Otherwise, returns null. 6115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* message_type() const; 6125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If type is TYPE_ENUM, returns a descriptor for the enum. Otherwise, 6135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // returns null. 6145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumDescriptor* enum_type() const; 6155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get the FieldOptions for this field. This includes things listed in 6175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // square brackets after the field definition. E.g., the field: 6185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // optional string text = 1 [ctype=CORD]; 6195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // has the "ctype" option set. Allowed options are defined by FieldOptions 6205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in google/protobuf/descriptor.proto, and any available extensions of that 6215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // message. 6225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldOptions& options() const; 6235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::CopyTo(). 6255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyTo(FieldDescriptorProto* proto) const; 6265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 6285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugString() const; 6295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugStringWithOptions(). 6315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugStringWithOptions(const DebugStringOptions& options) const; 6325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Helper method to get the CppType for a particular Type. 6345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static CppType TypeToCppType(Type type); 6355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Helper method to get the name of a Type. 6375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const char* TypeName(Type type); 6385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Helper method to get the name of a CppType. 6405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const char* CppTypeName(CppType cpp_type); 6415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Return true iff [packed = true] is valid for fields of this type. 6435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static inline bool IsTypePackable(Type field_type); 6445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Source Location --------------------------------------------------- 6465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Updates |*out_location| to the source location of the complete 6485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extent of this field declaration. Returns false and leaves 6495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // |*out_location| unchanged iff location information was not available. 6505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool GetSourceLocation(SourceLocation* out_location) const; 6515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 6535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot typedef FieldOptions OptionsType; 6545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allows access to GetLocationPath for annotations. 6565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ::google::protobuf::io::Printer; 6575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Fill the json_name field of FieldDescriptorProto. 6595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyJsonNameTo(FieldDescriptorProto* proto) const; 6605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 6625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot enum PrintLabelFlag { PRINT_LABEL, OMIT_LABEL }; 6635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void DebugString(int depth, PrintLabelFlag print_label_flag, 6645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string* contents, const DebugStringOptions& options) const; 6655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // formats the default value appropriately and returns it as a string. 6675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Must have a default value to call this. If quote_string_type is true, then 6685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // types of CPPTYPE_STRING whill be surrounded by quotes and CEscaped. 6695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DefaultValueAsString(bool quote_string_type) const; 6705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Helper function that returns the field type name for DebugString. 6725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string FieldTypeNameDebugString() const; 6735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Walks up the descriptor tree to generate the source location path 6755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // to this descriptor from the file root. 6765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void GetLocationPath(std::vector<int>* output) const; 6775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 6785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* name_; 6795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* full_name_; 6805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* lowercase_name_; 6815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* camelcase_name_; 6825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Whether the user has specified the json_name field option in the .proto 6835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // file. 6845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool has_json_name_; 6855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If has_json_name_ is true, it's the value specified by the user. 6865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Otherwise, it has the same value as lowercase_name_. 6875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* json_name_; 6885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* file_; 6895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int number_; 6905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Type type_; 6915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Label label_; 6925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_extension_; 6935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index_in_oneof_; 6945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* containing_type_; 6955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const OneofDescriptor* containing_oneof_; 6965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* extension_scope_; 6975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* message_type_; 6985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumDescriptor* enum_type_; 6995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldOptions* options_; 7005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // IMPORTANT: If you add a new field, make sure to search for all instances 7015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // of Allocate<FieldDescriptor>() and AllocateArray<FieldDescriptor>() in 7025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // descriptor.cc and update them to initialize the field. 7035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool has_default_value_; 7055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot union { 7065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int32 default_value_int32_; 7075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int64 default_value_int64_; 7085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot uint32 default_value_uint32_; 7095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot uint64 default_value_uint64_; 7105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot float default_value_float_; 7115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot double default_value_double_; 7125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool default_value_bool_; 7135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor* default_value_enum_; 7155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* default_value_string_; 7165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot }; 7175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const CppType kTypeToCppTypeMap[MAX_TYPE + 1]; 7195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const char * const kTypeToName[MAX_TYPE + 1]; 7215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const char * const kCppTypeToName[MAX_CPPTYPE + 1]; 7235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const char * const kLabelToName[MAX_LABEL + 1]; 7255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Must be constructed using DescriptorPool. 7275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot FieldDescriptor() {} 7285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class DescriptorBuilder; 7295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FileDescriptor; 7305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class Descriptor; 7315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class OneofDescriptor; 7325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldDescriptor); 7335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 7345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Describes a oneof defined in a message type. 7365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass LIBPROTOBUF_EXPORT OneofDescriptor { 7375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 7385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& name() const; // Name of this oneof. 7395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& full_name() const; // Fully-qualified name of the oneof. 7405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Index of this oneof within the message's oneof array. 7425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index() const; 7435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The Descriptor for the message containing this oneof. 7455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* containing_type() const; 7465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of (non-extension) fields which are members of this oneof. 7485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int field_count() const; 7495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get a member of this oneof, in the order in which they were declared in the 7505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // .proto file. Does not include extensions. 7515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* field(int index) const; 7525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::CopyTo(). 7545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyTo(OneofDescriptorProto* proto) const; 7555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 7575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugString() const; 7585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugStringWithOptions(). 7605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugStringWithOptions(const DebugStringOptions& options) const; 7615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Source Location --------------------------------------------------- 7635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Updates |*out_location| to the source location of the complete 7655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extent of this oneof declaration. Returns false and leaves 7665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // |*out_location| unchanged iff location information was not available. 7675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool GetSourceLocation(SourceLocation* out_location) const; 7685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 7705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allows access to GetLocationPath for annotations. 7715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ::google::protobuf::io::Printer; 7725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 7745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void DebugString(int depth, string* contents, 7755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const DebugStringOptions& options) const; 7765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Walks up the descriptor tree to generate the source location path 7785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // to this descriptor from the file root. 7795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void GetLocationPath(std::vector<int>* output) const; 7805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* name_; 7825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* full_name_; 7835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* containing_type_; 7845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_extendable_; 7855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int field_count_; 7865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor** fields_; 7875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // IMPORTANT: If you add a new field, make sure to search for all instances 7885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // of Allocate<OneofDescriptor>() and AllocateArray<OneofDescriptor>() 7895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in descriptor.cc and update them to initialize the field. 7905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Must be constructed using DescriptorPool. 7925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot OneofDescriptor() {} 7935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class DescriptorBuilder; 7945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class Descriptor; 7955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(OneofDescriptor); 7965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 7975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 7985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Describes an enum type defined in a .proto file. To get the EnumDescriptor 7995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// for a generated enum type, call TypeName_descriptor(). Use DescriptorPool 8005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// to construct your own descriptors. 8015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass LIBPROTOBUF_EXPORT EnumDescriptor { 8025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 8035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The name of this enum type in the containing scope. 8045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& name() const; 8055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The fully-qualified name of the enum type, scope delimited by periods. 8075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& full_name() const; 8085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Index of this enum within the file or containing message's enum array. 8105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index() const; 8115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The .proto file in which this enum type was defined. Never NULL. 8135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* file() const; 8145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of values for this EnumDescriptor. Guaranteed to be greater 8165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // than zero. 8175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int value_count() const; 8185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a value by index, where 0 <= index < value_count(). 8195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 8205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor* value(int index) const; 8215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a value by name. Returns NULL if no such value exists. 8235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor* FindValueByName(const string& name) const; 8245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a value by number. Returns NULL if no such value exists. If 8255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // multiple values have this number, the first one defined is returned. 8265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor* FindValueByNumber(int number) const; 8275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If this enum type is nested in a message type, this is that message type. 8295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Otherwise, NULL. 8305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* containing_type() const; 8315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get options for this enum type. These are specified in the .proto file by 8335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // placing lines like "option foo = 1234;" in the enum definition. Allowed 8345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // options are defined by EnumOptions in google/protobuf/descriptor.proto, 8355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // and any available extensions of that message. 8365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumOptions& options() const; 8375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::CopyTo(). 8395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyTo(EnumDescriptorProto* proto) const; 8405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 8425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugString() const; 8435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugStringWithOptions(). 8455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugStringWithOptions(const DebugStringOptions& options) const; 8465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns true if this is a placeholder for an unknown enum. This will 8495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // only be the case if this descriptor comes from a DescriptorPool 8505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // with AllowUnknownDependencies() set. 8515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_placeholder() const; 8525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Source Location --------------------------------------------------- 8545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Updates |*out_location| to the source location of the complete 8565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extent of this enum declaration. Returns false and leaves 8575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // |*out_location| unchanged iff location information was not available. 8585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool GetSourceLocation(SourceLocation* out_location) const; 8595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 8615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot typedef EnumOptions OptionsType; 8625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allows access to GetLocationPath for annotations. 8645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ::google::protobuf::io::Printer; 8655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looks up a value by number. If the value does not exist, dynamically 8675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // creates a new EnumValueDescriptor for that value, assuming that it was 8685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // unknown. If a new descriptor is created, this is done in a thread-safe way, 8695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // and future calls will return the same value descriptor pointer. 8705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // 8715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // This is private but is used by GeneratedMessageReflection (which is 8725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // friended below) to return a valid EnumValueDescriptor from GetEnum() when 8735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // this feature is enabled. 8745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor* 8755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot FindValueByNumberCreatingIfUnknown(int number) const; 8765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 8795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void DebugString(int depth, string *contents, 8805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const DebugStringOptions& options) const; 8815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Walks up the descriptor tree to generate the source location path 8835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // to this descriptor from the file root. 8845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void GetLocationPath(std::vector<int>* output) const; 8855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* name_; 8875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* full_name_; 8885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* file_; 8895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* containing_type_; 8905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumOptions* options_; 8915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // True if this is a placeholder for an unknown type. 8935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_placeholder_; 8945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // True if this is a placeholder and the type name wasn't fully-qualified. 8955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_unqualified_placeholder_; 8965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 8975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int value_count_; 8985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot EnumValueDescriptor* values_; 8995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // IMPORTANT: If you add a new field, make sure to search for all instances 9005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // of Allocate<EnumDescriptor>() and AllocateArray<EnumDescriptor>() in 9015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // descriptor.cc and update them to initialize the field. 9025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Must be constructed using DescriptorPool. 9045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot EnumDescriptor() {} 9055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class DescriptorBuilder; 9065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class Descriptor; 9075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FieldDescriptor; 9085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class EnumValueDescriptor; 9095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FileDescriptor; 9105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class internal::GeneratedMessageReflection; 9115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumDescriptor); 9125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 9135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Describes an individual enum constant of a particular type. To get the 9155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// EnumValueDescriptor for a given enum value, first get the EnumDescriptor 9165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// for its type, then use EnumDescriptor::FindValueByName() or 9175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// EnumDescriptor::FindValueByNumber(). Use DescriptorPool to construct 9185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// your own descriptors. 9195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass LIBPROTOBUF_EXPORT EnumValueDescriptor { 9205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 9215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& name() const; // Name of this enum constant. 9225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index() const; // Index within the enums's Descriptor. 9235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int number() const; // Numeric value of this enum constant. 9245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The full_name of an enum value is a sibling symbol of the enum type. 9265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // e.g. the full name of FieldDescriptorProto::TYPE_INT32 is actually 9275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // "google.protobuf.FieldDescriptorProto.TYPE_INT32", NOT 9285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // "google.protobuf.FieldDescriptorProto.Type.TYPE_INT32". This is to conform 9295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // with C++ scoping rules for enums. 9305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& full_name() const; 9315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The type of this value. Never NULL. 9335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumDescriptor* type() const; 9345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get options for this enum value. These are specified in the .proto file 9365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // by adding text like "[foo = 1234]" after an enum value definition. 9375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allowed options are defined by EnumValueOptions in 9385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // google/protobuf/descriptor.proto, and any available extensions of that 9395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // message. 9405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueOptions& options() const; 9415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::CopyTo(). 9435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyTo(EnumValueDescriptorProto* proto) const; 9445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 9465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugString() const; 9475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugStringWithOptions(). 9495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugStringWithOptions(const DebugStringOptions& options) const; 9505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Source Location --------------------------------------------------- 9535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Updates |*out_location| to the source location of the complete 9555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extent of this enum value declaration. Returns false and leaves 9565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // |*out_location| unchanged iff location information was not available. 9575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool GetSourceLocation(SourceLocation* out_location) const; 9585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 9605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot typedef EnumValueOptions OptionsType; 9615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allows access to GetLocationPath for annotations. 9635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ::google::protobuf::io::Printer; 9645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 9665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void DebugString(int depth, string *contents, 9675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const DebugStringOptions& options) const; 9685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Walks up the descriptor tree to generate the source location path 9705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // to this descriptor from the file root. 9715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void GetLocationPath(std::vector<int>* output) const; 9725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* name_; 9745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* full_name_; 9755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int number_; 9765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumDescriptor* type_; 9775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueOptions* options_; 9785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // IMPORTANT: If you add a new field, make sure to search for all instances 9795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // of Allocate<EnumValueDescriptor>() and AllocateArray<EnumValueDescriptor>() 9805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in descriptor.cc and update them to initialize the field. 9815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Must be constructed using DescriptorPool. 9835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot EnumValueDescriptor() {} 9845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class DescriptorBuilder; 9855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class EnumDescriptor; 9865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FileDescriptorTables; 9875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumValueDescriptor); 9885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 9895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 9905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Describes an RPC service. To get the ServiceDescriptor for a service, 9915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// call Service::GetDescriptor(). Generated service classes also have a 9925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// static method called descriptor() which returns the type's 9935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// ServiceDescriptor. Use DescriptorPool to construct your own descriptors. 9945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass LIBPROTOBUF_EXPORT ServiceDescriptor { 9955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 9965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The name of the service, not including its containing scope. 9975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& name() const; 9985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The fully-qualified name of the service, scope delimited by periods. 9995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& full_name() const; 10005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Index of this service within the file's services array. 10015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index() const; 10025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The .proto file in which this service was defined. Never NULL. 10045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* file() const; 10055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get options for this service type. These are specified in the .proto file 10075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // by placing lines like "option foo = 1234;" in the service definition. 10085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allowed options are defined by ServiceOptions in 10095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // google/protobuf/descriptor.proto, and any available extensions of that 10105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // message. 10115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ServiceOptions& options() const; 10125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of methods this service defines. 10145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int method_count() const; 10155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a MethodDescriptor by index, where 0 <= index < method_count(). 10165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 10175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const MethodDescriptor* method(int index) const; 10185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Look up a MethodDescriptor by name. 10205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const MethodDescriptor* FindMethodByName(const string& name) const; 10215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::CopyTo(). 10225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyTo(ServiceDescriptorProto* proto) const; 10235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 10255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugString() const; 10265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugStringWithOptions(). 10285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugStringWithOptions(const DebugStringOptions& options) const; 10295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Source Location --------------------------------------------------- 10325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Updates |*out_location| to the source location of the complete 10345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extent of this service declaration. Returns false and leaves 10355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // |*out_location| unchanged iff location information was not available. 10365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool GetSourceLocation(SourceLocation* out_location) const; 10375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 10395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot typedef ServiceOptions OptionsType; 10405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allows access to GetLocationPath for annotations. 10425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ::google::protobuf::io::Printer; 10435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 10455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void DebugString(string *contents, const DebugStringOptions& options) const; 10465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Walks up the descriptor tree to generate the source location path 10485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // to this descriptor from the file root. 10495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void GetLocationPath(std::vector<int>* output) const; 10505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* name_; 10525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* full_name_; 10535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* file_; 10545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ServiceOptions* options_; 10555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int method_count_; 10565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot MethodDescriptor* methods_; 10575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // IMPORTANT: If you add a new field, make sure to search for all instances 10585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // of Allocate<ServiceDescriptor>() and AllocateArray<ServiceDescriptor>() in 10595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // descriptor.cc and update them to initialize the field. 10605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Must be constructed using DescriptorPool. 10625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ServiceDescriptor() {} 10635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class DescriptorBuilder; 10645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FileDescriptor; 10655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class MethodDescriptor; 10665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ServiceDescriptor); 10675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 10685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Describes an individual service method. To obtain a MethodDescriptor given 10705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// a service, first get its ServiceDescriptor, then call 10715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// ServiceDescriptor::FindMethodByName(). Use DescriptorPool to construct your 10725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// own descriptors. 10735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass LIBPROTOBUF_EXPORT MethodDescriptor { 10745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 10755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Name of this method, not including containing scope. 10765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& name() const; 10775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The fully-qualified name of the method, scope delimited by periods. 10785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& full_name() const; 10795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Index within the service's Descriptor. 10805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index() const; 10815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets the service to which this method belongs. Never NULL. 10835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ServiceDescriptor* service() const; 10845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets the type of protocol message which this method accepts as input. 10865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* input_type() const; 10875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets the type of protocol message which this message produces as output. 10885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* output_type() const; 10895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets whether the client streams multiple requests. 10915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool client_streaming() const; 10925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets whether the server streams multiple responses. 10935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool server_streaming() const; 10945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 10955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get options for this method. These are specified in the .proto file by 10965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // placing lines like "option foo = 1234;" in curly-braces after a method 10975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // declaration. Allowed options are defined by MethodOptions in 10985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // google/protobuf/descriptor.proto, and any available extensions of that 10995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // message. 11005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const MethodOptions& options() const; 11015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::CopyTo(). 11035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyTo(MethodDescriptorProto* proto) const; 11045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 11065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugString() const; 11075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugStringWithOptions(). 11095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugStringWithOptions(const DebugStringOptions& options) const; 11105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Source Location --------------------------------------------------- 11135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Updates |*out_location| to the source location of the complete 11155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extent of this method declaration. Returns false and leaves 11165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // |*out_location| unchanged iff location information was not available. 11175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool GetSourceLocation(SourceLocation* out_location) const; 11185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 11205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot typedef MethodOptions OptionsType; 11215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Allows access to GetLocationPath for annotations. 11235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ::google::protobuf::io::Printer; 11245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 11265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void DebugString(int depth, string *contents, 11275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const DebugStringOptions& options) const; 11285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Walks up the descriptor tree to generate the source location path 11305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // to this descriptor from the file root. 11315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void GetLocationPath(std::vector<int>* output) const; 11325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* name_; 11345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* full_name_; 11355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ServiceDescriptor* service_; 11365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* input_type_; 11375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* output_type_; 11385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const MethodOptions* options_; 11395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool client_streaming_; 11405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool server_streaming_; 11415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // IMPORTANT: If you add a new field, make sure to search for all instances 11425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // of Allocate<MethodDescriptor>() and AllocateArray<MethodDescriptor>() in 11435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // descriptor.cc and update them to initialize the field. 11445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Must be constructed using DescriptorPool. 11465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot MethodDescriptor() {} 11475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class DescriptorBuilder; 11485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ServiceDescriptor; 11495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MethodDescriptor); 11505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 11515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Describes a whole .proto file. To get the FileDescriptor for a compiled-in 11545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// file, get the descriptor for something defined in that file and call 11555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// descriptor->file(). Use DescriptorPool to construct your own descriptors. 11565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass LIBPROTOBUF_EXPORT FileDescriptor { 11575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 11585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The filename, relative to the source tree. 11595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // e.g. "google/protobuf/descriptor.proto" 11605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& name() const; 11615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The package, e.g. "google.protobuf.compiler". 11635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& package() const; 11645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The DescriptorPool in which this FileDescriptor and all its contents were 11665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // allocated. Never NULL. 11675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const DescriptorPool* pool() const; 11685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of files imported by this one. 11705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int dependency_count() const; 11715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets an imported file by index, where 0 <= index < dependency_count(). 11725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 11735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* dependency(int index) const; 11745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of files public imported by this one. 11765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The public dependency list is a subset of the dependency list. 11775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int public_dependency_count() const; 11785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a public imported file by index, where 0 <= index < 11795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // public_dependency_count(). 11805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 11815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* public_dependency(int index) const; 11825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The number of files that are imported for weak fields. 11845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // The weak dependency list is a subset of the dependency list. 11855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int weak_dependency_count() const; 11865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a weak imported file by index, where 0 <= index < 11875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // weak_dependency_count(). 11885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 11895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* weak_dependency(int index) const; 11905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Number of top-level message types defined in this file. (This does not 11925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // include nested types.) 11935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int message_type_count() const; 11945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a top-level message type, where 0 <= index < message_type_count(). 11955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 11965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* message_type(int index) const; 11975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 11985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Number of top-level enum types defined in this file. (This does not 11995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // include nested types.) 12005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int enum_type_count() const; 12015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a top-level enum type, where 0 <= index < enum_type_count(). 12025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 12035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumDescriptor* enum_type(int index) const; 12045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Number of services defined in this file. 12065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int service_count() const; 12075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets a service, where 0 <= index < service_count(). 12085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 12095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ServiceDescriptor* service(int index) const; 12105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Number of extensions defined at file scope. (This does not include 12125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extensions nested within message types.) 12135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int extension_count() const; 12145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Gets an extension's descriptor, where 0 <= index < extension_count(). 12155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These are returned in the order they were defined in the .proto file. 12165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* extension(int index) const; 12175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get options for this file. These are specified in the .proto file by 12195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // placing lines like "option foo = 1234;" at the top level, outside of any 12205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // other definitions. Allowed options are defined by FileOptions in 12215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // google/protobuf/descriptor.proto, and any available extensions of that 12225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // message. 12235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileOptions& options() const; 12245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Syntax of this file. 12265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot enum Syntax { 12275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot SYNTAX_UNKNOWN = 0, 12285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot SYNTAX_PROTO2 = 2, 12295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot SYNTAX_PROTO3 = 3, 12305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot }; 12315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Syntax syntax() const; 12325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const char* SyntaxName(Syntax syntax); 12335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Find a top-level message type by name. Returns NULL if not found. 12355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* FindMessageTypeByName(const string& name) const; 12365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Find a top-level enum type by name. Returns NULL if not found. 12375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumDescriptor* FindEnumTypeByName(const string& name) const; 12385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Find an enum value defined in any top-level enum by name. Returns NULL if 12395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // not found. 12405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor* FindEnumValueByName(const string& name) const; 12415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Find a service definition by name. Returns NULL if not found. 12425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ServiceDescriptor* FindServiceByName(const string& name) const; 12435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Find a top-level extension definition by name. Returns NULL if not found. 12445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindExtensionByName(const string& name) const; 12455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Similar to FindExtensionByName(), but searches by lowercased-name. See 12465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Descriptor::FindFieldByLowercaseName(). 12475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindExtensionByLowercaseName(const string& name) const; 12485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Similar to FindExtensionByName(), but searches by camelcased-name. See 12495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Descriptor::FindFieldByCamelcaseName(). 12505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindExtensionByCamelcaseName(const string& name) const; 12515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::CopyTo(). 12535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Notes: 12545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // - This method does NOT copy source code information since it is relatively 12555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // large and rarely needed. See CopySourceCodeInfoTo() below. 12565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyTo(FileDescriptorProto* proto) const; 12575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Write the source code information of this FileDescriptor into the given 12585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // FileDescriptorProto. See CopyTo() above. 12595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopySourceCodeInfoTo(FileDescriptorProto* proto) const; 12605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Fill the json_name field of FieldDescriptorProto for all fields. Can only 12615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // be called after CopyTo(). 12625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void CopyJsonNameTo(FileDescriptorProto* proto) const; 12635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugString(). 12655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugString() const; 12665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See Descriptor::DebugStringWithOptions(). 12685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot string DebugStringWithOptions(const DebugStringOptions& options) const; 12695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns true if this is a placeholder for an unknown file. This will 12715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // only be the case if this descriptor comes from a DescriptorPool 12725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // with AllowUnknownDependencies() set. 12735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_placeholder() const; 12745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Updates |*out_location| to the source location of the complete extent of 12765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // this file declaration (namely, the empty path). 12775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool GetSourceLocation(SourceLocation* out_location) const; 12785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Updates |*out_location| to the source location of the complete 12805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // extent of the declaration or declaration-part denoted by |path|. 12815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Returns false and leaves |*out_location| unchanged iff location 12825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // information was not available. (See SourceCodeInfo for 12835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // description of path encoding.) 12845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool GetSourceLocation(const std::vector<int>& path, 12855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot SourceLocation* out_location) const; 12865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 12885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot typedef FileOptions OptionsType; 12895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 12905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* name_; 12915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string* package_; 12925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const DescriptorPool* pool_; 12935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int dependency_count_; 12945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor** dependencies_; 12955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int public_dependency_count_; 12965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int* public_dependencies_; 12975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int weak_dependency_count_; 12985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int* weak_dependencies_; 12995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int message_type_count_; 13005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Descriptor* message_types_; 13015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int enum_type_count_; 13025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot EnumDescriptor* enum_types_; 13035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int service_count_; 13045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ServiceDescriptor* services_; 13055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int extension_count_; 13065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Syntax syntax_; 13075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool is_placeholder_; 13085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot FieldDescriptor* extensions_; 13095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileOptions* options_; 13105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptorTables* tables_; 13125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const SourceCodeInfo* source_code_info_; 13135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // IMPORTANT: If you add a new field, make sure to search for all instances 13145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // of Allocate<FileDescriptor>() and AllocateArray<FileDescriptor>() in 13155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // descriptor.cc and update them to initialize the field. 13165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot FileDescriptor() {} 13185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class DescriptorBuilder; 13195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class Descriptor; 13205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FieldDescriptor; 13215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class OneofDescriptor; 13225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class EnumDescriptor; 13235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class EnumValueDescriptor; 13245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class MethodDescriptor; 13255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ServiceDescriptor; 13265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileDescriptor); 13275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 13285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// =================================================================== 13305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Used to construct descriptors. 13325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 13335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Normally you won't want to build your own descriptors. Message classes 13345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// constructed by the protocol compiler will provide them for you. However, 13355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// if you are implementing Message on your own, or if you are writing a 13365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// program which can operate on totally arbitrary types and needs to load 13375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// them from some sort of database, you might need to. 13385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 13395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Since Descriptors are composed of a whole lot of cross-linked bits of 13405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// data that would be a pain to put together manually, the 13415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// DescriptorPool class is provided to make the process easier. It can 13425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// take a FileDescriptorProto (defined in descriptor.proto), validate it, 13435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// and convert it to a set of nicely cross-linked Descriptors. 13445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 13455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// DescriptorPool also helps with memory management. Descriptors are 13465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// composed of many objects containing static data and pointers to each 13475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// other. In all likelihood, when it comes time to delete this data, 13485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// you'll want to delete it all at once. In fact, it is not uncommon to 13495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// have a whole pool of descriptors all cross-linked with each other which 13505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// you wish to delete all at once. This class represents such a pool, and 13515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// handles the memory management for you. 13525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// 13535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// You can also search for descriptors within a DescriptorPool by name, and 13545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// extensions by number. 13555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotclass LIBPROTOBUF_EXPORT DescriptorPool { 13565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 13575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Create a normal, empty DescriptorPool. 13585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot DescriptorPool(); 13595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Constructs a DescriptorPool that, when it can't find something among the 13615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // descriptors already in the pool, looks for it in the given 13625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // DescriptorDatabase. 13635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Notes: 13645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // - If a DescriptorPool is constructed this way, its BuildFile*() methods 13655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // must not be called (they will assert-fail). The only way to populate 13665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // the pool with descriptors is to call the Find*By*() methods. 13675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // - The Find*By*() methods may block the calling thread if the 13685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // DescriptorDatabase blocks. This in turn means that parsing messages 13695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // may block if they need to look up extensions. 13705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // - The Find*By*() methods will use mutexes for thread-safety, thus making 13715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // them slower even when they don't have to fall back to the database. 13725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // In fact, even the Find*By*() methods of descriptor objects owned by 13735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // this pool will be slower, since they will have to obtain locks too. 13745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // - An ErrorCollector may optionally be given to collect validation errors 13755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in files loaded from the database. If not given, errors will be printed 13765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // to GOOGLE_LOG(ERROR). Remember that files are built on-demand, so this 13775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // ErrorCollector may be called from any thread that calls one of the 13785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Find*By*() methods. 13795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // - The DescriptorDatabase must not be mutated during the lifetime of 13805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // the DescriptorPool. Even if the client takes care to avoid data races, 13815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // changes to the content of the DescriptorDatabase may not be reflected 13825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in subsequent lookups in the DescriptorPool. 13835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot class ErrorCollector; 13845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot explicit DescriptorPool(DescriptorDatabase* fallback_database, 13855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ErrorCollector* error_collector = NULL); 13865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ~DescriptorPool(); 13885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Get a pointer to the generated pool. Generated protocol message classes 13905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // which are compiled into the binary will allocate their descriptors in 13915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // this pool. Do not add your own descriptors to this pool. 13925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static const DescriptorPool* generated_pool(); 13935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Find a FileDescriptor in the pool by file name. Returns NULL if not 13965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // found. 13975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* FindFileByName(const string& name) const; 13985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 13995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Find the FileDescriptor in the pool which defines the given symbol. 14005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If any of the Find*ByName() methods below would succeed, then this is 14015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // equivalent to calling that method and calling the result's file() method. 14025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Otherwise this returns NULL. 14035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* FindFileContainingSymbol( 14045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& symbol_name) const; 14055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Looking up descriptors ------------------------------------------ 14075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These find descriptors by fully-qualified name. These will find both 14085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // top-level descriptors and nested descriptors. They return NULL if not 14095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // found. 14105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor* FindMessageTypeByName(const string& name) const; 14125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindFieldByName(const string& name) const; 14135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindExtensionByName(const string& name) const; 14145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const OneofDescriptor* FindOneofByName(const string& name) const; 14155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumDescriptor* FindEnumTypeByName(const string& name) const; 14165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor* FindEnumValueByName(const string& name) const; 14175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ServiceDescriptor* FindServiceByName(const string& name) const; 14185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const MethodDescriptor* FindMethodByName(const string& name) const; 14195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Finds an extension of the given type by number. The extendee must be 14215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // a member of this DescriptorPool or one of its underlays. 14225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor* FindExtensionByNumber(const Descriptor* extendee, 14235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int number) const; 14245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Finds extensions of extendee. The extensions will be appended to 14265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // out in an undefined order. Only extensions defined directly in 14275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // this DescriptorPool or one of its underlays are guaranteed to be 14285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // found: extensions defined in the fallback database might not be found 14295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // depending on the database implementation. 14305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void FindAllExtensions(const Descriptor* extendee, 14315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot std::vector<const FieldDescriptor*>* out) const; 14325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Building descriptors -------------------------------------------- 14345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // When converting a FileDescriptorProto to a FileDescriptor, various 14365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // errors might be detected in the input. The caller may handle these 14375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // programmatically by implementing an ErrorCollector. 14385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot class LIBPROTOBUF_EXPORT ErrorCollector { 14395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot public: 14405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot inline ErrorCollector() {} 14415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot virtual ~ErrorCollector(); 14425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These constants specify what exact part of the construct is broken. 14445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // This is useful e.g. for mapping the error back to an exact location 14455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // in a .proto file. 14465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot enum ErrorLocation { 14475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot NAME, // the symbol name, or the package name for files 14485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot NUMBER, // field or extension range number 14495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot TYPE, // field type 14505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot EXTENDEE, // field extendee 14515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot DEFAULT_VALUE, // field default value 14525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot INPUT_TYPE, // method input type 14535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot OUTPUT_TYPE, // method output type 14545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot OPTION_NAME, // name in assignment 14555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot OPTION_VALUE, // value in option assignment 14565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot OTHER // some other problem 14575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot }; 14585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Reports an error in the FileDescriptorProto. Use this function if the 14605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // problem occurred should interrupt building the FileDescriptorProto. 14615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot virtual void AddError( 14625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& filename, // File name in which the error occurred. 14635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& element_name, // Full name of the erroneous element. 14645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Message* descriptor, // Descriptor of the erroneous element. 14655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ErrorLocation location, // One of the location constants, above. 14665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& message // Human-readable error message. 14675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ) = 0; 14685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Reports a warning in the FileDescriptorProto. Use this function if the 14705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // problem occurred should NOT interrupt building the FileDescriptorProto. 14715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot virtual void AddWarning( 14725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& /*filename*/, // File name in which the error occurred. 14735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& /*element_name*/, // Full name of the erroneous element. 14745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Message* /*descriptor*/, // Descriptor of the erroneous element. 14755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ErrorLocation /*location*/, // One of the location constants, above. 14765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const string& /*message*/ // Human-readable error message. 14775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ) {} 14785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 14805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ErrorCollector); 14815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot }; 14825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Convert the FileDescriptorProto to real descriptors and place them in 14845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // this DescriptorPool. All dependencies of the file must already be in 14855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // the pool. Returns the resulting FileDescriptor, or NULL if there were 14865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // problems with the input (e.g. the message was invalid, or dependencies 14875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // were missing). Details about the errors are written to GOOGLE_LOG(ERROR). 14885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* BuildFile(const FileDescriptorProto& proto); 14895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Same as BuildFile() except errors are sent to the given ErrorCollector. 14915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* BuildFileCollectingErrors( 14925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptorProto& proto, 14935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ErrorCollector* error_collector); 14945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 14955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // By default, it is an error if a FileDescriptorProto contains references 14965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // to types or other files that are not found in the DescriptorPool (or its 14975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // backing DescriptorDatabase, if any). If you call 14985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // AllowUnknownDependencies(), however, then unknown types and files 14995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // will be replaced by placeholder descriptors (which can be identified by 15005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // the is_placeholder() method). This can allow you to 15015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // perform some useful operations with a .proto file even if you do not 15025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // have access to other .proto files on which it depends. However, some 15035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // heuristics must be used to fill in the gaps in information, and these 15045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // can lead to descriptors which are inaccurate. For example, the 15055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // DescriptorPool may be forced to guess whether an unknown type is a message 15065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // or an enum, as well as what package it resides in. Furthermore, 15075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // placeholder types will not be discoverable via FindMessageTypeByName() 15085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // and similar methods, which could confuse some descriptor-based algorithms. 15095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Generally, the results of this option should be handled with extreme care. 15105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void AllowUnknownDependencies() { allow_unknown_ = true; } 15115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // By default, weak imports are allowed to be missing, in which case we will 15135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // use a placeholder for the dependency and convert the field to be an Empty 15145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // message field. If you call EnforceWeakDependencies(true), however, the 15155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // DescriptorPool will report a import not found error. 15165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void EnforceWeakDependencies(bool enforce) { enforce_weak_ = enforce; } 15175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Internal stuff -------------------------------------------------- 15195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These methods MUST NOT be called from outside the proto2 library. 15205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // These methods may contain hidden pitfalls and may be removed in a 15215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // future library version. 15225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Create a DescriptorPool which is overlaid on top of some other pool. 15245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If you search for a descriptor in the overlay and it is not found, the 15255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // underlay will be searched as a backup. If the underlay has its own 15265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // underlay, that will be searched next, and so on. This also means that 15275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // files built in the overlay will be cross-linked with the underlay's 15285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // descriptors if necessary. The underlay remains property of the caller; 15295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // it must remain valid for the lifetime of the newly-constructed pool. 15305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // 15315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Example: Say you want to parse a .proto file at runtime in order to use 15325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // its type with a DynamicMessage. Say this .proto file has dependencies, 15335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // but you know that all the dependencies will be things that are already 15345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // compiled into the binary. For ease of use, you'd like to load the types 15355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // right out of generated_pool() rather than have to parse redundant copies 15365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // of all these .protos and runtime. But, you don't want to add the parsed 15375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // types directly into generated_pool(): this is not allowed, and would be 15385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // bad design anyway. So, instead, you could use generated_pool() as an 15395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // underlay for a new DescriptorPool in which you add only the new file. 15405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // 15415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // WARNING: Use of underlays can lead to many subtle gotchas. Instead, 15425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // try to formulate what you want to do in terms of DescriptorDatabases. 15435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot explicit DescriptorPool(const DescriptorPool* underlay); 15445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Called by generated classes at init time to add their descriptors to 15465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // generated_pool. Do NOT call this in your own code! filename must be a 15475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // permanent string (e.g. a string literal). 15485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static void InternalAddGeneratedFile( 15495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const void* encoded_file_descriptor, int size); 15505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // For internal use only: Gets a non-const pointer to the generated pool. 15535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // This is called at static-initialization time only, so thread-safety is 15545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // not a concern. If both an underlay and a fallback database are present, 15555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // the underlay takes precedence. 15565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot static DescriptorPool* internal_generated_pool(); 15575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // For internal use only: Changes the behavior of BuildFile() such that it 15595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // allows the file to make reference to message types declared in other files 15605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // which it did not officially declare as dependencies. 15615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void InternalDontEnforceDependencies(); 15625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // For internal use only. 15645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void internal_set_underlay(const DescriptorPool* underlay) { 15655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot underlay_ = underlay; 15665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } 15675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // For internal (unit test) use only: Returns true if a FileDescriptor has 15695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // been constructed for the given file, false otherwise. Useful for testing 15705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // lazy descriptor initialization behavior. 15715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool InternalIsFileLoaded(const string& filename) const; 15725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Add a file to unused_import_track_files_. DescriptorBuilder will log 15755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // warnings for those files if there is any unused import. 15765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void AddUnusedImportTrackFile(const string& file_name); 15775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot void ClearUnusedImportTrackFiles(); 15785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot private: 15805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class Descriptor; 15815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FieldDescriptor; 15825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class EnumDescriptor; 15835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class ServiceDescriptor; 15845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FileDescriptor; 15855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class DescriptorBuilder; 15865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot friend class FileDescriptorTables; 15875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Return true if the given name is a sub-symbol of any non-package 15895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // descriptor that already exists in the descriptor pool. (The full 15905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // definition of such types is already known.) 15915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool IsSubSymbolOfBuiltType(const string& name) const; 15925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 15935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Tries to find something in the fallback database and link in the 15945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // corresponding proto file. Returns true if successful, in which case 15955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // the caller should search for the thing again. These are declared 15965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // const because they are called by (semantically) const methods. 15975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool TryFindFileInFallbackDatabase(const string& name) const; 15985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool TryFindSymbolInFallbackDatabase(const string& name) const; 15995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool TryFindExtensionInFallbackDatabase(const Descriptor* containing_type, 16005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int field_number) const; 16015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // Like BuildFile() but called internally when the file has been loaded from 16035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // fallback_database_. Declared const because it is called by (semantically) 16045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // const methods. 16055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptor* BuildFileFromDatabase( 16065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FileDescriptorProto& proto) const; 16075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // If fallback_database_ is NULL, this is NULL. Otherwise, this is a mutex 16095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // which must be locked while accessing tables_. 16105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot Mutex* mutex_; 16115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // See constructor. 16135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot DescriptorDatabase* fallback_database_; 16145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot ErrorCollector* default_error_collector_; 16155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const DescriptorPool* underlay_; 16165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // This class contains a lot of hash maps with complicated types that 16185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot // we'd like to keep out of the header. 16195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot class Tables; 16205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot google::protobuf::scoped_ptr<Tables> tables_; 16215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool enforce_dependencies_; 16235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool allow_unknown_; 16245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot bool enforce_weak_; 16255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot std::set<string> unused_import_track_files_; 16265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorPool); 16285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot}; 16295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// inline methods ==================================================== 16315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// These macros makes this repetitive code more readable. 16335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#define PROTOBUF_DEFINE_ACCESSOR(CLASS, FIELD, TYPE) \ 16345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot inline TYPE CLASS::FIELD() const { return FIELD##_; } 16355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Strings fields are stored as pointers but returned as const references. 16375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#define PROTOBUF_DEFINE_STRING_ACCESSOR(CLASS, FIELD) \ 16385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot inline const string& CLASS::FIELD() const { return *FIELD##_; } 16395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Arrays take an index parameter, obviously. 16415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#define PROTOBUF_DEFINE_ARRAY_ACCESSOR(CLASS, FIELD, TYPE) \ 16425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot inline TYPE CLASS::FIELD(int index) const { return FIELD##s_ + index; } 16435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#define PROTOBUF_DEFINE_OPTIONS_ACCESSOR(CLASS, TYPE) \ 16455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot inline const TYPE& CLASS::options() const { return *options_; } 16465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(Descriptor, name) 16485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(Descriptor, full_name) 16495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, file, const FileDescriptor*) 16505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, containing_type, const Descriptor*) 16515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, field_count, int) 16535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, oneof_decl_count, int) 16545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, nested_type_count, int) 16555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, enum_type_count, int) 16565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, field, const FieldDescriptor*) 16585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, oneof_decl, const OneofDescriptor*) 16595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, nested_type, const Descriptor*) 16605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, enum_type, const EnumDescriptor*) 16615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, extension_range_count, int) 16635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, extension_count, int) 16645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, extension_range, 16655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor::ExtensionRange*) 16665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, extension, 16675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor*) 16685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, reserved_range_count, int) 16705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, reserved_range, 16715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const Descriptor::ReservedRange*) 16725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, reserved_name_count, int) 16735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_OPTIONS_ACCESSOR(Descriptor, MessageOptions) 16755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(Descriptor, is_placeholder, bool) 16765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 16775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, name) 16785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, full_name) 16795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, json_name) 16805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, lowercase_name) 16815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, camelcase_name) 16825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, file, const FileDescriptor*) 16835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, number, int) 16845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, is_extension, bool) 16855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, type, FieldDescriptor::Type) 16865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, label, FieldDescriptor::Label) 16875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_type, const Descriptor*) 16885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_oneof, 16895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const OneofDescriptor*) 16905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, index_in_oneof, int) 16915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, extension_scope, const Descriptor*) 16925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, message_type, const Descriptor*) 16935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, enum_type, const EnumDescriptor*) 16945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_OPTIONS_ACCESSOR(FieldDescriptor, FieldOptions) 16955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_default_value, bool) 16965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int32 , int32 ) 16975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int64 , int64 ) 16985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint32, uint32) 16995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint64, uint64) 17005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_float , float ) 17015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_double, double) 17025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_bool , bool ) 17035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_enum, 17045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor*) 17055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, default_value_string) 17065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(OneofDescriptor, name) 17085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(OneofDescriptor, full_name) 17095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, containing_type, const Descriptor*) 17105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, field_count, int) 17115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(EnumDescriptor, name) 17135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(EnumDescriptor, full_name) 17145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, file, const FileDescriptor*) 17155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, containing_type, const Descriptor*) 17165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, value_count, int) 17175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(EnumDescriptor, value, 17185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const EnumValueDescriptor*) 17195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_OPTIONS_ACCESSOR(EnumDescriptor, EnumOptions) 17205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, is_placeholder, bool) 17215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(EnumValueDescriptor, name) 17235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(EnumValueDescriptor, full_name) 17245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, number, int) 17255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, type, const EnumDescriptor*) 17265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_OPTIONS_ACCESSOR(EnumValueDescriptor, EnumValueOptions) 17275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(ServiceDescriptor, name) 17295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(ServiceDescriptor, full_name) 17305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, file, const FileDescriptor*) 17315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, method_count, int) 17325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(ServiceDescriptor, method, 17335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const MethodDescriptor*) 17345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_OPTIONS_ACCESSOR(ServiceDescriptor, ServiceOptions) 17355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(MethodDescriptor, name) 17375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(MethodDescriptor, full_name) 17385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, service, const ServiceDescriptor*) 17395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, input_type, const Descriptor*) 17405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, output_type, const Descriptor*) 17415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_OPTIONS_ACCESSOR(MethodDescriptor, MethodOptions) 17425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, client_streaming, bool) 17435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, server_streaming, bool) 17445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(FileDescriptor, name) 17465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_STRING_ACCESSOR(FileDescriptor, package) 17475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FileDescriptor, pool, const DescriptorPool*) 17485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FileDescriptor, dependency_count, int) 17495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FileDescriptor, public_dependency_count, int) 17505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FileDescriptor, weak_dependency_count, int) 17515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FileDescriptor, message_type_count, int) 17525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FileDescriptor, enum_type_count, int) 17535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FileDescriptor, service_count, int) 17545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FileDescriptor, extension_count, int) 17555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_OPTIONS_ACCESSOR(FileDescriptor, FileOptions) 17565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ACCESSOR(FileDescriptor, is_placeholder, bool) 17575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, message_type, const Descriptor*) 17595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, enum_type, const EnumDescriptor*) 17605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, service, 17615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const ServiceDescriptor*) 17625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team RobotPROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, extension, 17635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot const FieldDescriptor*) 17645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#undef PROTOBUF_DEFINE_ACCESSOR 17665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#undef PROTOBUF_DEFINE_STRING_ACCESSOR 17675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#undef PROTOBUF_DEFINE_ARRAY_ACCESSOR 17685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// A few accessors differ from the macros... 17705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline bool Descriptor::IsExtensionNumber(int number) const { 17725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return FindExtensionRangeContainingNumber(number) != NULL; 17735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 17745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline bool Descriptor::IsReservedNumber(int number) const { 17765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return FindReservedRangeContainingNumber(number) != NULL; 17775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 17785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline bool Descriptor::IsReservedName(const string& name) const { 17805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot for (int i = 0; i < reserved_name_count(); i++) { 17815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot if (name == reserved_name(i)) { 17825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return true; 17835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } 17845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } 17855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return false; 17865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 17875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Can't use PROTOBUF_DEFINE_ARRAY_ACCESSOR because reserved_names_ is actually 17895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// an array of pointers rather than the usual array of objects. 17905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline const string& Descriptor::reserved_name(int index) const { 17915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return *reserved_names_[index]; 17925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 17935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline bool FieldDescriptor::is_required() const { 17955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return label() == LABEL_REQUIRED; 17965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 17975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 17985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline bool FieldDescriptor::is_optional() const { 17995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return label() == LABEL_OPTIONAL; 18005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline bool FieldDescriptor::is_repeated() const { 18035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return label() == LABEL_REPEATED; 18045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline bool FieldDescriptor::is_packable() const { 18075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return is_repeated() && IsTypePackable(type()); 18085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// To save space, index() is computed by looking at the descriptor's position 18115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// in the parent's array of children. 18125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline int FieldDescriptor::index() const { 18135a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot if (!is_extension_) { 18145a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - containing_type_->fields_); 18155a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } else if (extension_scope_ != NULL) { 18165a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - extension_scope_->extensions_); 18175a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } else { 18185a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - file_->extensions_); 18195a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } 18205a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18215a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18225a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline int Descriptor::index() const { 18235a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot if (containing_type_ == NULL) { 18245a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - file_->message_types_); 18255a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } else { 18265a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - containing_type_->nested_types_); 18275a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } 18285a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18295a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18305a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline int OneofDescriptor::index() const { 18315a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - containing_type_->oneof_decls_); 18325a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18335a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18345a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline int EnumDescriptor::index() const { 18355a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot if (containing_type_ == NULL) { 18365a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - file_->enum_types_); 18375a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } else { 18385a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - containing_type_->enum_types_); 18395a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot } 18405a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18415a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18425a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline int EnumValueDescriptor::index() const { 18435a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - type_->values_); 18445a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18455a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18465a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline int ServiceDescriptor::index() const { 18475a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - file_->services_); 18485a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18495a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18505a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline int MethodDescriptor::index() const { 18515a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return static_cast<int>(this - service_->methods_); 18525a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18535a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18545a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline const char* FieldDescriptor::type_name() const { 18555a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return kTypeToName[type_]; 18565a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18575a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18585a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline FieldDescriptor::CppType FieldDescriptor::cpp_type() const { 18595a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return kTypeToCppTypeMap[type_]; 18605a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18615a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18625a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline const char* FieldDescriptor::cpp_type_name() const { 18635a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return kCppTypeToName[kTypeToCppTypeMap[type_]]; 18645a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18655a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18665a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline FieldDescriptor::CppType FieldDescriptor::TypeToCppType(Type type) { 18675a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return kTypeToCppTypeMap[type]; 18685a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18695a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18705a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline const char* FieldDescriptor::TypeName(Type type) { 18715a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return kTypeToName[type]; 18725a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18735a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18745a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline const char* FieldDescriptor::CppTypeName(CppType cpp_type) { 18755a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return kCppTypeToName[cpp_type]; 18765a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18775a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18785a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline bool FieldDescriptor::IsTypePackable(Type field_type) { 18795a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return (field_type != FieldDescriptor::TYPE_STRING && 18805a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot field_type != FieldDescriptor::TYPE_GROUP && 18815a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot field_type != FieldDescriptor::TYPE_MESSAGE && 18825a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot field_type != FieldDescriptor::TYPE_BYTES); 18835a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18845a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18855a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline const FileDescriptor* FileDescriptor::dependency(int index) const { 18865a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return dependencies_[index]; 18875a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18885a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18895a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline const FileDescriptor* FileDescriptor::public_dependency( 18905a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index) const { 18915a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return dependencies_[public_dependencies_[index]]; 18925a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18935a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18945a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline const FileDescriptor* FileDescriptor::weak_dependency( 18955a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot int index) const { 18965a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return dependencies_[weak_dependencies_[index]]; 18975a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 18985a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 18995a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline FileDescriptor::Syntax FileDescriptor::syntax() const { 19005a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return syntax_; 19015a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 19025a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 19035a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// Can't use PROTOBUF_DEFINE_ARRAY_ACCESSOR because fields_ is actually an array 19045a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot// of pointers rather than the usual array of objects. 19055a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robotinline const FieldDescriptor* OneofDescriptor::field(int index) const { 19065a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot return fields_[index]; 19075a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} 19085a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 19095a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} // namespace protobuf 19105a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot 19115a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot} // namespace google 19125a6e989368cab2b72ab8db50330d02e459b47d4android-build-team Robot#endif // GOOGLE_PROTOBUF_DESCRIPTOR_H__ 1913