File indexing completed on 2024-09-22 05:15:54

0001 /*
0002     This file is part of the Okteta Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2011, 2012 Alex Richardson <alex.richardson@gmx.de>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #ifndef KASTEN_SCRIPTHANDLERINFO_HPP
0010 #define KASTEN_SCRIPTHANDLERINFO_HPP
0011 
0012 // Std
0013 #include <memory>
0014 
0015 class EnumScriptClass;
0016 class StructUnionScriptClass;
0017 class ArrayScriptClass;
0018 class PrimitiveScriptClass;
0019 class StringScriptClass;
0020 class BitfieldScriptClass;
0021 class PointerScriptClass;
0022 class QScriptEngine;
0023 class ScriptLogger;
0024 
0025 class ScriptHandlerInfo
0026 {
0027 public:
0028     explicit ScriptHandlerInfo(QScriptEngine* engine, ScriptLogger* logger);
0029     ScriptHandlerInfo(const ScriptHandlerInfo&) = delete;
0030 
0031     ~ScriptHandlerInfo();
0032 
0033     ScriptHandlerInfo& operator=(const ScriptHandlerInfo&) = delete;
0034 
0035     /** The type of function that is being evaluated (most writing is only allowed when updating) */
0036     enum class Mode
0037     {
0038         None = 0,
0039         Validating = 1,
0040         Updating = 2,
0041         DeterminingLength = 4,
0042         TaggedUnionSelection = 8,
0043         CustomToString = 16,
0044         InterpretingPointer = 32,
0045     };
0046 
0047     std::unique_ptr<ArrayScriptClass> mArrayClass;
0048     std::unique_ptr<PrimitiveScriptClass> mPrimitiveClass;
0049     std::unique_ptr<EnumScriptClass> mEnumClass;
0050     std::unique_ptr<StructUnionScriptClass> mStructUnionClass;
0051     std::unique_ptr<StringScriptClass> mStringClass;
0052     std::unique_ptr<BitfieldScriptClass> mBitfieldClass;
0053     std::unique_ptr<PointerScriptClass> mPointerClass;
0054 
0055     /** @return The mode this handler is currently in (determines which properties are accessible */
0056     Mode mode() const;
0057     void setMode(Mode m);
0058     ScriptLogger* logger() const;
0059 
0060 private:
0061     ScriptLogger* mLogger;
0062     Mode mMode = Mode::None;
0063 };
0064 
0065 #endif // KASTEN_SCRIPTHANDLERINFO_HPP