[Kde-hardware-devel] Solid device action predicates

Kevin Ottens ervin at kde.org
Wed Jul 8 10:54:50 CEST 2009


On Wednesday 8 July 2009 09:11:10 Ozan Çağlayan wrote:
> Kevin Ottens wrote On 08-07-2009 03:23:
> > It exactly acts like an OR operator, but the binary one so foo.bar ==
> > 'X|Y' means that foo.bar should have both X and Y.
>
> So looking at k3b's one which checks for a blank medium:
>
> [[StorageVolume.ignored == false AND OpticalDisc.blank == true ] AND
> OpticalDisc.discType == 'CdRecordable|CdRewritable']
>
> It expects both CdRecordable and CdRewritable for the discType property,
> right? But a recordable cd has only the first one and a rewriteable has
> the second. So it seems like a misusage of that operator?

Indeed looks like a mistake, I'd expect something like this instead:
OpticalDisc.discType & 'CdRecordable|CdRewritable'

> Or another example:
>
> $ solid-hardware details /org/freedesktop/Hal/devices/acpi_CPU0
> udi = '/org/freedesktop/Hal/devices/acpi_CPU0'
>   parent = '/org/freedesktop/Hal/devices/computer'  (string)
>   vendor = ''  (string)
>   product = 'AMD Athlon(tm) 64 X2 Dual Core Processor 4800+'  (string)
>   Processor.number = 0  (0x0)  (int)
>   Processor.maxSpeed = '0'  (string)
>   Processor.canChangeFrequency = false  (bool)
>   Processor.instructionSets = 'IntelMmx|IntelSse|IntelSse2|Amd3DNow'
> (0x27)  (flag)
>
> Say that I'm trying to filter processors having only IntelMmx
> instruction set. According to your reply, using & makes sense:
>
> $ solid-hardware query "Processor.instructionSets & 'IntelMmx'"
> udi = '/org/freedesktop/Hal/devices/acpi_CPU0'
> udi = '/org/freedesktop/Hal/devices/acpi_CPU1'
>
> Seems working but try a stupid one:
>
> $ solid-hardware query "Processor.instructionSets & 'foobar'"
> udi = '/org/freedesktop/Hal/devices/acpi_CPU0'
> udi = '/org/freedesktop/Hal/devices/acpi_CPU1'
>
> It matches too!

This one definitely looks like a bug, it should be rejected. Somehow doesn't 
seem to behave like this for me though.

> And now with the '|' :
>
> $ solid-hardware query "Processor.instructionSets == 'IntelMmx|IntelSse'"
> $ solid-hardware query "Processor.instructionSets ==
> 'IntelMmx|IntelSse|IntelSse2'"
> $ solid-hardware query "Processor.instructionSets ==
> 'IntelMmx|IntelSse|IntelSse2|Amd3DNow'"
> udi = '/org/freedesktop/Hal/devices/acpi_CPU0'
> udi = '/org/freedesktop/Hal/devices/acpi_CPU1'
>
> It only matches if I check again the whole flag set. So what's the point
> in here?

Well, it does what you ask and match only if it's equals. If you want to check 
if there's at least one of those use the & operator.

> It really behaves like I'm checking the instructionSets
> property against a string which contains "X|Y|Z|W" having | characters
> in it. No?

Nope, it behaves like any flag set comparison in C++ (well, except for the bug 
you spotted earlier).

Regards.
-- 
Kévin 'ervin' Ottens, http://ervin.ipsquad.net
"Ni le maître sans disciple, Ni le disciple sans maître,
Ne font reculer l'ignorance."
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/kde-hardware-devel/attachments/20090708/343f6770/attachment.sig 


More information about the Kde-hardware-devel mailing list