BNArray.m 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #import <bn/BNArray.h>
  2. #include <stdlib.h>
  3. @implementation BNArray
  4. id * data_;
  5. int size_;
  6. - init_size: (int) amount {
  7. size_ = amount;
  8. data_ = calloc(amount, sizeof(id));
  9. return self;
  10. }
  11. - init {
  12. [super init];
  13. [self init_size: 16 ];
  14. return self;
  15. }
  16. + new_size: (int) size {
  17. return [[self alloc] init_size: size];
  18. }
  19. - done {
  20. if (data_) {
  21. int index;
  22. for (index = 0 ; index < size_ ; index ++) {
  23. id elem = [self get: index];
  24. [ elem release ];
  25. }
  26. free(data_);
  27. }
  28. return self;
  29. }
  30. - (BOOL) range_ok: (int) index {
  31. if (index < 0) return NO;
  32. if (index >= size_) return NO;
  33. return YES;
  34. }
  35. - get: (int) index {
  36. if (![self range_ok: index]) return nil;
  37. return data_[index];
  38. }
  39. - put_raw: (int) index : (id) value {
  40. return data_[index] = value;
  41. }
  42. - put: (int) index : (id) value {
  43. if (![self range_ok: index]) return nil;
  44. return [ self put_raw: index : [ value retain ]];
  45. }
  46. @end