#ifndef GOOGLE_PROTOBUF_COMPILER_CPP_HELPERS_H__
#define GOOGLE_PROTOBUF_COMPILER_CPP_HELPERS_H__
#include <algorithm>
#include <cstdint>
#include <iterator>
#include <map>
#include <string>
#include <google/protobuf/compiler/scc.h>
#include <google/protobuf/compiler/code_generator.h>
#include <google/protobuf/compiler/cpp/names.h>
#include <google/protobuf/compiler/cpp/options.h>
#include <google/protobuf/descriptor.pb.h>
#include <google/protobuf/io/printer.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/port.h>
#include <google/protobuf/stubs/strutil.h>
#include <google/protobuf/port_def.inc>
namespace google {
namespace protobuf {
namespace compiler {
namespace cpp {
enum class ArenaDtorNeeds { … };
inline std::string ProtobufNamespace(const Options& ) { … }
inline std::string MacroPrefix(const Options& ) { … }
inline std::string DeprecatedAttribute(const Options& ,
const FieldDescriptor* d) { … }
inline std::string DeprecatedAttribute(const Options& ,
const EnumValueDescriptor* d) { … }
extern const char kThickSeparator[];
extern const char kThinSeparator[];
void SetCommonVars(const Options& options,
std::map<std::string, std::string>* variables);
void SetCommonMessageDataVariables(
const Descriptor* descriptor,
std::map<std::string, std::string>* variables);
void SetUnknownFieldsVariable(const Descriptor* descriptor,
const Options& options,
std::map<std::string, std::string>* variables);
bool GetBootstrapBasename(const Options& options, const std::string& basename,
std::string* bootstrap_basename);
bool MaybeBootstrap(const Options& options, GeneratorContext* generator_context,
bool bootstrap_flag, std::string* basename);
bool IsBootstrapProto(const Options& options, const FileDescriptor* file);
std::string Namespace(const FileDescriptor* d, const Options& options);
std::string Namespace(const Descriptor* d, const Options& options);
std::string Namespace(const FieldDescriptor* d, const Options& options);
std::string Namespace(const EnumDescriptor* d, const Options& options);
bool CanInitializeByZeroing(const FieldDescriptor* field);
std::string ClassName(const Descriptor* descriptor);
std::string ClassName(const EnumDescriptor* enum_descriptor);
std::string QualifiedClassName(const Descriptor* d, const Options& options);
std::string QualifiedClassName(const EnumDescriptor* d, const Options& options);
std::string QualifiedClassName(const Descriptor* d);
std::string QualifiedClassName(const EnumDescriptor* d);
inline std::string ClassName(const Descriptor* descriptor, bool qualified) { … }
inline std::string ClassName(const EnumDescriptor* descriptor, bool qualified) { … }
std::string ExtensionName(const FieldDescriptor* d);
std::string QualifiedExtensionName(const FieldDescriptor* d,
const Options& options);
std::string QualifiedExtensionName(const FieldDescriptor* d);
std::string DefaultInstanceType(const Descriptor* descriptor,
const Options& options, bool split = false);
std::string DefaultInstanceName(const Descriptor* descriptor,
const Options& options, bool split = false);
std::string DefaultInstancePtr(const Descriptor* descriptor,
const Options& options, bool split = false);
std::string QualifiedDefaultInstanceName(const Descriptor* descriptor,
const Options& options,
bool split = false);
std::string QualifiedDefaultInstancePtr(const Descriptor* descriptor,
const Options& options,
bool split = false);
std::string DescriptorTableName(const FileDescriptor* file,
const Options& options);
std::string FileDllExport(const FileDescriptor* file, const Options& options);
std::string SuperClassName(const Descriptor* descriptor,
const Options& options);
std::string ResolveKeyword(const std::string& name);
std::string FieldName(const FieldDescriptor* field);
std::string FieldMemberName(const FieldDescriptor* field, bool split);
int EstimateAlignmentSize(const FieldDescriptor* field);
std::string FieldConstantName(const FieldDescriptor* field);
inline const Descriptor* FieldScope(const FieldDescriptor* field) { … }
std::string FieldMessageTypeName(const FieldDescriptor* field,
const Options& options);
const char* PrimitiveTypeName(FieldDescriptor::CppType type);
std::string PrimitiveTypeName(const Options& options,
FieldDescriptor::CppType type);
const char* DeclaredTypeMethodName(FieldDescriptor::Type type);
std::string Int32ToString(int number);
std::string DefaultValue(const Options& options, const FieldDescriptor* field);
std::string DefaultValue(const FieldDescriptor* field);
std::string FilenameIdentifier(const std::string& filename);
std::string UniqueName(const std::string& name, const std::string& filename,
const Options& options);
inline std::string UniqueName(const std::string& name, const FileDescriptor* d,
const Options& options) { … }
inline std::string UniqueName(const std::string& name, const Descriptor* d,
const Options& options) { … }
inline std::string UniqueName(const std::string& name, const EnumDescriptor* d,
const Options& options) { … }
inline std::string UniqueName(const std::string& name,
const ServiceDescriptor* d,
const Options& options) { … }
inline Options InternalRuntimeOptions() { … }
inline std::string UniqueName(const std::string& name,
const std::string& filename) { … }
inline std::string UniqueName(const std::string& name,
const FileDescriptor* d) { … }
inline std::string UniqueName(const std::string& name, const Descriptor* d) { … }
inline std::string UniqueName(const std::string& name,
const EnumDescriptor* d) { … }
inline std::string UniqueName(const std::string& name,
const ServiceDescriptor* d) { … }
std::string QualifiedFileLevelSymbol(const FileDescriptor* file,
const std::string& name,
const Options& options);
std::string EscapeTrigraphs(const std::string& to_escape);
std::string SafeFunctionName(const Descriptor* descriptor,
const FieldDescriptor* field,
const std::string& prefix);
inline bool PublicUnknownFieldsAccessors(const Descriptor* message) { … }
FileOptions_OptimizeMode GetOptimizeFor(const FileDescriptor* file,
const Options& options);
inline bool UseUnknownFieldSet(const FileDescriptor* file,
const Options& options) { … }
inline bool IsWeak(const FieldDescriptor* field, const Options& options) { … }
bool IsStringInlined(const FieldDescriptor* descriptor, const Options& options);
FieldOptions::CType EffectiveStringCType(const FieldDescriptor* field,
const Options& options);
inline bool IsCord(const FieldDescriptor* field, const Options& options) { … }
inline bool IsString(const FieldDescriptor* field, const Options& options) { … }
inline bool IsStringPiece(const FieldDescriptor* field,
const Options& options) { … }
class MessageSCCAnalyzer;
bool HasLazyFields(const FileDescriptor* file, const Options& options,
MessageSCCAnalyzer* scc_analyzer);
bool IsLazy(const FieldDescriptor* field, const Options& options,
MessageSCCAnalyzer* scc_analyzer);
inline bool IsExplicitLazy(const FieldDescriptor* field) { … }
bool IsEagerlyVerifiedLazy(const FieldDescriptor* field, const Options& options,
MessageSCCAnalyzer* scc_analyzer);
bool IsLazilyVerifiedLazy(const FieldDescriptor* field, const Options& options);
bool ShouldSplit(const Descriptor* desc, const Options& options);
bool ShouldSplit(const FieldDescriptor* field, const Options& options);
inline bool IsFieldUsed(const FieldDescriptor* ,
const Options& ) { … }
inline bool IsFieldStripped(const FieldDescriptor* ,
const Options& ) { … }
bool HasExtensionsOrExtendableMessage(const FileDescriptor* file);
bool HasRepeatedFields(const FileDescriptor* file);
bool HasStringPieceFields(const FileDescriptor* file, const Options& options);
bool HasCordFields(const FileDescriptor* file, const Options& options);
bool HasMapFields(const FileDescriptor* file);
bool HasEnumDefinitions(const FileDescriptor* file);
inline bool HasGeneratedMethods(const FileDescriptor* file,
const Options& options) { … }
inline bool HasDescriptorMethods(const FileDescriptor* file,
const Options& options) { … }
inline bool HasGenericServices(const FileDescriptor* file,
const Options& options) { … }
inline bool IsProto2MessageSet(const Descriptor* descriptor,
const Options& options) { … }
inline bool IsMapEntryMessage(const Descriptor* descriptor) { … }
bool IsStringOrMessage(const FieldDescriptor* field);
std::string UnderscoresToCamelCase(const std::string& input,
bool cap_next_letter);
inline bool IsProto3(const FileDescriptor* file) { … }
inline bool HasHasbit(const FieldDescriptor* field) { … }
inline bool HasPreservingUnknownEnumSemantics(const FieldDescriptor* field) { … }
inline bool IsCrossFileMessage(const FieldDescriptor* field) { … }
inline std::string MakeDefaultName(const FieldDescriptor* field) { … }
inline std::string MakeDefaultFieldName(const FieldDescriptor* field) { … }
inline std::string MakeVarintCachedSizeName(const FieldDescriptor* field) { … }
inline std::string MakeVarintCachedSizeFieldName(const FieldDescriptor* field,
bool split) { … }
bool IsAnyMessage(const FileDescriptor* descriptor, const Options& options);
bool IsAnyMessage(const Descriptor* descriptor, const Options& options);
bool IsWellKnownMessage(const FileDescriptor* descriptor);
inline std::string IncludeGuard(const FileDescriptor* file, bool pb_h,
const Options& options) { … }
FileOptions_OptimizeMode GetOptimizeFor(const FileDescriptor* file,
const Options& options,
bool* has_opt_codesize_extension);
inline FileOptions_OptimizeMode GetOptimizeFor(const FileDescriptor* file,
const Options& options) { … }
inline bool NeedsEagerDescriptorAssignment(const FileDescriptor* file,
const Options& options) { … }
void FlattenMessagesInFile(const FileDescriptor* file,
std::vector<const Descriptor*>* result);
inline std::vector<const Descriptor*> FlattenMessagesInFile(
const FileDescriptor* file) { … }
template <typename F>
void ForEachMessage(const Descriptor* descriptor, F&& func) { … }
template <typename F>
void ForEachMessage(const FileDescriptor* descriptor, F&& func) { … }
bool HasWeakFields(const Descriptor* desc, const Options& options);
bool HasWeakFields(const FileDescriptor* desc, const Options& options);
inline static bool ShouldIgnoreRequiredFieldCheck(const FieldDescriptor* field,
const Options& options) { … }
struct MessageAnalysis { … };
class PROTOC_EXPORT MessageSCCAnalyzer { … };
void ListAllFields(const Descriptor* d,
std::vector<const FieldDescriptor*>* fields);
void ListAllFields(const FileDescriptor* d,
std::vector<const FieldDescriptor*>* fields);
template <class T>
void ForEachField(const Descriptor* d, T&& func) { … }
template <class T>
void ForEachField(const FileDescriptor* d, T&& func) { … }
void ListAllTypesForServices(const FileDescriptor* fd,
std::vector<const Descriptor*>* types);
bool UsingImplicitWeakFields(const FileDescriptor* file,
const Options& options);
bool IsImplicitWeakField(const FieldDescriptor* field, const Options& options,
MessageSCCAnalyzer* scc_analyzer);
inline bool HasSimpleBaseClass(const Descriptor* desc, const Options& options) { … }
inline bool HasSimpleBaseClasses(const FileDescriptor* file,
const Options& options) { … }
inline std::string SimpleBaseClass(const Descriptor* desc,
const Options& options) { … }
inline bool HasTracker(const Descriptor* desc, const Options& options) { … }
inline bool HasImplData(const Descriptor* desc, const Options& options) { … }
class PROTOC_EXPORT Formatter { … };
template <class T>
void PrintFieldComment(const Formatter& format, const T* field) { … }
class PROTOC_EXPORT NamespaceOpener { … };
enum class Utf8CheckMode { … };
Utf8CheckMode GetUtf8CheckMode(const FieldDescriptor* field,
const Options& options);
void GenerateUtf8CheckCodeForString(const FieldDescriptor* field,
const Options& options, bool for_parse,
const char* parameters,
const Formatter& format);
void GenerateUtf8CheckCodeForCord(const FieldDescriptor* field,
const Options& options, bool for_parse,
const char* parameters,
const Formatter& format);
template <typename T>
struct FieldRangeImpl { … };
template <typename T>
FieldRangeImpl<T> FieldRange(const T* desc) { … }
struct OneOfRangeImpl { … };
inline OneOfRangeImpl OneOfRange(const Descriptor* desc) { … }
PROTOC_EXPORT std::string StripProto(const std::string& filename);
bool EnableMessageOwnedArena(const Descriptor* desc, const Options& options);
bool EnableMessageOwnedArenaTrial(const Descriptor* desc,
const Options& options);
bool ShouldVerify(const Descriptor* descriptor, const Options& options,
MessageSCCAnalyzer* scc_analyzer);
bool ShouldVerify(const FileDescriptor* file, const Options& options,
MessageSCCAnalyzer* scc_analyzer);
enum class VerifySimpleType { … };
VerifySimpleType ShouldVerifySimple(const Descriptor* descriptor);
bool IsUtf8String(const FieldDescriptor* field);
bool HasMessageFieldOrExtension(const Descriptor* desc);
}
}
}
}
#include <google/protobuf/port_undef.inc>
#endif