diff options
author | 2015-02-17 17:09:14 -0800 | |
---|---|---|
committer | 2015-02-17 17:09:14 -0800 | |
commit | 30697c9be2ff01e9f33e0934b58877fc3d11f516 (patch) | |
tree | acf985330b52d27cfcc17e442a995096281aace0 /src/objective-c/RxLibrary/transformations | |
parent | f0ee545221414ed28bf3e0fcec7b285762177eeb (diff) |
Imports code of the RX library.
Diffstat (limited to 'src/objective-c/RxLibrary/transformations')
-rw-r--r-- | src/objective-c/RxLibrary/transformations/GRXMappingWriter.h | 7 | ||||
-rw-r--r-- | src/objective-c/RxLibrary/transformations/GRXMappingWriter.m | 30 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/objective-c/RxLibrary/transformations/GRXMappingWriter.h b/src/objective-c/RxLibrary/transformations/GRXMappingWriter.h new file mode 100644 index 0000000000..13640c5bd6 --- /dev/null +++ b/src/objective-c/RxLibrary/transformations/GRXMappingWriter.h @@ -0,0 +1,7 @@ +#import "GRXWriter.h" + +// A "proxy" writer that transforms all the values of its input writer by using a mapping function. +@interface GRXMappingWriter : GRXWriter +- (instancetype)initWithWriter:(id<GRXWriter>)writer map:(id (^)(id value))map + NS_DESIGNATED_INITIALIZER; +@end diff --git a/src/objective-c/RxLibrary/transformations/GRXMappingWriter.m b/src/objective-c/RxLibrary/transformations/GRXMappingWriter.m new file mode 100644 index 0000000000..3aa2a2503a --- /dev/null +++ b/src/objective-c/RxLibrary/transformations/GRXMappingWriter.m @@ -0,0 +1,30 @@ +#import "GRXMappingWriter.h" + +static id (^kIdentity)(id value) = ^id(id value) { + return value; +}; + +@interface GRXWriter () <GRXWriteable> +@end + +@implementation GRXMappingWriter { + id (^_map)(id value); +} + +- (instancetype)initWithWriter:(id<GRXWriter>)writer { + return [self initWithWriter:writer map:nil]; +} + +// Designated initializer +- (instancetype)initWithWriter:(id<GRXWriter>)writer map:(id (^)(id value))map { + if ((self = [super initWithWriter:writer])) { + _map = map ?: kIdentity; + } + return self; +} + +// Override +- (void)didReceiveValue:(id)value { + [super didReceiveValue:_map(value)]; +} +@end |