I see there's a mu::ParserInt class in https://github.com/beltoforion/muparser/blob/master/include/muParserInt.h , that we don't use in GDAL. A bit strange it wasn't mentionned in [1]. Perhaps because of this comment: "This version of the parser handles only integer numbers. It disables the built in operators thus it is slower than muParser. Integer values are stored in the double value_type and converted if needed."

Le 03/12/2025 à 21:07, Daniel Baston via gdal-dev a écrit :
Hugh,

My read of this discussion [1] is that bitwise operators are not supported and we would need to add them as a GDAL extension. This is pretty easy to do: see [2]. Alternatively, bitwise operators are probably supported by the ExprTk expression parser [3] (supported by GDAL) or this pull request [4].

Dan

[1] https://github.com/beltoforion/muparser/discussions/154#discussioncomment-13104418
[2] https://github.com/OSGeo/gdal/pull/13187/files
[3] https://www.partow.net/programming/exprtk/
[4] https://github.com/OSGeo/gdal/pull/13470

On Wed, Dec 3, 2025 at 2:58 PM Hugh Graham via gdal-dev <[email protected]> wrote:

    Hi,

    I am using VRT muparser expressions for bitwise operations when
    creating masks and wanted to understand why I can't get the
    /bitwise & /operator working? My current solution is to use fmod
    which is fine (and I think equivalent) but using "&" would be
    convenient and a bit easier to read...

    To illustrate, the following file works:
    
https://gist.github.com/h-a-graham/6db16e70e064ae8173f1052537c59761#file-fmask-fmodmask-vrt

    the expression used here is:"(fmod(Fmask, 16) >= 8) ||
    (fmod(Fmask, 8) >= 4) ? 0 : 1"

    ```
    gdal convert
    
"/vsicurl/https://gist.githubusercontent.com/h-a-graham/6db16e70e064ae8173f1052537c59761/raw/c48b15852bcc7c5252cae4b906c14b9a3205a33d/fmask-fmodmask.vrt";
    "test.tif"
    ```

    However, the following file fails:
    
https://gist.github.com/h-a-graham/6db16e70e064ae8173f1052537c59761#file-fmask-bitmask-vrt
    the expression parsed as: "((Fmask &amp; 8) &gt; 0 || (Fmask &amp;
    4) &gt; 0) ? 0 : 1" in the XML but provided as (to my xml parser):

    "((Fmask & 8) > 0 || (Fmask & 4) > 0) ? 0 : 1"

    ```
    gdal convert
    
"/vsicurl/https://gist.githubusercontent.com/h-a-graham/6db16e70e064ae8173f1052537c59761/raw/c48b15852bcc7c5252cae4b906c14b9a3205a33d/fmask-bitmask.vrt";
    "test.tif"
    0...10...20..ERROR 1: Unexpected token "& 8) > 0 || (Fmask & 4) >
    0) ? 0 : 1 " found at position 8.
    ```

    So, is using "&" possible, or should I just stick with fmod and
    not worry about it?

    Any help would be much appreciated.

    Hugh






    _______________________________________________
    gdal-dev mailing list
    [email protected]
    https://lists.osgeo.org/mailman/listinfo/gdal-dev


_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev

--
http://www.spatialys.com
My software is free, but my time generally not.
_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to