#pragma once #include "defs.h" #include #include #include #include #include namespace NSQLComplete { // std::vector is used to prevent copying a C3 output struct TSuggestedToken { TTokenId Number; std::vector Following; }; struct TMatchedRule { TRuleId Index; TParserCallStack ParserCallStack; }; struct TC3Candidates { TVector Tokens; TVector Rules; }; class IC3Engine { public: using TPtr = THolder; // std::unordered_set is used to prevent copying into c3 core struct TConfig { std::unordered_set IgnoredTokens; std::unordered_set PreferredRules; std::unordered_set IgnoredRules; std::unordered_map> DisabledPreviousByToken; std::unordered_map> ForcedPreviousByToken; }; virtual ~IC3Engine() = default; virtual TC3Candidates Complete(TStringBuf text, size_t caretTokenIndex) = 0; }; } // namespace NSQLComplete