Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qohosutils.cpp
Go to the documentation of this file.
1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qohosutils.h"
5#include <cerrno>
6#include <cinttypes>
7#include <cstdarg>
8
9QT_BEGIN_NAMESPACE
10
11namespace QtOhos
12{
13
14namespace qohosutils_details {
15
16std::optional<std::uintmax_t> tryParseStringAsUIntMax(const std::string &inputString)
17{
18 char *endPtr;
19 auto value = std::strtoumax(inputString.c_str(), &endPtr, 10);
20 auto validValue = !inputString.empty() && endPtr == inputString.c_str() + inputString.size();
21
22 return validValue
23 ? std::optional(value)
24 : std::nullopt;
25}
26
27}
28
29std::optional<double> tryParseStringAsFiniteDouble(const std::string &inputString)
30{
31 char *endPtr;
32 errno = 0;
33 auto value = std::strtod(inputString.c_str(), &endPtr);
34 bool validValue = !inputString.empty()
35 && endPtr == inputString.c_str() + inputString.size()
36 && errno != ERANGE
37 && std::isfinite(value);
38
39 return validValue
40 ? std::optional(value)
41 : std::nullopt;
42}
43
44std::string printfToString(const char *format, ...)
45{
46 std::va_list ap;
47
48 va_start(ap, format);
49 auto dryVsnprintfResult = std::vsnprintf(nullptr, 0, format, ap);
50 va_end(ap);
51
52 if (dryVsnprintfResult < 0)
53 qOhosReportFatalErrorAndAbort("String formatting with format '%s' failed: %d", format, dryVsnprintfResult);
54
55 auto outputSize = static_cast<std::size_t>(dryVsnprintfResult);
56
57 std::string output(outputSize + 1, '\0');
58
59 va_start(ap, format);
60 auto vsnprintfResult = std::vsnprintf(&output[0], output.size(), format, ap);
61 va_end(ap);
62
63 if (vsnprintfResult < 0)
64 qOhosReportFatalErrorAndAbort("String formatting with format '%s' failed: %d", format, vsnprintfResult);
65
66 output.resize(outputSize);
67
68 return output;
69}
70
71const char *mapBoolToTrueFalseStr(bool value)
72{
73 return value ? "true" : "false";
74}
75
77 QtOhos::JsState &jsState, std::optional<QtOhos::QObjectThreadSafeRef> optInstanceMainWindowRef)
78{
79 if (!optInstanceMainWindowRef.has_value())
80 return jsState.defaultQAbility();
81
82 auto optQAbility = jsState.tryGetQAbilityByQWindow(optInstanceMainWindowRef.value());
83 if (!optQAbility) {
84 qCWarning(
85 QtForOhos, "%s: QAbility for window '%s' no longer exists",
86 Q_FUNC_INFO, optInstanceMainWindowRef.value().refName().c_str());
87 }
88
89 return optQAbility;
90}
91
92}
93
94QT_END_NAMESPACE
std::optional< std::uintmax_t > tryParseStringAsUIntMax(const std::string &inputString)
std::string const char * mapBoolToTrueFalseStr(bool value)
std::optional< double > tryParseStringAsFiniteDouble(const std::string &inputString)
std::optional< QNapi::Object > tryMapOptMainWindowToQAbility(QtOhos::JsState &jsState, std::optional< QtOhos::QObjectThreadSafeRef > optInstanceMainWindowRef)