• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

Solid

  • solid
  • solid
predicateparse.cpp
Go to the documentation of this file.
1/*
2 Copyright 2006 Kevin Ottens <ervin@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) version 3, or any
8 later version accepted by the membership of KDE e.V. (or its
9 successor approved by the membership of KDE e.V.), which shall
10 act as a proxy defined in Section 6 of version 3 of the license.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21extern "C"
22{
23#include "predicateparse.h"
24
25void PredicateParse_mainParse(const char *_code);
26}
27
28#include "predicate.h"
29#include "soliddefs_p.h"
30
31#include <stdlib.h>
32
33#include <QtCore/QStringList>
34#include <QtCore/QThreadStorage>
35
36namespace Solid
37{
38namespace PredicateParse
39{
40
41struct ParsingData
42{
43 ParsingData()
44 : result(0)
45 {}
46
47 Solid::Predicate *result;
48 QByteArray buffer;
49};
50
51}
52}
53
54SOLID_GLOBAL_STATIC(QThreadStorage<Solid::PredicateParse::ParsingData *>, s_parsingData)
55
56Solid::Predicate Solid::Predicate::fromString(const QString &predicate)
57{
58 Solid::PredicateParse::ParsingData *data = new Solid::PredicateParse::ParsingData();
59 s_parsingData->setLocalData(data);
60 data->buffer = predicate.toLatin1();
61 PredicateParse_mainParse(data->buffer.constData());
62 Predicate result;
63 if (data->result)
64 {
65 result = Predicate(*data->result);
66 delete data->result;
67 }
68 s_parsingData->setLocalData(0);
69 return result;
70}
71
72
73void PredicateParse_setResult(void *result)
74{
75 Solid::PredicateParse::ParsingData *data = s_parsingData->localData();
76 data->result = (Solid::Predicate *) result;
77}
78
79void PredicateParse_errorDetected(const char* s)
80{
81 qWarning("ERROR from solid predicate parser: %s", s);
82 s_parsingData->localData()->result = 0;
83}
84
85void PredicateParse_destroy(void *pred)
86{
87 Solid::PredicateParse::ParsingData *data = s_parsingData->localData();
88 Solid::Predicate *p = (Solid::Predicate *) pred;
89 if (p != data->result) {
90 delete p;
91 }
92}
93
94void *PredicateParse_newAtom(char *interface, char *property, void *value)
95{
96 QString iface(interface);
97 QString prop(property);
98 QVariant *val = (QVariant *)value;
99
100 Solid::Predicate *result = new Solid::Predicate(iface, prop, *val);
101
102 delete val;
103 free(interface);
104 free(property);
105
106 return result;
107}
108
109void *PredicateParse_newMaskAtom(char *interface, char *property, void *value)
110{
111 QString iface(interface);
112 QString prop(property);
113 QVariant *val = (QVariant *)value;
114
115 Solid::Predicate *result = new Solid::Predicate(iface, prop, *val, Solid::Predicate::Mask);
116
117 delete val;
118 free(interface);
119 free(property);
120
121 return result;
122}
123
124
125void *PredicateParse_newIsAtom(char *interface)
126{
127 QString iface(interface);
128
129 Solid::Predicate *result = new Solid::Predicate(iface);
130
131 free(interface);
132
133 return result;
134}
135
136
137void *PredicateParse_newAnd(void *pred1, void *pred2)
138{
139 Solid::Predicate *result = new Solid::Predicate();
140
141 Solid::PredicateParse::ParsingData *data = s_parsingData->localData();
142 Solid::Predicate *p1 = (Solid::Predicate *)pred1;
143 Solid::Predicate *p2 = (Solid::Predicate *)pred2;
144
145 if (p1==data->result || p2==data->result) {
146 data->result = 0;
147 }
148
149 *result = *p1 & *p2;
150
151 delete p1;
152 delete p2;
153
154 return result;
155}
156
157
158void *PredicateParse_newOr(void *pred1, void *pred2)
159{
160 Solid::Predicate *result = new Solid::Predicate();
161
162 Solid::PredicateParse::ParsingData *data = s_parsingData->localData();
163 Solid::Predicate *p1 = (Solid::Predicate *)pred1;
164 Solid::Predicate *p2 = (Solid::Predicate *)pred2;
165
166 if (p1==data->result || p2==data->result) {
167 data->result = 0;
168 }
169
170 *result = *p1 | *p2;
171
172 delete p1;
173 delete p2;
174
175 return result;
176}
177
178
179void *PredicateParse_newStringValue(char *val)
180{
181 QString s(val);
182
183 free(val);
184
185 return new QVariant(s);
186}
187
188
189void *PredicateParse_newBoolValue(int val)
190{
191 bool b = (val != 0);
192 return new QVariant(b);
193}
194
195
196void *PredicateParse_newNumValue(int val)
197{
198 return new QVariant(val);
199}
200
201
202void *PredicateParse_newDoubleValue(double val)
203{
204 return new QVariant(val);
205}
206
207
208void *PredicateParse_newEmptyStringListValue()
209{
210 return new QVariant(QStringList());
211}
212
213
214void *PredicateParse_newStringListValue(char *name)
215{
216 QStringList list;
217 list << QString(name);
218
219 free(name);
220
221 return new QVariant(list);
222}
223
224
225void *PredicateParse_appendStringListValue(char *name, void *list)
226{
227 QVariant *variant = (QVariant *)list;
228
229 QStringList new_list = variant->toStringList();
230
231 new_list << QString(name);
232
233 delete variant;
234 free(name);
235
236 return new QVariant(new_list);
237}
238
239void PredicateLexer_unknownToken(const char* text)
240{
241 qWarning("ERROR from solid predicate parser: unrecognized token '%s' in predicate '%s'\n",
242 text, s_parsingData->localData()->buffer.constData());
243}
Solid::Predicate
This class implements predicates for devices.
Definition: predicate.h:46
Solid::Predicate::Mask
@ Mask
Definition: predicate.h:54
Solid
Definition: acadapter.h:29
predicate.h
PredicateParse_newAtom
void * PredicateParse_newAtom(char *interface, char *property, void *value)
Definition: predicateparse.cpp:94
PredicateParse_appendStringListValue
void * PredicateParse_appendStringListValue(char *name, void *list)
Definition: predicateparse.cpp:225
PredicateParse_newBoolValue
void * PredicateParse_newBoolValue(int val)
Definition: predicateparse.cpp:189
PredicateParse_mainParse
void PredicateParse_mainParse(const char *_code)
PredicateParse_newStringListValue
void * PredicateParse_newStringListValue(char *name)
Definition: predicateparse.cpp:214
PredicateParse_destroy
void PredicateParse_destroy(void *pred)
Definition: predicateparse.cpp:85
PredicateParse_newNumValue
void * PredicateParse_newNumValue(int val)
Definition: predicateparse.cpp:196
PredicateLexer_unknownToken
void PredicateLexer_unknownToken(const char *text)
Definition: predicateparse.cpp:239
PredicateParse_errorDetected
void PredicateParse_errorDetected(const char *s)
Definition: predicateparse.cpp:79
PredicateParse_setResult
void PredicateParse_setResult(void *result)
Definition: predicateparse.cpp:73
PredicateParse_newDoubleValue
void * PredicateParse_newDoubleValue(double val)
Definition: predicateparse.cpp:202
PredicateParse_newMaskAtom
void * PredicateParse_newMaskAtom(char *interface, char *property, void *value)
Definition: predicateparse.cpp:109
PredicateParse_newOr
void * PredicateParse_newOr(void *pred1, void *pred2)
Definition: predicateparse.cpp:158
PredicateParse_newAnd
void * PredicateParse_newAnd(void *pred1, void *pred2)
Definition: predicateparse.cpp:137
PredicateParse_newIsAtom
void * PredicateParse_newIsAtom(char *interface)
Definition: predicateparse.cpp:125
PredicateParse_newEmptyStringListValue
void * PredicateParse_newEmptyStringListValue()
Definition: predicateparse.cpp:208
PredicateParse_newStringValue
void * PredicateParse_newStringValue(char *val)
Definition: predicateparse.cpp:179
predicateparse.h
soliddefs_p.h
SOLID_GLOBAL_STATIC
#define SOLID_GLOBAL_STATIC(TYPE, NAME)
Definition: soliddefs_p.h:77
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Solid

Skip menu "Solid"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal