This is PrimeGenerator.m in view mode; [Download] [Up]
/* File: PrimeGenerator.m - Prime generator for 'PrimeSpiral'
*
* By: Christopher Lane
* Symbolic Systems Resources Group
* Knowledge Systems Laboratory
* Stanford University
*
* Date: 24 February 1990
*
* Copyright: 1990 by The Leland Stanford Junior University. This program
* may be distributed without restriction for non-commercial use.
*/
#import <stdlib.h>
#import <stdio.h>
#import "PrimeGenerator.h"
@implementation PrimeGenerator
+ new
{
self = [super new];
if ((primes = (ENTRY *) calloc((maximum = NUMELEMS), sizeof(ENTRY))) == NULL) {
perror("calloc");
exit(EXIT_FAILURE);
}
index = 0;
number = 1;
return self;
}
- (unsigned int) generate
{
register unsigned int i;
if (number > 2) {
loop: for (i = 1, number += 2; i < index && number >= primes[i].square; i++)
if (number == primes[i].square || (number % primes[i].prime) == 0) goto loop;
}
else number++;
primes[index].prime = number;
primes[index].square = number * number;
if (++index == maximum) {
#ifdef DEBUG
(void) printf("Maximum (%d) primes exceeded, resizing.\n", maximum);
#endif
if ((primes = (ENTRY *) realloc((void *) primes, (maximum += NUMELEMS) * sizeof(ENTRY))) == NULL) {
perror("realloc");
exit(EXIT_FAILURE);
}
}
#ifdef DEBUG
(void) printf("%d", number);
#endif
return (number);
}
- free
{
if (primes != NULL) cfree((void *) primes);
return [super free];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.