38 lines
1.0 KiB
Objective-C
38 lines
1.0 KiB
Objective-C
#import <Foundation/Foundation.h>
|
|
#import "CollapsingFutures.h"
|
|
#import "Queue.h"
|
|
|
|
typedef void (^LatestValueCallback)(id latestValue);
|
|
|
|
/**
|
|
*
|
|
* An ObservableValue represents an asynchronous stream of values, such as 'latest state of toggle' or 'latest sensor reading'.
|
|
*
|
|
*/
|
|
@interface ObservableValue : NSObject {
|
|
@protected NSMutableSet* callbacks;
|
|
@private Queue* queuedActionsToRun;
|
|
@private bool isRunningActions;
|
|
@protected bool sealed;
|
|
}
|
|
|
|
@property (readonly,atomic) id currentValue;
|
|
|
|
-(void) watchLatestValueOnArbitraryThread:(LatestValueCallback)callback
|
|
untilCancelled:(TOCCancelToken*)untilCancelledToken;
|
|
|
|
-(void) watchLatestValue:(LatestValueCallback)callback
|
|
onThread:(NSThread*)thread
|
|
untilCancelled:(TOCCancelToken*)untilCancelledToken;
|
|
|
|
@end
|
|
|
|
@interface ObservableValueController : ObservableValue
|
|
|
|
+(ObservableValueController *)observableValueControllerWithInitialValue:(id)value;
|
|
-(void)updateValue:(id)value;
|
|
-(void)adjustValue:(id(^)(id))adjustment;
|
|
-(void)sealValue;
|
|
|
|
@end
|