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 <cinttypes>
6#include <cstdarg>
7
8QT_BEGIN_NAMESPACE
9
10namespace QtOhos
11{
12
13namespace qohosutils_details {
14
16{
17 char *endPtr;
18 auto value = std::strtoumax(inputString.c_str(), &endPtr, 10);
19 auto validValue = !inputString.empty() && endPtr == inputString.c_str() + inputString.size();
20
21 return validValue
22 ? makeQOhosOptional(value)
24}
25
26}
27
28QOhosOptional<double> tryParseStringAsFiniteDouble(const std::string &inputString)
29{
30 double parsedValue;
31 std::size_t processedInputChars;
32 try {
33 parsedValue = std::stod(inputString, &processedInputChars);
34 } catch (const std::logic_error &) {
35 parsedValue = NAN;
36 processedInputChars = 0;
37 }
38
39 return processedInputChars == inputString.size() && std::isfinite(parsedValue)
40 ? makeQOhosOptional(parsedValue)
41 : makeEmptyQOhosOptional();
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, QOhosOptional<QtOhos::QObjectThreadSafeRef> optInstanceMainWindowRef)
78{
79 if (!optInstanceMainWindowRef.hasValue())
80 return jsState.defaultQAbilityPeer();
81
82 auto optAbilityPeer = jsState.tryGetQAbilityPeerByQWindow(optInstanceMainWindowRef.value());
83 if (!optAbilityPeer) {
84 qCWarning(
85 QtForOhos, "%s: QAbilityPeer for window '%s' no longer exists",
86 Q_FUNC_INFO, optInstanceMainWindowRef.value().refName().c_str());
87 }
88
89 return optAbilityPeer;
90}
91
92}
93
94QT_END_NAMESPACE
std::enable_if_t< qohosplugincore_h_detail::isQOhosOptional< QOhosInvokeResult< Func, T > >, QOhosInvokeResult< Func, T > > andThen(Func &&func) const
virtual std::shared_ptr< QAbilityPeer > defaultQAbilityPeer()=0
QOhosOptional< std::uintmax_t > tryParseStringAsUIntMax(const std::string &inputString)
std::string const char * mapBoolToTrueFalseStr(bool value)
std::shared_ptr< QtOhos::QAbilityPeer > tryMapOptMainWindowToAbilityPeer(QtOhos::JsState &jsState, QOhosOptional< QtOhos::QObjectThreadSafeRef > optInstanceMainWindowRef)
QOhosOptional< double > tryParseStringAsFiniteDouble(const std::string &inputString)
QOhosOptional< void > makeEmptyQOhosOptional()