aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objective-c/RxLibrary/transformations
diff options
context:
space:
mode:
authorGravatar Jorge Canizales <jcanizales@google.com>2015-02-17 17:09:14 -0800
committerGravatar Jorge Canizales <jcanizales@google.com>2015-02-17 17:09:14 -0800
commit30697c9be2ff01e9f33e0934b58877fc3d11f516 (patch)
treeacf985330b52d27cfcc17e442a995096281aace0 /src/objective-c/RxLibrary/transformations
parentf0ee545221414ed28bf3e0fcec7b285762177eeb (diff)
Imports code of the RX library.
Diffstat (limited to 'src/objective-c/RxLibrary/transformations')
-rw-r--r--src/objective-c/RxLibrary/transformations/GRXMappingWriter.h7
-rw-r--r--src/objective-c/RxLibrary/transformations/GRXMappingWriter.m30
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