aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/ApiExtractor/typesystem.h
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/ApiExtractor/typesystem.h')
-rw-r--r--sources/shiboken6/ApiExtractor/typesystem.h215
1 files changed, 215 insertions, 0 deletions
diff --git a/sources/shiboken6/ApiExtractor/typesystem.h b/sources/shiboken6/ApiExtractor/typesystem.h
new file mode 100644
index 000000000..a2e4debc8
--- /dev/null
+++ b/sources/shiboken6/ApiExtractor/typesystem.h
@@ -0,0 +1,215 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef TYPESYSTEM_H
+#define TYPESYSTEM_H
+
+#include "include.h"
+#include "typesystem_typedefs.h"
+
+#include <QtCore/qobjectdefs.h>
+#include <QtCore/QString>
+#include <QtCore/QScopedPointer>
+
+class AbstractMetaType;
+class CustomTypeEntry;
+class PrimitiveTypeEntry;
+class SourceLocation;
+class TypeSystemTypeEntry;
+
+class TypeEntryPrivate;
+
+QT_BEGIN_NAMESPACE
+class QDebug;
+class QVersionNumber;
+QT_END_NAMESPACE
+
+class TypeEntry
+{
+ Q_GADGET
+public:
+ Q_DISABLE_COPY_MOVE(TypeEntry)
+
+ enum Type {
+ PrimitiveType,
+ VoidType,
+ VarargsType,
+ FlagsType,
+ EnumType,
+ EnumValue,
+ ConstantValueType,
+ TemplateArgumentType,
+ BasicValueType,
+ ContainerType,
+ ObjectType,
+ NamespaceType,
+ ArrayType,
+ TypeSystemType,
+ CustomType,
+ PythonType,
+ FunctionType,
+ SmartPointerType,
+ TypedefType
+ };
+ Q_ENUM(Type)
+
+ enum CodeGeneration {
+ GenerateNothing, // Rejection, private type, ConstantValueTypeEntry or similar
+ GenerationDisabled, // generate='no' in type system
+ GenerateCode, // Generate code
+ GenerateForSubclass, // Inherited from a loaded dependent type system.
+ };
+ Q_ENUM(CodeGeneration)
+
+ explicit TypeEntry(const QString &entryName, Type t, const QVersionNumber &vr,
+ const TypeEntryCPtr &parent);
+ virtual ~TypeEntry();
+
+ Type type() const;
+
+ TypeEntryCPtr parent() const;
+ void setParent(const TypeEntryCPtr &);
+ bool isChildOf(const TypeEntryCPtr &p) const;
+
+ bool isPrimitive() const;
+ bool isEnum() const;
+ bool isFlags() const;
+ bool isObject() const;
+ bool isNamespace() const;
+ bool isContainer() const;
+ bool isSmartPointer() const;
+ bool isUniquePointer() const;
+ bool isArray() const;
+ bool isTemplateArgument() const;
+ bool isVoid() const;
+ bool isVarargs() const;
+ bool isCustom() const;
+ bool isTypeSystem() const;
+ bool isFunction() const;
+ bool isEnumValue() const;
+
+ bool stream() const;
+ void setStream(bool b);
+
+ bool isBuiltIn() const;
+ void setBuiltIn(bool b);
+
+ bool isPrivate() const;
+ void setPrivate(bool b);
+
+ // The type's name in C++, fully qualified
+ QString name() const;
+ // C++ excluding inline namespaces
+ QString shortName() const;
+ // Name as specified in XML
+ QString entryName() const;
+
+ CodeGeneration codeGeneration() const;
+ void setCodeGeneration(CodeGeneration cg);
+
+ // Returns true if code must be generated for this entry,
+ // it will return false in case of types coming from typesystems
+ // included for reference only.
+ // NOTE: 'GenerateForSubclass' means 'generate="no"'
+ // on 'load-typesystem' tag
+ bool generateCode() const;
+
+ /// Returns whether the C++ generators should generate this entry
+ bool shouldGenerate() const;
+
+ int revision() const;
+ void setRevision(int r); // see typedatabase.cpp
+ int sbkIndex() const; // see typedatabase.cpp
+ void setSbkIndex(int i);
+
+ virtual QString qualifiedCppName() const;
+
+ /// Its type's name in target language API.
+ /// The target language API name represents how this type is referred on
+ /// low level code for the target language. Examples: for Java this would
+ /// be a JNI name, for Python it should represent the CPython type name.
+ /// \return string representing the target language API name
+ /// Currently used only for PrimitiveTypeEntry (attribute "target").
+ CustomTypeEntryCPtr targetLangApiType() const;
+ bool hasTargetLangApiType() const;
+ void setTargetLangApiType(const CustomTypeEntryPtr &cte);
+ QString targetLangApiName() const;
+
+ // The type's name in TargetLang
+ QString targetLangName() const; // "Foo.Bar"
+ void setTargetLangName(const QString &n);
+ QString targetLangEntryName() const; // "Bar"
+
+ // The package
+ QString targetLangPackage() const;
+ void setTargetLangPackage(const QString &p);
+
+ QString qualifiedTargetLangName() const;
+
+ virtual bool isValue() const;
+ virtual bool isComplex() const;
+
+ const IncludeList &extraIncludes() const;
+ void setExtraIncludes(const IncludeList &includes);
+ void addExtraInclude(const Include &newInclude);
+
+ Include include() const;
+ void setInclude(const Include &inc);
+
+ QVersionNumber version() const;
+
+ // View on: Type to use for function argument conversion, fex
+ // std::string_view -> std::string for foo(std::string_view).
+ // cf AbstractMetaType::viewOn()
+ TypeEntryPtr viewOn() const;
+ void setViewOn(const TypeEntryPtr &v);
+
+ virtual TypeEntry *clone() const;
+
+ void useAsTypedef(const TypeEntryCPtr &source);
+
+ SourceLocation sourceLocation() const;
+ void setSourceLocation(const SourceLocation &sourceLocation);
+
+ // Query functions for generators
+ /// Returns true if the type passed has a Python wrapper for it.
+ /// Although namespace has a Python wrapper, it's not considered a type.
+ bool isWrapperType() const;
+
+#ifndef QT_NO_DEBUG_STREAM
+ virtual void formatDebug(QDebug &d) const;
+#endif
+
+protected:
+ explicit TypeEntry(TypeEntryPrivate *d);
+
+ const TypeEntryPrivate *d_func() const;
+ TypeEntryPrivate *d_func();
+
+ virtual QString buildTargetLangName() const;
+
+private:
+ bool setRevisionHelper(int r);
+ int sbkIndexHelper() const;
+ QScopedPointer<TypeEntryPrivate> m_d;
+};
+
+TypeSystemTypeEntryCPtr typeSystemTypeEntry(TypeEntryCPtr e);
+
+// cf AbstractMetaClass::targetLangEnclosingClass()
+TypeEntryCPtr targetLangEnclosingEntry(const TypeEntryCPtr &e);
+
+bool isCppPrimitive(const TypeEntryCPtr &e);
+
+/// Returns true if the type is a primitive but not a C++ primitive.
+bool isUserPrimitive(const TypeEntryCPtr &e);
+
+/// Returns true if the type is a C++ integral primitive,
+/// i.e. bool, char, int, long, and their unsigned counterparts.
+bool isCppIntegralPrimitive(const TypeEntryCPtr &e);
+
+/// Returns true if the type is an extended C++ primitive, a void*,
+/// a const char*, or a std::string (cf isCppPrimitive()).
+bool isExtendedCppPrimitive(const TypeEntryCPtr &e);
+
+#endif // TYPESYSTEM_H