----- Original Message ----- From: "David Oswald"

I've also taken Dana's suggestion and used unsigned longs internally
(and longs as parameters).  This allows Perl's built with long support
to handle (theoretically) sieves up to 9.2e18.  ( 2^64 / 2 --- if we
were passing unsigned longs as params it would be 2^64, but
Inline::CPP's typemap doesn't yet support unsigned longs, so we pass
longs).

IINM you can easily pass an unsigned long to a function that takes a long as its parameter:

################################
use warnings;

use Inline Config =>
   BUILD_NOISY => 1;

use Inline CPP => <<'EOCPP';

void bar(long x) {
    unsigned long ul = x;
    printf("%u", ul);
}

EOCPP

my $x = 4294967233;
bar($x); # prints 4294967233 for me
            # on 5.14.0 and 5.6.2
################################

Is the typemapping of unsigned long that occurs in the perl typemap unsuitable for Inline::CPP ? ... or is it just that not all versions of perl provided typemapping of 'unsigned long' ?

If it's the latter, you could just supply your own typemap with the M::P::FS source, for those versions of perl that don't typemap 'unsigned long'. The typemap you provide would have a copy'n'paste of the 'unsigned long' typemapping from one of the later perl typemaps.
At least, that approach worked with Inline::C.

Cheers,
Rob

Reply via email to