This is an automated email from the git hooks/post-receive script. ppm-guest pushed a commit to annotated tag v0.06 in repository libmath-prime-util-perl.
commit 852bd5835829281353cb72f4c67d00533933a239 Author: Dana Jacobsen <d...@acm.org> Date: Thu Jun 14 18:02:19 2012 -0500 Update for 0.06 --- Changes | 2 +- README | 2 +- XS.xs | 6 +++--- cache.c | 29 ++++++++++++++++++++++------- cache.h | 6 ++++-- lib/Math/Prime/Util.pm | 4 ++-- sieve.c | 13 ------------- sieve.h | 1 - util.c | 12 ++++++------ 9 files changed, 39 insertions(+), 36 deletions(-) diff --git a/Changes b/Changes index bf0ce81..0ae8163 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,6 @@ Revision history for Perl extension Math::Prime::Util. -0.06 18 June 2012 +0.06 14 June 2012 - Change to New/Safefree from malloc. Oops. 0.05 11 June 2012 diff --git a/README b/README index 36ed54e..ed662a0 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -Math::Prime::Util version 0.05 +Math::Prime::Util version 0.06 A set of utilities related to prime numbers. These include multiple sieving methods, is_prime, prime_count, nth_prime, approximations and bounds for diff --git a/XS.xs b/XS.xs index c43a013..4053120 100644 --- a/XS.xs +++ b/XS.xs @@ -139,9 +139,8 @@ segment_primes(IN UV low, IN UV high); if (low < 7) low = 7; if (low <= high) { /* Call the segment siever one or more times */ - UV low_d, high_d; - UV segment_size = SEGMENT_CHUNK_SIZE; - unsigned char* sieve = get_prime_segment(); + UV low_d, high_d, segment_size; + unsigned char* sieve = get_prime_segment(&segment_size); if (sieve == 0) croak("Could not get segment cache"); @@ -179,6 +178,7 @@ segment_primes(IN UV low, IN UV high); low_d += range_d; low = seghigh+2; } + free_prime_segment(sieve); } RETVAL = newRV_noinc( (SV*) av ); OUTPUT: diff --git a/cache.c b/cache.c index 593564f..3ef511e 100644 --- a/cache.c +++ b/cache.c @@ -49,22 +49,36 @@ UV get_prime_cache(UV n, const unsigned char** sieve) +#define SEGMENT_CHUNK_SIZE UVCONST(262144) static unsigned char* prime_segment = 0; -unsigned char* get_prime_segment(void) { +unsigned char* get_prime_segment(UV *size) { + MPUassert(size != 0, "get_prime_segment given null size pointer"); if (prime_segment == 0) New(0, prime_segment, SEGMENT_CHUNK_SIZE, unsigned char); if (prime_segment == 0) croak("Could not allocate %"UVuf" bytes for segment sieve", SEGMENT_CHUNK_SIZE); + *size = SEGMENT_CHUNK_SIZE; return prime_segment; } -void free_prime_segment(void) { - if (prime_segment != 0) - Safefree(prime_segment); - prime_segment = 0; +void free_prime_segment(unsigned char* mem) { + /* Thanks for letting us know you're done. */ } +void prime_precalc(UV n) +{ + if (n == 0) { + /* On initialization, make a few primes (2-30k using 1k memory) */ + n = (1024-16)*30; + } + + get_prime_cache(n, 0); /* Sieve to n */ + + /* TODO: should we prealloc the segment here? */ +} + + void _prime_memfreeall(void) { if (prime_cache_sieve != 0) @@ -72,7 +86,9 @@ void _prime_memfreeall(void) prime_cache_sieve = 0; prime_cache_size = 0; - free_prime_segment(); + if (prime_segment != 0) + Safefree(prime_segment); + prime_segment = 0; } void prime_memfree(void) @@ -81,4 +97,3 @@ void prime_memfree(void) prime_precalc(0); } - diff --git a/cache.h b/cache.h index 7423df2..b7a6da3 100644 --- a/cache.h +++ b/cache.h @@ -6,10 +6,12 @@ extern UV get_prime_cache_size(void); extern UV get_prime_cache(UV n, const unsigned char** sieve); +extern void free_prime_cache(unsigned char* sieve); +extern void prime_precalc(UV x); extern void prime_memfree(void); -#define SEGMENT_CHUNK_SIZE UVCONST(262144) -extern unsigned char* get_prime_segment(void); +extern unsigned char* get_prime_segment(UV* size); +extern void free_prime_segment(unsigned char* segment); #endif diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm index fc738a8..bced723 100644 --- a/lib/Math/Prime/Util.pm +++ b/lib/Math/Prime/Util.pm @@ -5,7 +5,7 @@ use Carp qw/croak confess/; BEGIN { $Math::Prime::Util::AUTHORITY = 'cpan:DANAJ'; - $Math::Prime::Util::VERSION = '0.05'; + $Math::Prime::Util::VERSION = '0.06'; } # parent is cleaner, and in the Perl 5.10.1 / 5.12.0 core, but not earlier. @@ -208,7 +208,7 @@ Math::Prime::Util - Utilities related to prime numbers, including fast sieves an =head1 VERSION -Version 0.04 +Version 0.06 =head1 SYNOPSIS diff --git a/sieve.c b/sieve.c index e2b3662..196bf2f 100644 --- a/sieve.c +++ b/sieve.c @@ -8,19 +8,6 @@ #include "bitarray.h" -void prime_precalc(UV n) -{ - if (n == 0) { - /* On initialization, make a few primes (2-30k using 1k memory) */ - n = (1024-16)*30; - } - - get_prime_cache(n, 0); /* Sieve to n */ - - /* TODO: should we prealloc the segment here? */ -} - - UV* sieve_erat(UV end) { diff --git a/sieve.h b/sieve.h index 587627f..c61b0d3 100644 --- a/sieve.h +++ b/sieve.h @@ -4,7 +4,6 @@ #include "EXTERN.h" #include "perl.h" -extern void prime_precalc(UV x); extern UV* sieve_erat(UV end); extern unsigned char* sieve_erat30(UV end); extern int sieve_segment(unsigned char* mem, UV startd, UV endd); diff --git a/util.c b/util.c index b85fb21..b5ed802 100644 --- a/util.c +++ b/util.c @@ -542,10 +542,9 @@ UV prime_count(UV low, UV high) } /* More primes needed. Repeatedly segment sieve */ - segment_size = SEGMENT_CHUNK_SIZE; - segment = get_prime_segment(); + segment = get_prime_segment(&segment_size); if (segment == 0) - return 0; + croak("Could not get segment memory"); while (low_d <= high_d) { @@ -565,6 +564,7 @@ UV prime_count(UV low, UV high) low_d += range_d; } + free_prime_segment(segment); return count; } @@ -746,10 +746,9 @@ UV nth_prime(UV n) /* Start segment sieving. Get memory to sieve into. */ segbase = segment_size; - segment_size = SEGMENT_CHUNK_SIZE; - segment = get_prime_segment(); + segment = get_prime_segment(&segment_size); if (segment == 0) - return 0; + croak("Could not get segment memory"); while (count < target) { /* Limit the segment size if we know the answer comes earlier */ @@ -768,6 +767,7 @@ UV nth_prime(UV n) if (count < target) segbase += segment_size; } + free_prime_segment(segment); MPUassert(count == target, "nth_prime got incorrect count"); return ( (segbase*30) + p ); } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits