#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler
Dile özgü kod oluşturma araçlarının her biri tarafından uygulanan soyut arayüzü tanımlar.
Bu dosyadaki sınıflar | |
---|---|
Belirli bir dildeki belirli bir proto dosyasını uygulayan bir sınıfa ait soyut arayüz. | |
CodeGenerators belirli bir dizinde bir veya daha fazla dosya oluşturur. |
Dosya ÜyeleriBu tanımlar herhangi bir sınıfın parçası değildir. | |
---|---|
typedef | GeneratorContext OutputDirectory GeneratorContext türü daha önce Çıktı Dizini olarak adlandırılıyordu. devamı... |
void | ParseGeneratorParameter(const std::string & , std::vector< std::pair< std::string, std::string > > * ) Bazı kod oluşturma araçları, parametre bağımsız değişkenini virgülle ayrılmış seçenek listesi olarak görür. devamı... |
std::string | StripProto(const std::string & filename) Dosya adının sonuna ".proto" veya ".protodevel" ekler. |
typedef compiler::OutputDirectory
GeneratorContext türü daha önce Çıktı Dizini olarak adlandırılıyordu.
Bu tür, geriye dönük uyumluluk sağlar.
void compiler::ParseGeneratorParameter(
const std::string & ,
std::vector< std::pair< std::string, std::string > > * )
const std::string & ,
std::vector< std::pair< std::string, std::string > > * )
Bazı kod oluşturma araçları, parametre bağımsız değişkenini virgülle ayrılmış seçenek listesi olarak görür.
Bu yardımcı işlev, virgülle ayrılmış bir ad/değer çifti grubunu ayrıştırır: ör. "foo=bar,baz,qux=corge", çiftleri şu şekilde ayrıştırır:
("foo", "bar"), ("baz", ""), ("qux", "corge")
CodeGenerator sınıfı
#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler
Belirli bir dildeki belirli bir proto dosyasını uygulayan bir sınıfa ait soyut arayüz.
Bunlardan bazıları çeşitli dilleri desteklemek için CommandLineInterface'e kaydedilebilir.
Bilinen alt sınıflar:
Üyeler | |
---|---|
enum | Feature Plugin.proto ile senkronize edin. devamı... |
| CodeGenerator() |
virtual | ~CodeGenerator() |
virtual bool | Generate(const FileDescriptor * file, const std::string & parameter, GeneratorContext * generator_context, std::string * error) const = 0 Belirtilen proto dosyası için kod oluşturur ve belirtilen çıkış dizininde bir veya daha fazla dosya oluşturur. devamı... |
virtual bool | GenerateAll(const std::vector< const FileDescriptor * > & files, const std::string & parameter, GeneratorContext * generator_context, std::string * error) const Belirtilen tüm proto dosyaları için kod oluşturur. devamı... |
virtual uint64_t | GetSupportedFeatures() const Bu kodu oluşturma aracının desteklediği özellikleri belirtmek için bunu uygulayın. devamı... |
virtual bool | HasGenerateAll() const Bu sınıf artık kullanılmıyor ancak bu sınıf, açık kaynak protobuf kitaplığının bir parçası olduğu için kitaplığın mevcut sürümü için vtable'ları aynı tutmalıdır. devamı... |
enum CodeGenerator::Feature {
FEATURE_PROTO3_OPTIONAL = = 1
}
FEATURE_PROTO3_OPTIONAL = = 1
}
Plugin.proto ile senkronize edin.
FEATURE_PROTO3_İSTEĞE BAĞLI |
virtual bool CodeGenerator::Generate(
const FileDescriptor * file,
const std::string & parameter,
GeneratorContext * generator_context,
std::string * error) const = 0
const FileDescriptor * file,
const std::string & parameter,
GeneratorContext * generator_context,
std::string * error) const = 0
Belirtilen proto dosyası için kod oluşturur ve belirtilen çıkış dizininde bir veya daha fazla dosya oluşturur.
Oluşturma aracına iletilecek bir parametre, komut satırında belirtilebilir. Bu kullanım amacı jeneratöre özgü parametrelerin iletilmesi için kullanılır. Herhangi bir parametre sağlanmamışsa boş olur. ParseGeneratorParameter (aşağıda) tek parametre komut satırı işareti içinde birden çok parametreyi kabul etmek için kullanılabilir.
Başarılı olursa doğru değerini döndürür. Aksi takdirde, *hata değerini sorunun açıklamasına (ör. "geçersiz parametre") ayarlar ve yanlış değerini döndürür.
virtual bool CodeGenerator::GenerateAll(
const std::vector< const FileDescriptor * > & files,
const std::string & parameter,
GeneratorContext * generator_context,
std::string * error) const
const std::vector< const FileDescriptor * > & files,
const std::string & parameter,
GeneratorContext * generator_context,
std::string * error) const
Belirtilen tüm proto dosyaları için kod oluşturur.
UYARI: Standart kod oluşturma aracı tasarımı, giriş .proto dosyası başına bir veya iki çıkış dosyası oluşturur, alternatif tasarımları teşvik etmek istemeyiz.
Parametre, yukarıdaki |Generate()| gibi komut satırında iletilmiş şekilde verilir.
Başarılı olursa doğru değerini döndürür. Aksi takdirde, *hata değerini sorunun açıklamasına (ör. "geçersiz parametre") ayarlar ve yanlış değerini döndürür.
virtual uint64_t CodeGenerator::GetSupportedFeatures() const
Bu kodu oluşturma aracının desteklediği özellikleri belirtmek için bunu uygulayın.
Bu, Eklenti.proto'daki Özellikler enum'unda bulunan özelliklerin bit tabanlı bir VEYA koşulu olmalıdır.
virtual bool CodeGenerator::HasGenerateAll() const
Bu sınıf artık kullanılmıyor ancak bu sınıf, açık kaynak protobuf kitaplığının bir parçası olduğu için kitaplığın mevcut sürümü için vtable'ları aynı tutmalıdır.
Protobufs bir API bozulması durumunda yöntem kaldırılabilir.
class GeneratorContext
#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler
CodeGenerators belirli bir dizinde bir veya daha fazla dosya oluşturur.
Bu soyut arayüz, CodeGenerator'ın çalıştığı dizini ve Jeneratör'ün çalıştığı bağlamla ilgili diğer bilgileri temsil eder.
Üyeler | |
---|---|
| GeneratorContext() |
virtual | ~GeneratorContext() |
virtual io::ZeroCopyOutputStream * | Open(const std::string & filename) = 0 Belirtilen dosyayı açar, varsa keser ve dosyaya yazan bir ZeroCopyoutputStream döndürür. devamı... |
virtual io::ZeroCopyOutputStream * | OpenForAppend(const std::string & filename) Çıkış, Open() işlevine benzerdir ancak varsa çıkış dosyaya eklenir. |
virtual io::ZeroCopyOutputStream * | OpenForInsert(const std::string & filename, const std::string & insertion_point) Belirli bir ekleme noktasında belirtilen dosyaya kod ekleyecek bir ZeroCopyExitStream oluşturur. devamı... |
virtual io::ZeroCopyOutputStream * | OpenForInsertWithGeneratedCodeInfo(const std::string & filename, const std::string & insertion_point, const google::protobuf::GeneratedCodeInfo & info) OpenForInsert uygulamasına benzer, ancak info boş değilse filename.pb.meta dosyasını açar (veya oluşturur) ve gerekli vardiyalarla uygun yere bilgi ekler. devamı... |
virtual void | ListParsedFiles(std::vector< const FileDescriptor * > * output) Bu çalıştırmada derlenen tüm dosyalar için FileDescriptors vektörünü döndürür. devamı... |
virtual void | GetCompilerVersion(Version * version) const Bu GeneratorContext ile ilişkili protokol derleyicinin sürüm numarasını alır. |
virtual io::ZeroCopyOutputStream *
GeneratorContext::Open(
const std::string & filename) = 0
GeneratorContext::Open(
const std::string & filename) = 0
Belirtilen dosyayı açar, varsa keser ve dosyaya yazan bir ZeroCopyoutputStream döndürür.
Arayan, döndürülen nesnenin sahipliğini alır. Bu yöntem asla başarısız olmaz (bunun yerine sahte bir akış döndürülür).
Belirtilen dosya adı, kaynak ağacın kök diziniyle göreli olmalıdır. Örneğin, "foo/bar.proto" kodunu oluştururken C++ oluşturma aracı, "foo/bar.pb.h" ve "foo/bar.pb.cc" dosyalarını oluşturur; bu dosya adlarına "foo/" harfinin dahil edildiğini unutmayın. Dosya adının "." veya ".." bileşenlerini içermesine izin verilmez.
virtual io::ZeroCopyOutputStream *
GeneratorContext::OpenForInsert(
const std::string & filename,
const std::string & insertion_point)
GeneratorContext::OpenForInsert(
const std::string & filename,
const std::string & insertion_point)
Belirli bir ekleme noktasında belirtilen dosyaya kod ekleyecek bir ZeroCopyExitStream oluşturur.
Ekleme noktaları hakkında daha fazla bilgi için Plugin.proto'ya (plugin.pb.h) bakın. Varsayılan uygulama başarısız oluyor - yalnızca geriye dönük uyumluluk için mevcut.
UYARI: Bu özellik şu anda DENEYSEL olup değiştirilebilir.
virtual io::ZeroCopyOutputStream *
GeneratorContext::OpenForInsertWithGeneratedCodeInfo(
const std::string & filename,
const std::string & insertion_point,
const google::protobuf::GeneratedCodeInfo & info)
GeneratorContext::OpenForInsertWithGeneratedCodeInfo(
const std::string & filename,
const std::string & insertion_point,
const google::protobuf::GeneratedCodeInfo & info)
OpenForInsert uygulamasına benzer, ancak info
boş değilse filename.pb.meta dosyasını açar (veya oluşturur) ve gerekli vardiyalarla uygun yere bilgi ekler.
Varsayılan uygulama info
politikasını yoksayar.
UYARI: Bu özellik yakında kaldırılacaktır.
virtual void GeneratorContext::ListParsedFiles(
std::vector< const FileDescriptor * > * output)
std::vector< const FileDescriptor * > * output)
Bu çalıştırmada derlenen tüm dosyalar için FileDescriptors vektörünü döndürür.
Go gibi, dosyalar bir dizi olarak derlendiğinde dosyaları farklı şekilde ele alan diller için yararlıdır.