mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2025-01-15 07:21:07 +00:00
71 lines
1.8 KiB
Objective-C
71 lines
1.8 KiB
Objective-C
//
|
|
// Copyright 2012 Square Inc.
|
|
// Portions Copyright (c) 2016-present, Facebook, Inc.
|
|
//
|
|
// All rights reserved.
|
|
//
|
|
// This source code is licensed under the BSD-style license found in the
|
|
// LICENSE file in the root directory of this source tree. An additional grant
|
|
// of patent rights can be found in the PATENTS file in the same directory.
|
|
//
|
|
|
|
#import "SRIOConsumerPool.h"
|
|
|
|
@implementation SRIOConsumerPool {
|
|
NSUInteger _poolSize;
|
|
NSMutableArray<SRIOConsumer *> *_bufferedConsumers;
|
|
}
|
|
|
|
- (instancetype)initWithBufferCapacity:(NSUInteger)poolSize;
|
|
{
|
|
self = [super init];
|
|
if (self) {
|
|
_poolSize = poolSize;
|
|
_bufferedConsumers = [NSMutableArray arrayWithCapacity:poolSize];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (instancetype)init
|
|
{
|
|
return [self initWithBufferCapacity:8];
|
|
}
|
|
|
|
- (SRIOConsumer *)consumerWithScanner:(stream_scanner)scanner
|
|
handler:(data_callback)handler
|
|
bytesNeeded:(size_t)bytesNeeded
|
|
readToCurrentFrame:(BOOL)readToCurrentFrame
|
|
unmaskBytes:(BOOL)unmaskBytes
|
|
{
|
|
SRIOConsumer *consumer = nil;
|
|
if (_bufferedConsumers.count) {
|
|
consumer = [_bufferedConsumers lastObject];
|
|
[_bufferedConsumers removeLastObject];
|
|
} else {
|
|
consumer = [[SRIOConsumer alloc] init];
|
|
}
|
|
|
|
[consumer resetWithScanner:scanner
|
|
handler:handler
|
|
bytesNeeded:bytesNeeded
|
|
readToCurrentFrame:readToCurrentFrame
|
|
unmaskBytes:unmaskBytes];
|
|
|
|
return consumer;
|
|
}
|
|
|
|
- (void)returnConsumer:(SRIOConsumer *)consumer;
|
|
{
|
|
if (_bufferedConsumers.count < _poolSize) {
|
|
[_bufferedConsumers addObject:consumer];
|
|
}
|
|
}
|
|
|
|
-(void)clear
|
|
{
|
|
_poolSize = 0;
|
|
_bufferedConsumers = nil;
|
|
}
|
|
|
|
@end
|