git.y1.nz

SameBoy

Accurate GB/GBC emulator
download: https://git.y1.nz/archives/sameboy.tar.gz
README | Files | Log | Refs | LICENSE

HexFiend/HFFullMemoryByteArray.m

      1 //
      2 //  HFFullMemoryByteArray.m
      3 //  HexFiend_2
      4 //
      5 //  Copyright 2007 ridiculous_fish. All rights reserved.
      6 //
      7 
      8 #import <HexFiend/HFByteArray_Internal.h>
      9 #import <HexFiend/HFFullMemoryByteArray.h>
     10 #import <HexFiend/HFFullMemoryByteSlice.h>
     11 #import <HexFiend/HFByteSlice.h>
     12 
     13 @implementation HFFullMemoryByteArray
     14 
     15 - (instancetype)init {
     16     self = [super init];
     17     data = [[NSMutableData alloc] init];
     18     return self;
     19 }
     20 
     21 - (void)dealloc {
     22     [data release];
     23     [super dealloc];
     24 }
     25 
     26 - (unsigned long long)length {
     27     return [data length];
     28 }
     29 
     30 - (void)copyBytes:(unsigned char *)dst range:(HFRange)range {
     31     HFASSERT(range.length == 0 || dst != NULL);
     32     HFASSERT(HFSumDoesNotOverflow(range.location, range.length));
     33     HFASSERT(range.location + range.length <= [self length]);
     34     unsigned char* bytes = [data mutableBytes];
     35     memmove(dst, bytes + ll2l(range.location), ll2l(range.length));
     36 }
     37 
     38 - (HFByteArray *)subarrayWithRange:(HFRange)lrange {
     39     HFRange entireRange = HFRangeMake(0, [self length]);
     40     HFASSERT(HFRangeIsSubrangeOfRange(lrange, entireRange));
     41     NSRange range;
     42     range.location = ll2l(lrange.location);
     43     range.length = ll2l(lrange.length);
     44     HFFullMemoryByteArray* result = [[[self class] alloc] init];
     45     [result->data setData:[data subdataWithRange:range]];
     46     return [result autorelease];
     47 }
     48 
     49 - (NSArray *)byteSlices {
     50     return @[[[[HFFullMemoryByteSlice alloc] initWithData:data] autorelease]];
     51 }
     52 
     53 - (void)insertByteSlice:(HFByteSlice *)slice inRange:(HFRange)lrange {
     54     [self incrementGenerationOrRaiseIfLockedForSelector:_cmd];
     55     HFASSERT([slice length] <= NSUIntegerMax);
     56     NSUInteger length = ll2l([slice length]);
     57     NSRange range;
     58     HFASSERT(lrange.location <= NSUIntegerMax);
     59     HFASSERT(lrange.length <= NSUIntegerMax);
     60     HFASSERT(HFSumDoesNotOverflow(lrange.location, lrange.length));
     61     range.location = ll2l(lrange.location);
     62     range.length = ll2l(lrange.length);
     63     
     64     void* buff = check_malloc(length);
     65     [slice copyBytes:buff range:HFRangeMake(0, length)];
     66     [data replaceBytesInRange:range withBytes:buff length:length];
     67     free(buff);    
     68 }
     69 
     70 @end

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.