File: flatc.h

package info (click to toggle)
golang-github-google-flatbuffers 24.3.25-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 17,356 kB
  • sloc: cpp: 49,726; python: 6,901; cs: 5,566; java: 4,370; ansic: 2,512; php: 1,460; javascript: 1,053; xml: 1,016; sh: 870; makefile: 13
file content (131 lines) | stat: -rw-r--r-- 4,038 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * Copyright 2017 Google Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef FLATBUFFERS_FLATC_H_
#define FLATBUFFERS_FLATC_H_

#include <functional>
#include <limits>
#include <list>
#include <memory>
#include <string>

#include "flatbuffers/code_generator.h"
#include "flatbuffers/flatbuffers.h"
#include "flatbuffers/idl.h"
#include "flatbuffers/util.h"

namespace flatbuffers {

extern void LogCompilerWarn(const std::string &warn);
extern void LogCompilerError(const std::string &err);

struct FlatCOptions {
  IDLOptions opts;

  std::string program_name;

  std::string output_path;

  std::vector<std::string> filenames;

  std::list<std::string> include_directories_storage;
  std::vector<const char *> include_directories;
  std::vector<const char *> conform_include_directories;
  std::vector<bool> generator_enabled;
  size_t binary_files_from = std::numeric_limits<size_t>::max();
  std::string conform_to_schema;
  std::string annotate_schema;
  bool annotate_include_vector_contents = true;
  bool any_generator = false;
  bool print_make_rules = false;
  bool raw_binary = false;
  bool schema_binary = false;
  bool grpc_enabled = false;
  bool requires_bfbs = false;
  bool file_names_only = false;

  std::vector<std::shared_ptr<CodeGenerator>> generators;
};

struct FlatCOption {
  std::string short_opt;
  std::string long_opt;
  std::string parameter;
  std::string description;
};

class FlatCompiler {
 public:
  typedef void (*WarnFn)(const FlatCompiler *flatc, const std::string &warn,
                         bool show_exe_name);

  typedef void (*ErrorFn)(const FlatCompiler *flatc, const std::string &err,
                          bool usage, bool show_exe_name);

  // Parameters required to initialize the FlatCompiler.
  struct InitParams {
    InitParams() : warn_fn(nullptr), error_fn(nullptr) {}

    WarnFn warn_fn;
    ErrorFn error_fn;
  };

  explicit FlatCompiler(const InitParams &params) : params_(params) {}

  bool RegisterCodeGenerator(const FlatCOption &option,
                             std::shared_ptr<CodeGenerator> code_generator);

  int Compile(const FlatCOptions &options);

  std::string GetShortUsageString(const std::string &program_name) const;
  std::string GetUsageString(const std::string &program_name) const;

  // Parse the FlatC options from command line arguments.
  FlatCOptions ParseFromCommandLineArguments(int argc, const char **argv);

 private:
  void ParseFile(flatbuffers::Parser &parser, const std::string &filename,
                 const std::string &contents,
                 const std::vector<const char *> &include_directories) const;

  void LoadBinarySchema(Parser &parser, const std::string &filename,
                        const std::string &contents);

  void Warn(const std::string &warn, bool show_exe_name = true) const;

  void Error(const std::string &err, bool usage = true,
             bool show_exe_name = true) const;

  void AnnotateBinaries(const uint8_t *binary_schema,
                        uint64_t binary_schema_size,
                        const FlatCOptions &options);

  void ValidateOptions(const FlatCOptions &options);

  Parser GetConformParser(const FlatCOptions &options);

  std::unique_ptr<Parser> GenerateCode(const FlatCOptions &options,
                                       Parser &conform_parser);

  std::map<std::string, std::shared_ptr<CodeGenerator>> code_generators_;

  InitParams params_;
};

}  // namespace flatbuffers

#endif  // FLATBUFFERS_FLATC_H_