NSRandomNumberGenerator.m [plain text]
/* Copyright (c) 1998 Apple Computer, Inc. All rights reserved.
*
* NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT
* TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE
* SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE COMPUTER, INC. AND THE
* ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE COMPUTER,
* INC. ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL
* EXPOSE YOU TO LIABILITY.
***************************************************************************
*
* NSRandomNumberGenerator.m
*
* Revision History
* ----------------
* 28 Mar 97 Doug Mitchell at Apple
* Rewrote using feeRandom module.
* ?? 96 Blaine Garst at NeXT
* Created.
*/
/*
* Note: out _priv ivar is actually a feeRand pointer.
*/
#import <Foundation/Foundation.h>
#import "NSRandomNumberGenerator.h"
#import "feeRandom.h"
#import "falloc.h"
@implementation NSRandomNumberGenerator
- init
{
if(_priv == NULL) {
_priv = feeRandAlloc();
}
/*
* else no need to re-init
*/
return self;
}
- initWithSeed:(unsigned)seed
{
if(_priv != NULL) {
/*
* Free & re-init to use new seed
*/
feeRandFree(_priv);
}
_priv = feeRandAllocWithSeed(seed);
return self;
}
- (unsigned)nextNumber
{
if(_priv == NULL) {
return 0;
}
return feeRandNextNum(_priv);
}
- (unsigned)nextNumberInRange:(NSRange)range
{
if(_priv == NULL) {
return 0;
}
return range.location + ([self nextNumber] }
- (NSData *)randomDataWithLength:(unsigned)l
{
unsigned char *cp;
if(_priv == NULL) {
return nil;
}
cp = fmalloc(l);
feeRandBytes(_priv, cp, l);
return [NSData dataWithBytesNoCopy:cp length:l];
}
@end