1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 */ 9 10 #ifndef INCLUDED_SC_INC_TOKENSTRINGCONTEXT_HXX 11 #define INCLUDED_SC_INC_TOKENSTRINGCONTEXT_HXX 12 13 #include "compiler.hxx" 14 15 #include <unordered_map> 16 17 class ScDocument; 18 19 namespace sc { 20 21 /** 22 * Context for creating string from an array of formula tokens, used in 23 * ScTokenArray::CreateString(). You can re-use the same string context 24 * between multiple CreateString() calls as long as the document content is 25 * unmodified. 26 */ 27 struct SC_DLLPUBLIC TokenStringContext 28 { 29 typedef std::unordered_map<sal_uInt16, OUString> IndexNameMapType; 30 typedef std::unordered_map<size_t, std::vector<OUString> > IndexNamesMapType; 31 typedef std::unordered_map<SCTAB, IndexNameMapType> TabIndexMapType; 32 33 formula::FormulaGrammar::Grammar const meGram; 34 formula::FormulaCompiler::OpCodeMapPtr mxOpCodeMap; 35 const ScCompiler::Convention* mpRefConv; 36 OUString maErrRef; 37 38 std::vector<OUString> maTabNames; 39 IndexNameMapType maGlobalRangeNames; 40 TabIndexMapType maSheetRangeNames; 41 IndexNameMapType maNamedDBs; 42 43 std::vector<OUString> maExternalFileNames; 44 IndexNamesMapType maExternalCachedTabNames; 45 46 TokenStringContext( const ScDocument* pDoc, formula::FormulaGrammar::Grammar eGram ); 47 }; 48 49 class SC_DLLPUBLIC CompileFormulaContext 50 { 51 ScDocument* const mpDoc; 52 formula::FormulaGrammar::Grammar meGram; 53 std::vector<OUString> maTabNames; 54 55 void updateTabNames(); 56 57 public: 58 CompileFormulaContext( ScDocument* pDoc ); 59 CompileFormulaContext( ScDocument* pDoc, formula::FormulaGrammar::Grammar eGram ); 60 getGrammar() const61 formula::FormulaGrammar::Grammar getGrammar() const { return meGram;} 62 void setGrammar( formula::FormulaGrammar::Grammar eGram ); 63 getTabNames() const64 const std::vector<OUString>& getTabNames() const { return maTabNames;} 65 getDoc()66 ScDocument* getDoc() { return mpDoc;} 67 }; 68 69 } 70 71 #endif 72 73 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 74