LP-311 Remove basic/advanced stabilization tab auto-switch (autotune/txpid lock issues)
[librepilot.git] / ground / gcs / src / libs / utils / codegeneration.cpp
blobdb9e640ea0721e7b99354e8fc316a39c7d591ad8
1 /**
2 ******************************************************************************
4 * @file codegeneration.cpp
5 * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
6 * Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
7 * @brief
8 * @see The GNU Public License (GPL) Version 3
9 * @defgroup
10 * @{
12 *****************************************************************************/
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 3 of the License, or
17 * (at your option) any later version.
19 * This program is distributed in the hope that it will be useful, but
20 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
21 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 * for more details.
24 * You should have received a copy of the GNU General Public License along
25 * with this program; if not, write to the Free Software Foundation, Inc.,
26 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 #include "codegeneration.h"
31 #include <QtCore/QTextStream>
32 #include <QtCore/QStringList>
33 #include <QtCore/QFileInfo>
35 namespace Utils {
36 QTCREATOR_UTILS_EXPORT QString fileNameToCppIdentifier(const QString &s)
38 QString rc;
39 const int len = s.size();
40 const QChar underscore = QLatin1Char('_');
41 const QChar dot = QLatin1Char('.');
43 for (int i = 0; i < len; i++) {
44 const QChar c = s.at(i);
45 if (c == underscore || c.isLetterOrNumber()) {
46 rc += c;
47 } else if (c == dot) {
48 rc += underscore;
51 return rc;
54 QTCREATOR_UTILS_EXPORT QString headerGuard(const QString &file)
56 const QFileInfo fi(file);
57 QString rc = fileNameToCppIdentifier(fi.completeBaseName()).toUpper();
59 rc += QLatin1Char('_');
60 rc += fileNameToCppIdentifier(fi.suffix()).toUpper();
61 return rc;
64 QTCREATOR_UTILS_EXPORT
65 void writeIncludeFileDirective(const QString &file, bool globalInclude,
66 QTextStream &str)
68 const QChar opening = globalInclude ? QLatin1Char('<') : QLatin1Char('"');
69 const QChar closing = globalInclude ? QLatin1Char('>') : QLatin1Char('"');
71 str << QLatin1String("#include ") << opening << file << closing << QLatin1Char('\n');
74 QTCREATOR_UTILS_EXPORT
75 QString writeOpeningNameSpaces(const QStringList &l, const QString &indent,
76 QTextStream &str)
78 const int count = l.size();
79 QString rc;
81 if (count) {
82 str << '\n';
83 for (int i = 0; i < count; i++) {
84 str << rc << "namespace " << l.at(i) << " {\n";
85 rc += indent;
88 return rc;
91 QTCREATOR_UTILS_EXPORT
92 void writeClosingNameSpaces(const QStringList &l, const QString &indent,
93 QTextStream &str)
95 if (!l.empty()) {
96 str << '\n';
98 for (int i = l.size() - 1; i >= 0; i--) {
99 if (i) {
100 str << QString(indent.size() * i, QLatin1Char(' '));
102 str << "} // namespace " << l.at(i) << '\n';
105 } // namespace Utils