react-native-bt-device/ios/RNBTDevice/Device/DGMG/Algorithm/ReferenceManager.m

99 lines
2.4 KiB
Mathematica
Raw Normal View History

//
// ReferenceManager.m
// react-native-bt-device
//
// Created by Ran Zhao on 9/2/24.
//
#import "ReferenceManager.h"
@implementation ReferenceManager
- (instancetype)init {
self = [super init];
if (self) {
self.refList = [NSMutableArray array];
self.curReference = nil;
self.mCurrentReference = nil;
self.kCount = -1;
}
return self;
}
- (Reference *)getRefValue {
return self.curReference;
}
- (void)addCurrentReference:(double)value index:(NSInteger)index {
self.mCurrentReference = [[Reference alloc] initWithValue:value index:index];
}
- (void)addReference:(double)value time:(NSDate *)time {
Reference *ref = [[Reference alloc] initWithValue:value time:time];
if (![self isExist:ref]) {
[self.refList addObject:ref];
}
[self.refList sortUsingComparator:^NSComparisonResult(Reference *lhs, Reference *rhs) {
return [lhs.time compare:rhs.time];
}];
}
- (BOOL)isExist:(Reference *)bgRef {
for (Reference *bg in self.refList) {
if ([bg.time timeIntervalSince1970] == [bgRef.time timeIntervalSince1970]) {
return YES;
}
}
return NO;
}
- (BOOL)isCalK {
return self.kCount == 0;
}
- (BOOL)isWaitCalK {
return self.kCount == 2 || self.kCount == 1;
}
- (Reference *)findReferenceByDate:(NSDate *)curTime {
for (Reference *d in self.refList) {
double interval = ([curTime timeIntervalSince1970] - [d.time timeIntervalSince1970]) / 60.0;
if (interval <= 0.0) {
self.kCount -= 1;
return nil;
}
if (interval <= 3.0) {
self.kCount = 2;
self.curReference = d;
return d;
}
}
self.kCount -= 1;
return nil;
}
- (Reference *)findReferenceByIndex:(NSInteger)index {
double interval = (index - self.mCurrentReference.index) * 3;
if (interval < 0.0) {
self.kCount -= 1;
return nil;
}
if (interval <= 3.0) {
self.kCount = 2;
self.curReference = self.mCurrentReference;
return self.mCurrentReference;
}
self.kCount -= 1;
return nil;
}
+ (NSDate *)stringToDate:(NSString *)dateStr {
NSString *formatStr = @"yyyy/MM/dd HH:mm:ss";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:formatStr];
NSDate *date = [formatter dateFromString:dateStr];
return date;
}
@end