mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2025-01-15 15:31:08 +00:00
71 lines
1.8 KiB
Mathematica
71 lines
1.8 KiB
Mathematica
|
//
|
||
|
// 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
|