

#ifndef SBK_CUTTERBINDINGS_PYTHON_H
#define SBK_CUTTERBINDINGS_PYTHON_H

//workaround to access protected functions
#define protected public

#include <sbkpython.h>
#include <sbkmodule.h>
#include <sbkconverter.h>
// Module Includes
#include <pyside6_qtcore_python.h>
#include <pyside6_qtgui_python.h>
#include <pyside6_qtwidgets_python.h>

// Bound library includes
#include <AddressableItemContextMenu.h>
#include <BasicBlockHighlighter.h>
#include <BasicInstructionHighlighter.h>
#include <Configuration.h>
#include <Cutter.h>
#include <CutterDockWidget.h>
#include <CutterPlugin.h>
#include <MainWindow.h>
// Conversion Includes - Primitive Types
#include <QAnyStringView>
#include <qbytearrayview.h>
#include <qchar.h>
#include <QtCore/qlatin1stringview.h>
#include <QString>
#include <QStringList>
#include <QStringView>
#include <qvariant.h>

// Conversion Includes - Container Types
#include <QHash>
#include <QList>
#include <QMap>
#include <QMultiHash>
#include <QMultiMap>
#include <QPair>
#include <QQueue>
#include <QSet>
#include <QStack>
#include <array>
#include <list>
#include <map>
#include <utility>
#include <unordered_map>
#include <vector>


// Type indices
enum : int {
    SBK_AddressableItemContextMenu_IDX                       = 0,
    SBK_BasicBlockHighlighter_IDX                            = 1,
    SBK_BasicInstructionHighlighter_IDX                      = 2,
    SBK_Configuration_IDX                                    = 3,
    SBK_CutterCore_IDX                                       = 4,
    SBK_CutterDockWidget_IDX                                 = 5,
    SBK_CutterPlugin_IDX                                     = 6,
    SBK_MainWindow_MenuType_IDX                              = 9,
    SBK_MainWindow_ContextMenuType_IDX                       = 8,
    SBK_MainWindow_IDX                                       = 7,
    SBK_CutterBindings_IDX_COUNT                             = 10,
};

// This variable stores all Python types exported by this module.
extern Shiboken::Module::TypeInitStruct *SbkCutterBindingsTypeStructs;

// This variable stores the Python module object exported by this module.
extern PyObject *SbkCutterBindingsModuleObject;

// This variable stores all type converters exported by this module.
extern SbkConverter **SbkCutterBindingsTypeConverters;

// Converter indices
enum [[deprecated]] : int {
    SBK_CUTTERBINDINGS_QLIST_INT_IDX                         = 0, // QList<int>
    SBK_CUTTERBINDINGS_QMAP_QSTRING_QVARIANT_IDX             = 1, // QMap<QString,QVariant>
    SBK_CUTTERBINDINGS_QLIST_QSTRING_IDX                     = 2, // QList<QString>
    SBK_CUTTERBINDINGS_QLIST_UNSIGNEDLONGLONG_IDX            = 3, // QList<unsigned long long>
    SBK_CUTTERBINDINGS_QHASH_QSTRING_QCOLOR_IDX              = 4, // QHash<QString,QColor>
    SBK_CUTTERBINDINGS_QLIST_QVARIANT_IDX                    = 5, // QList<QVariant>
    SBK_CUTTERBINDINGS_CONVERTERS_IDX_COUNT                  = 6,
};

// Converter indices
enum : int {
    SBK_CutterBindings_QList_int_IDX                         = 0, // QList<int>
    SBK_CutterBindings_QMap_QString_QVariant_IDX             = 1, // QMap<QString,QVariant>
    SBK_CutterBindings_QList_QString_IDX                     = 2, // QList<QString>
    SBK_CutterBindings_QList_unsignedlonglong_IDX            = 3, // QList<unsigned long long>
    SBK_CutterBindings_QHash_QString_QColor_IDX              = 4, // QHash<QString,QColor>
    SBK_CutterBindings_QList_QVariant_IDX                    = 5, // QList<QVariant>
    SBK_CutterBindings_CONVERTERS_IDX_COUNT                  = 6,
};
// Macros for type check

QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
namespace Shiboken
{

// PyType functions, to get the PyObjectType for a type T
template<> inline PyTypeObject *SbkType< ::AddressableItemContextMenu >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_AddressableItemContextMenu_IDX]); }
template<> inline PyTypeObject *SbkType< ::BasicBlockHighlighter >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_BasicBlockHighlighter_IDX]); }
template<> inline PyTypeObject *SbkType< ::BasicInstructionHighlighter >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_BasicInstructionHighlighter_IDX]); }
template<> inline PyTypeObject *SbkType< ::Configuration >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_Configuration_IDX]); }
template<> inline PyTypeObject *SbkType< ::CutterCore >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_CutterCore_IDX]); }
template<> inline PyTypeObject *SbkType< ::CutterDockWidget >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_CutterDockWidget_IDX]); }
template<> inline PyTypeObject *SbkType< ::CutterPlugin >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_CutterPlugin_IDX]); }
template<> inline PyTypeObject *SbkType< ::MainWindow::MenuType >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_MainWindow_MenuType_IDX]); }
template<> inline PyTypeObject *SbkType< ::MainWindow::ContextMenuType >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_MainWindow_ContextMenuType_IDX]); }
template<> inline PyTypeObject *SbkType< ::MainWindow >() { return Shiboken::Module::get(SbkCutterBindingsTypeStructs[SBK_MainWindow_IDX]); }

} // namespace Shiboken

QT_WARNING_POP
#endif // SBK_CUTTERBINDINGS_PYTHON_H

