| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2010 Google Inc. | 3 * Copyright 2010 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 | 10 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 * @param itemsPerBlock the number of items to allocate at once | 28 * @param itemsPerBlock the number of items to allocate at once |
| 29 * @param initialBlock optional memory to use for the first block. | 29 * @param initialBlock optional memory to use for the first block. |
| 30 * Must be at least itemSize*itemsPerBlock sized. | 30 * Must be at least itemSize*itemsPerBlock sized. |
| 31 * Caller is responsible for freeing this memory. | 31 * Caller is responsible for freeing this memory. |
| 32 */ | 32 */ |
| 33 GrAllocator(size_t itemSize, int itemsPerBlock, void* initialBlock) : | 33 GrAllocator(size_t itemSize, int itemsPerBlock, void* initialBlock) : |
| 34 fItemSize(itemSize), | 34 fItemSize(itemSize), |
| 35 fItemsPerBlock(itemsPerBlock), | 35 fItemsPerBlock(itemsPerBlock), |
| 36 fOwnFirstBlock(NULL == initialBlock), | 36 fOwnFirstBlock(NULL == initialBlock), |
| 37 fCount(0) { | 37 fCount(0) { |
| 38 GrAssert(itemsPerBlock > 0); | 38 SkASSERT(itemsPerBlock > 0); |
| 39 fBlockSize = fItemSize * fItemsPerBlock; | 39 fBlockSize = fItemSize * fItemsPerBlock; |
| 40 fBlocks.push_back() = initialBlock; | 40 fBlocks.push_back() = initialBlock; |
| 41 GR_DEBUGCODE(if (!fOwnFirstBlock) {*((char*)initialBlock+fBlockSize-1)='
a';} ); | 41 GR_DEBUGCODE(if (!fOwnFirstBlock) {*((char*)initialBlock+fBlockSize-1)='
a';} ); |
| 42 } | 42 } |
| 43 | 43 |
| 44 /** | 44 /** |
| 45 * Adds an item and returns pointer to it. | 45 * Adds an item and returns pointer to it. |
| 46 * | 46 * |
| 47 * @return pointer to the added item. | 47 * @return pointer to the added item. |
| 48 */ | 48 */ |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 | 88 |
| 89 /** | 89 /** |
| 90 * is the count 0 | 90 * is the count 0 |
| 91 */ | 91 */ |
| 92 bool empty() const { return fCount == 0; } | 92 bool empty() const { return fCount == 0; } |
| 93 | 93 |
| 94 /** | 94 /** |
| 95 * access last item, only call if count() != 0 | 95 * access last item, only call if count() != 0 |
| 96 */ | 96 */ |
| 97 void* back() { | 97 void* back() { |
| 98 GrAssert(fCount); | 98 SkASSERT(fCount); |
| 99 return (*this)[fCount-1]; | 99 return (*this)[fCount-1]; |
| 100 } | 100 } |
| 101 | 101 |
| 102 /** | 102 /** |
| 103 * access last item, only call if count() != 0 | 103 * access last item, only call if count() != 0 |
| 104 */ | 104 */ |
| 105 const void* back() const { | 105 const void* back() const { |
| 106 GrAssert(fCount); | 106 SkASSERT(fCount); |
| 107 return (*this)[fCount-1]; | 107 return (*this)[fCount-1]; |
| 108 } | 108 } |
| 109 | 109 |
| 110 /** | 110 /** |
| 111 * access item by index. | 111 * access item by index. |
| 112 */ | 112 */ |
| 113 void* operator[] (int i) { | 113 void* operator[] (int i) { |
| 114 GrAssert(i >= 0 && i < fCount); | 114 SkASSERT(i >= 0 && i < fCount); |
| 115 return (char*)fBlocks[i / fItemsPerBlock] + | 115 return (char*)fBlocks[i / fItemsPerBlock] + |
| 116 fItemSize * (i % fItemsPerBlock); | 116 fItemSize * (i % fItemsPerBlock); |
| 117 } | 117 } |
| 118 | 118 |
| 119 /** | 119 /** |
| 120 * access item by index. | 120 * access item by index. |
| 121 */ | 121 */ |
| 122 const void* operator[] (int i) const { | 122 const void* operator[] (int i) const { |
| 123 GrAssert(i >= 0 && i < fCount); | 123 SkASSERT(i >= 0 && i < fCount); |
| 124 return (const char*)fBlocks[i / fItemsPerBlock] + | 124 return (const char*)fBlocks[i / fItemsPerBlock] + |
| 125 fItemSize * (i % fItemsPerBlock); | 125 fItemSize * (i % fItemsPerBlock); |
| 126 } | 126 } |
| 127 | 127 |
| 128 private: | 128 private: |
| 129 static const int NUM_INIT_BLOCK_PTRS = 8; | 129 static const int NUM_INIT_BLOCK_PTRS = 8; |
| 130 | 130 |
| 131 SkSTArray<NUM_INIT_BLOCK_PTRS, void*> fBlocks; | 131 SkSTArray<NUM_INIT_BLOCK_PTRS, void*> fBlocks; |
| 132 size_t fBlockSize; | 132 size_t fBlockSize; |
| 133 size_t fItemSize; | 133 size_t fItemSize; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 155 explicit GrTAllocator(int itemsPerBlock) | 155 explicit GrTAllocator(int itemsPerBlock) |
| 156 : fAllocator(sizeof(T), itemsPerBlock, NULL) {} | 156 : fAllocator(sizeof(T), itemsPerBlock, NULL) {} |
| 157 | 157 |
| 158 /** | 158 /** |
| 159 * Adds an item and returns it. | 159 * Adds an item and returns it. |
| 160 * | 160 * |
| 161 * @return the added item. | 161 * @return the added item. |
| 162 */ | 162 */ |
| 163 T& push_back() { | 163 T& push_back() { |
| 164 void* item = fAllocator.push_back(); | 164 void* item = fAllocator.push_back(); |
| 165 GrAssert(NULL != item); | 165 SkASSERT(NULL != item); |
| 166 SkNEW_PLACEMENT(item, T); | 166 SkNEW_PLACEMENT(item, T); |
| 167 return *(T*)item; | 167 return *(T*)item; |
| 168 } | 168 } |
| 169 | 169 |
| 170 T& push_back(const T& t) { | 170 T& push_back(const T& t) { |
| 171 void* item = fAllocator.push_back(); | 171 void* item = fAllocator.push_back(); |
| 172 GrAssert(NULL != item); | 172 SkASSERT(NULL != item); |
| 173 SkNEW_PLACEMENT_ARGS(item, T, (t)); | 173 SkNEW_PLACEMENT_ARGS(item, T, (t)); |
| 174 return *(T*)item; | 174 return *(T*)item; |
| 175 } | 175 } |
| 176 | 176 |
| 177 /** | 177 /** |
| 178 * removes all added items | 178 * removes all added items |
| 179 */ | 179 */ |
| 180 void reset() { | 180 void reset() { |
| 181 int c = fAllocator.count(); | 181 int c = fAllocator.count(); |
| 182 for (int i = 0; i < c; ++i) { | 182 for (int i = 0; i < c; ++i) { |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 | 241 |
| 242 public: | 242 public: |
| 243 GrSTAllocator() : INHERITED(N, fStorage.get()) { | 243 GrSTAllocator() : INHERITED(N, fStorage.get()) { |
| 244 } | 244 } |
| 245 | 245 |
| 246 private: | 246 private: |
| 247 SkAlignedSTStorage<N, T> fStorage; | 247 SkAlignedSTStorage<N, T> fStorage; |
| 248 }; | 248 }; |
| 249 | 249 |
| 250 #endif | 250 #endif |
| OLD | NEW |