http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamParser.m ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamParser.m b/sdks/ios/UGAPI/SBJson/SBJsonStreamParser.m deleted file mode 100755 index 134e34a..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamParser.m +++ /dev/null @@ -1,255 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamParser.h" -#import "SBJsonTokeniser.h" -#import "SBJsonStreamParserState.h" -#import <limits.h> - -@implementation SBJsonStreamParser - -@synthesize supportMultipleDocuments; -@synthesize error; -@synthesize delegate; -@synthesize maxDepth; -@synthesize state; -@synthesize stateStack; - -#pragma mark Housekeeping - -- (id)init { - self = [super init]; - if (self) { - maxDepth = 32u; - stateStack = [[NSMutableArray alloc] initWithCapacity:maxDepth]; - state = [SBJsonStreamParserStateStart sharedInstance]; - tokeniser = [[SBJsonTokeniser alloc] init]; - } - return self; -} - -- (void)dealloc { - self.state = nil; -} - -#pragma mark Methods - -- (NSString*)tokenName:(sbjson_token_t)token { - switch (token) { - case sbjson_token_array_start: - return @"start of array"; - break; - - case sbjson_token_array_end: - return @"end of array"; - break; - - case sbjson_token_number: - return @"number"; - break; - - case sbjson_token_string: - return @"string"; - break; - - case sbjson_token_true: - case sbjson_token_false: - return @"boolean"; - break; - - case sbjson_token_null: - return @"null"; - break; - - case sbjson_token_keyval_separator: - return @"key-value separator"; - break; - - case sbjson_token_separator: - return @"value separator"; - break; - - case sbjson_token_object_start: - return @"start of object"; - break; - - case sbjson_token_object_end: - return @"end of object"; - break; - - case sbjson_token_eof: - case sbjson_token_error: - break; - } - NSAssert(NO, @"Should not get here"); - return @"<aaiiie!>"; -} - -- (void)maxDepthError { - self.error = [NSString stringWithFormat:@"Input depth exceeds max depth of %lu", maxDepth]; - self.state = [SBJsonStreamParserStateError sharedInstance]; -} - -- (void)handleObjectStart { - if (stateStack.count >= maxDepth) { - [self maxDepthError]; - return; - } - - [delegate parserFoundObjectStart:self]; - [stateStack addObject:state]; - self.state = [SBJsonStreamParserStateObjectStart sharedInstance]; -} - -- (void)handleObjectEnd: (sbjson_token_t) tok { - self.state = [stateStack lastObject]; - [stateStack removeLastObject]; - [state parser:self shouldTransitionTo:tok]; - [delegate parserFoundObjectEnd:self]; -} - -- (void)handleArrayStart { - if (stateStack.count >= maxDepth) { - [self maxDepthError]; - return; - } - - [delegate parserFoundArrayStart:self]; - [stateStack addObject:state]; - self.state = [SBJsonStreamParserStateArrayStart sharedInstance]; -} - -- (void)handleArrayEnd: (sbjson_token_t) tok { - self.state = [stateStack lastObject]; - [stateStack removeLastObject]; - [state parser:self shouldTransitionTo:tok]; - [delegate parserFoundArrayEnd:self]; -} - -- (void) handleTokenNotExpectedHere: (sbjson_token_t) tok { - NSString *tokenName = [self tokenName:tok]; - NSString *stateName = [state name]; - - self.error = [NSString stringWithFormat:@"Token '%@' not expected %@", tokenName, stateName]; - self.state = [SBJsonStreamParserStateError sharedInstance]; -} - -- (SBJsonStreamParserStatus)parse:(NSData *)data_ { - @autoreleasepool { - [tokeniser appendData:data_]; - - for (;;) { - - if ([state isError]) - return SBJsonStreamParserError; - - NSObject *token; - sbjson_token_t tok = [tokeniser getToken:&token]; - switch (tok) { - case sbjson_token_eof: - return [state parserShouldReturn:self]; - break; - - case sbjson_token_error: - self.state = [SBJsonStreamParserStateError sharedInstance]; - self.error = tokeniser.error; - return SBJsonStreamParserError; - break; - - default: - - if (![state parser:self shouldAcceptToken:tok]) { - [self handleTokenNotExpectedHere: tok]; - return SBJsonStreamParserError; - } - - switch (tok) { - case sbjson_token_object_start: - [self handleObjectStart]; - break; - - case sbjson_token_object_end: - [self handleObjectEnd: tok]; - break; - - case sbjson_token_array_start: - [self handleArrayStart]; - break; - - case sbjson_token_array_end: - [self handleArrayEnd: tok]; - break; - - case sbjson_token_separator: - case sbjson_token_keyval_separator: - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_true: - [delegate parser:self foundBoolean:YES]; - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_false: - [delegate parser:self foundBoolean:NO]; - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_null: - [delegate parserFoundNull:self]; - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_number: - [delegate parser:self foundNumber:(NSNumber*)token]; - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_string: - if ([state needKey]) - [delegate parser:self foundObjectKey:(NSString*)token]; - else - [delegate parser:self foundString:(NSString*)token]; - [state parser:self shouldTransitionTo:tok]; - break; - - default: - break; - } - break; - } - } - return SBJsonStreamParserComplete; - } -} - -@end
http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAccumulator.h ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAccumulator.h b/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAccumulator.h deleted file mode 100755 index 141d6ee..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAccumulator.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Foundation/Foundation.h> -#import "SBJsonStreamParserAdapter.h" - -@interface SBJsonStreamParserAccumulator : NSObject <SBJsonStreamParserAdapterDelegate> - -@property (copy) id value; - -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAccumulator.m ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAccumulator.m b/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAccumulator.m deleted file mode 100755 index 1d39ceb..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAccumulator.m +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamParserAccumulator.h" - -@implementation SBJsonStreamParserAccumulator - -@synthesize value; - - -#pragma mark SBJsonStreamParserAdapterDelegate - -- (void)parser:(SBJsonStreamParser*)parser foundArray:(NSArray *)array { - value = array; -} - -- (void)parser:(SBJsonStreamParser*)parser foundObject:(NSDictionary *)dict { - value = dict; -} - -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAdapter.h ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAdapter.h b/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAdapter.h deleted file mode 100755 index 942bc01..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAdapter.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Foundation/Foundation.h> -#import "SBJsonStreamParser.h" - -typedef enum { - SBJsonStreamParserAdapterNone, - SBJsonStreamParserAdapterArray, - SBJsonStreamParserAdapterObject, -} SBJsonStreamParserAdapterType; - -/** - @brief Delegate for getting objects & arrays from the stream parser adapter - - @see The TweetStream example project. - */ -@protocol SBJsonStreamParserAdapterDelegate - -/** - @brief Called if a JSON array is found - - This method is called if a JSON array is found. - - */ -- (void)parser:(SBJsonStreamParser*)parser foundArray:(NSArray*)array; - -/** - @brief Called when a JSON object is found - - This method is called if a JSON object is found. - */ -- (void)parser:(SBJsonStreamParser*)parser foundObject:(NSDictionary*)dict; - -@end - -/** - @brief SBJsonStreamParserDelegate protocol adapter - - Rather than implementing the SBJsonStreamParserDelegate protocol yourself you will - most likely find it much more convenient to use an instance of this class and - implement the SBJsonStreamParserAdapterDelegate protocol instead. - - The default behaviour is that the delegate only receives one call from - either the -parser:foundArray: or -parser:foundObject: method when the - document is fully parsed. However, if your inputs contains multiple JSON - documents and you set the parser's -supportMultipleDocuments property to YES - you will get one call for each full method. - - @code - SBJsonStreamParserAdapter *adapter = [[[SBJsonStreamParserAdapter alloc] init] autorelease]; - adapter.delegate = self; - - SBJsonStreamParser *parser = [[[SBJsonStreamParser alloc] init] autorelease]; - parser.delegate = adapter; - parser.supportMultipleDocuments = YES; - - // Note that this input contains multiple top-level JSON documents - NSData *json = [@"[]{}[]{}" dataWithEncoding:NSUTF8StringEncoding]; - [parser parse:data]; - @endcode - - In the above example @p self will have the following sequence of methods called on it: - - @li -parser:foundArray: - @li -parser:foundObject: - @li -parser:foundArray: - @li -parser:foundObject: - - Often you won't have control over the input you're parsing, so can't make use of - this feature. But, all is not lost: this class will let you get the same effect by - allowing you to skip one or more of the outer enclosing objects. Thus, the next - example results in the same sequence of -parser:foundArray: / -parser:foundObject: - being called on your delegate. - - @code - SBJsonStreamParserAdapter *adapter = [[[SBJsonStreamParserAdapter alloc] init] autorelease]; - adapter.delegate = self; - adapter.levelsToSkip = 1; - - SBJsonStreamParser *parser = [[[SBJsonStreamParser alloc] init] autorelease]; - parser.delegate = adapter; - - // Note that this input contains A SINGLE top-level document - NSData *json = [@"[[],{},[],{}]" dataWithEncoding:NSUTF8StringEncoding]; - [parser parse:data]; - @endcode - -*/ -@interface SBJsonStreamParserAdapter : NSObject <SBJsonStreamParserDelegate> { -@private - NSUInteger depth; - NSMutableArray *array; - NSMutableDictionary *dict; - NSMutableArray *keyStack; - NSMutableArray *stack; - - SBJsonStreamParserAdapterType currentType; -} - -/** - @brief How many levels to skip - - This is useful for parsing huge JSON documents, or documents coming in over a very slow link. - - If you set this to N it will skip the outer N levels and call the -parser:foundArray: - or -parser:foundObject: methods for each of the inner objects, as appropriate. - - @see The StreamParserIntegrationTest.m file for examples -*/ -@property NSUInteger levelsToSkip; - -/** - @brief Your delegate object - Set this to the object you want to receive the SBJsonStreamParserAdapterDelegate messages. - */ -@property (unsafe_unretained) id<SBJsonStreamParserAdapterDelegate> delegate; - -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAdapter.m ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAdapter.m b/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAdapter.m deleted file mode 100755 index e77b534..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserAdapter.m +++ /dev/null @@ -1,164 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamParserAdapter.h" - -@interface SBJsonStreamParserAdapter () - -- (void)pop; -- (void)parser:(SBJsonStreamParser*)parser found:(id)obj; - -@end - - - -@implementation SBJsonStreamParserAdapter - -@synthesize delegate; -@synthesize levelsToSkip; - -#pragma mark Housekeeping - -- (id)init { - self = [super init]; - if (self) { - keyStack = [[NSMutableArray alloc] initWithCapacity:32]; - stack = [[NSMutableArray alloc] initWithCapacity:32]; - - currentType = SBJsonStreamParserAdapterNone; - } - return self; -} - - -#pragma mark Private methods - -- (void)pop { - [stack removeLastObject]; - array = nil; - dict = nil; - currentType = SBJsonStreamParserAdapterNone; - - id value = [stack lastObject]; - - if ([value isKindOfClass:[NSArray class]]) { - array = value; - currentType = SBJsonStreamParserAdapterArray; - } else if ([value isKindOfClass:[NSDictionary class]]) { - dict = value; - currentType = SBJsonStreamParserAdapterObject; - } -} - -- (void)parser:(SBJsonStreamParser*)parser found:(id)obj { - NSParameterAssert(obj); - - switch (currentType) { - case SBJsonStreamParserAdapterArray: - [array addObject:obj]; - break; - - case SBJsonStreamParserAdapterObject: - NSParameterAssert(keyStack.count); - [dict setObject:obj forKey:[keyStack lastObject]]; - [keyStack removeLastObject]; - break; - - case SBJsonStreamParserAdapterNone: - if ([obj isKindOfClass:[NSArray class]]) { - [delegate parser:parser foundArray:obj]; - } else { - [delegate parser:parser foundObject:obj]; - } - break; - - default: - break; - } -} - - -#pragma mark Delegate methods - -- (void)parserFoundObjectStart:(SBJsonStreamParser*)parser { - if (++depth > self.levelsToSkip) { - dict = [NSMutableDictionary new]; - [stack addObject:dict]; - currentType = SBJsonStreamParserAdapterObject; - } -} - -- (void)parser:(SBJsonStreamParser*)parser foundObjectKey:(NSString*)key_ { - [keyStack addObject:key_]; -} - -- (void)parserFoundObjectEnd:(SBJsonStreamParser*)parser { - if (depth-- > self.levelsToSkip) { - id value = dict; - [self pop]; - [self parser:parser found:value]; - } -} - -- (void)parserFoundArrayStart:(SBJsonStreamParser*)parser { - if (++depth > self.levelsToSkip) { - array = [NSMutableArray new]; - [stack addObject:array]; - currentType = SBJsonStreamParserAdapterArray; - } -} - -- (void)parserFoundArrayEnd:(SBJsonStreamParser*)parser { - if (depth-- > self.levelsToSkip) { - id value = array; - [self pop]; - [self parser:parser found:value]; - } -} - -- (void)parser:(SBJsonStreamParser*)parser foundBoolean:(BOOL)x { - [self parser:parser found:[NSNumber numberWithBool:x]]; -} - -- (void)parserFoundNull:(SBJsonStreamParser*)parser { - [self parser:parser found:[NSNull null]]; -} - -- (void)parser:(SBJsonStreamParser*)parser foundNumber:(NSNumber*)num { - [self parser:parser found:num]; -} - -- (void)parser:(SBJsonStreamParser*)parser foundString:(NSString*)string { - [self parser:parser found:string]; -} - -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamParserState.h ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserState.h b/sdks/ios/UGAPI/SBJson/SBJsonStreamParserState.h deleted file mode 100755 index ea893cb..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserState.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Foundation/Foundation.h> - -#import "SBJsonTokeniser.h" -#import "SBJsonStreamParser.h" - -@interface SBJsonStreamParserState : NSObject -+ (id)sharedInstance; - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token; -- (SBJsonStreamParserStatus)parserShouldReturn:(SBJsonStreamParser*)parser; -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok; -- (BOOL)needKey; -- (BOOL)isError; - -- (NSString*)name; - -@end - -@interface SBJsonStreamParserStateStart : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateComplete : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateError : SBJsonStreamParserState -@end - - -@interface SBJsonStreamParserStateObjectStart : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateObjectGotKey : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateObjectSeparator : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateObjectGotValue : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateObjectNeedKey : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateArrayStart : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateArrayGotValue : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateArrayNeedValue : SBJsonStreamParserState -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamParserState.m ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserState.m b/sdks/ios/UGAPI/SBJson/SBJsonStreamParserState.m deleted file mode 100755 index a24c6f6..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamParserState.m +++ /dev/null @@ -1,355 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamParserState.h" -#import "SBJsonStreamParser.h" - -#define SINGLETON \ -+ (id)sharedInstance { \ - static id state; \ - if (!state) state = [[self alloc] init]; \ - return state; \ -} - -@implementation SBJsonStreamParserState - -+ (id)sharedInstance { return nil; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return NO; -} - -- (SBJsonStreamParserStatus)parserShouldReturn:(SBJsonStreamParser*)parser { - return SBJsonStreamParserWaitingForData; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok {} - -- (BOOL)needKey { - return NO; -} - -- (NSString*)name { - return @"<aaiie!>"; -} - -- (BOOL)isError { - return NO; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateStart - -SINGLETON - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return token == sbjson_token_array_start || token == sbjson_token_object_start; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - - SBJsonStreamParserState *state = nil; - switch (tok) { - case sbjson_token_array_start: - state = [SBJsonStreamParserStateArrayStart sharedInstance]; - break; - - case sbjson_token_object_start: - state = [SBJsonStreamParserStateObjectStart sharedInstance]; - break; - - case sbjson_token_array_end: - case sbjson_token_object_end: - if (parser.supportMultipleDocuments) - state = parser.state; - else - state = [SBJsonStreamParserStateComplete sharedInstance]; - break; - - case sbjson_token_eof: - return; - - default: - state = [SBJsonStreamParserStateError sharedInstance]; - break; - } - - - parser.state = state; -} - -- (NSString*)name { return @"before outer-most array or object"; } - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateComplete - -SINGLETON - -- (NSString*)name { return @"after outer-most array or object"; } - -- (SBJsonStreamParserStatus)parserShouldReturn:(SBJsonStreamParser*)parser { - return SBJsonStreamParserComplete; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateError - -SINGLETON - -- (NSString*)name { return @"in error"; } - -- (SBJsonStreamParserStatus)parserShouldReturn:(SBJsonStreamParser*)parser { - return SBJsonStreamParserError; -} - -- (BOOL)isError { - return YES; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectStart - -SINGLETON - -- (NSString*)name { return @"at beginning of object"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_object_end: - case sbjson_token_string: - return YES; - break; - default: - return NO; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectGotKey sharedInstance]; -} - -- (BOOL)needKey { - return YES; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectGotKey - -SINGLETON - -- (NSString*)name { return @"after object key"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return token == sbjson_token_keyval_separator; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectSeparator sharedInstance]; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectSeparator - -SINGLETON - -- (NSString*)name { return @"as object value"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_object_start: - case sbjson_token_array_start: - case sbjson_token_true: - case sbjson_token_false: - case sbjson_token_null: - case sbjson_token_number: - case sbjson_token_string: - return YES; - break; - - default: - return NO; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectGotValue sharedInstance]; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectGotValue - -SINGLETON - -- (NSString*)name { return @"after object value"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_object_end: - case sbjson_token_separator: - return YES; - break; - default: - return NO; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectNeedKey sharedInstance]; -} - - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectNeedKey - -SINGLETON - -- (NSString*)name { return @"in place of object key"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return sbjson_token_string == token; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectGotKey sharedInstance]; -} - -- (BOOL)needKey { - return YES; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateArrayStart - -SINGLETON - -- (NSString*)name { return @"at array start"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_object_end: - case sbjson_token_keyval_separator: - case sbjson_token_separator: - return NO; - break; - - default: - return YES; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateArrayGotValue sharedInstance]; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateArrayGotValue - -SINGLETON - -- (NSString*)name { return @"after array value"; } - - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return token == sbjson_token_array_end || token == sbjson_token_separator; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - if (tok == sbjson_token_separator) - parser.state = [SBJsonStreamParserStateArrayNeedValue sharedInstance]; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateArrayNeedValue - -SINGLETON - -- (NSString*)name { return @"as array value"; } - - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_array_end: - case sbjson_token_keyval_separator: - case sbjson_token_object_end: - case sbjson_token_separator: - return NO; - break; - - default: - return YES; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateArrayGotValue sharedInstance]; -} - -@end - http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamWriter.h ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriter.h b/sdks/ios/UGAPI/SBJson/SBJsonStreamWriter.h deleted file mode 100755 index a46b7a1..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriter.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Foundation/Foundation.h> - -/// Enable JSON writing for non-native objects -@interface NSObject (SBProxyForJson) - -/** - @brief Allows generation of JSON for otherwise unsupported classes. - - If you have a custom class that you want to create a JSON representation - for you can implement this method in your class. It should return a - representation of your object defined in terms of objects that can be - translated into JSON. For example, a Person object might implement it like this: - - @code - - (id)proxyForJson { - return [NSDictionary dictionaryWithObjectsAndKeys: - name, @"name", - phone, @"phone", - email, @"email", - nil]; - } - @endcode - - */ -- (id)proxyForJson; - -@end - -@class SBJsonStreamWriter; - -@protocol SBJsonStreamWriterDelegate - -- (void)writer:(SBJsonStreamWriter*)writer appendBytes:(const void *)bytes length:(NSUInteger)length; - -@end - -@class SBJsonStreamWriterState; - -/** - @brief The Stream Writer class. - - Accepts a stream of messages and writes JSON of these to its delegate object. - - This class provides a range of high-, mid- and low-level methods. You can mix - and match calls to these. For example, you may want to call -writeArrayOpen - to start an array and then repeatedly call -writeObject: with various objects - before finishing off with a -writeArrayClose call. - - @see @ref json2objc - - */ - -@interface SBJsonStreamWriter : NSObject { - NSMutableDictionary *cache; -} - -@property (nonatomic, unsafe_unretained) SBJsonStreamWriterState *state; // Internal -@property (nonatomic, readonly, strong) NSMutableArray *stateStack; // Internal - -/** - @brief delegate to receive JSON output - Delegate that will receive messages with output. - */ -@property (unsafe_unretained) id<SBJsonStreamWriterDelegate> delegate; - -/** - @brief The maximum recursing depth. - - Defaults to 512. If the input is nested deeper than this the input will be deemed to be - malicious and the parser returns nil, signalling an error. ("Nested too deep".) You can - turn off this security feature by setting the maxDepth value to 0. - */ -@property NSUInteger maxDepth; - -/** - @brief Whether we are generating human-readable (multiline) JSON. - - Set whether or not to generate human-readable JSON. The default is NO, which produces - JSON without any whitespace between tokens. If set to YES, generates human-readable - JSON with linebreaks after each array value and dictionary key/value pair, indented two - spaces per nesting level. - */ -@property BOOL humanReadable; - -/** - @brief Whether or not to sort the dictionary keys in the output. - - If this is set to YES, the dictionary keys in the JSON output will be in sorted order. - (This is useful if you need to compare two structures, for example.) The default is NO. - */ -@property BOOL sortKeys; - -/** - @brief An optional comparator to be used if sortKeys is YES. - - If this is nil, sorting will be done via @selector(compare:). - */ -@property (copy) NSComparator sortKeysComparator; - -/// Contains the error description after an error has occured. -@property (copy) NSString *error; - -/** - Write an NSDictionary to the JSON stream. - @return YES if successful, or NO on failure - */ -- (BOOL)writeObject:(NSDictionary*)dict; - -/** - Write an NSArray to the JSON stream. - @return YES if successful, or NO on failure - */ -- (BOOL)writeArray:(NSArray *)array; - -/** - Start writing an Object to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeObjectOpen; - -/** - Close the current object being written - @return YES if successful, or NO on failure -*/ -- (BOOL)writeObjectClose; - -/** Start writing an Array to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeArrayOpen; - -/** Close the current Array being written - @return YES if successful, or NO on failure -*/ -- (BOOL)writeArrayClose; - -/** Write a null to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeNull; - -/** Write a boolean to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeBool:(BOOL)x; - -/** Write a Number to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeNumber:(NSNumber*)n; - -/** Write a String to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeString:(NSString*)s; - -@end - -@interface SBJsonStreamWriter (Private) -- (BOOL)writeValue:(id)v; -- (void)appendBytes:(const void *)bytes length:(NSUInteger)length; -@end - http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamWriter.m ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriter.m b/sdks/ios/UGAPI/SBJson/SBJsonStreamWriter.m deleted file mode 100755 index 1cdd26d..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriter.m +++ /dev/null @@ -1,374 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamWriter.h" -#import "SBJsonStreamWriterState.h" - -static NSNumber *kNotANumber; -static NSNumber *kTrue; -static NSNumber *kFalse; -static NSNumber *kPositiveInfinity; -static NSNumber *kNegativeInfinity; - - -@implementation SBJsonStreamWriter - -@synthesize error; -@synthesize maxDepth; -@synthesize state; -@synthesize stateStack; -@synthesize humanReadable; -@synthesize sortKeys; -@synthesize sortKeysComparator; - -+ (void)initialize { - kNotANumber = [NSDecimalNumber notANumber]; - kPositiveInfinity = [NSNumber numberWithDouble:+INFINITY]; - kNegativeInfinity = [NSNumber numberWithDouble:-INFINITY]; - kTrue = [NSNumber numberWithBool:YES]; - kFalse = [NSNumber numberWithBool:NO]; -} - -#pragma mark Housekeeping - -@synthesize delegate; - -- (id)init { - self = [super init]; - if (self) { - maxDepth = 32u; - stateStack = [[NSMutableArray alloc] initWithCapacity:maxDepth]; - state = [SBJsonStreamWriterStateStart sharedInstance]; - cache = [[NSMutableDictionary alloc] initWithCapacity:32]; - } - return self; -} - -- (void)dealloc { - self.state = nil; -} - -#pragma mark Methods - -- (void)appendBytes:(const void *)bytes length:(NSUInteger)length { - [delegate writer:self appendBytes:bytes length:length]; -} - -- (BOOL)writeObject:(NSDictionary *)dict { - if (![self writeObjectOpen]) - return NO; - - NSArray *keys = [dict allKeys]; - - if (sortKeys) { - if (sortKeysComparator) { - keys = [keys sortedArrayWithOptions:NSSortStable usingComparator:sortKeysComparator]; - } - else{ - keys = [keys sortedArrayUsingSelector:@selector(compare:)]; - } - } - - for (id k in keys) { - if (![k isKindOfClass:[NSString class]]) { - self.error = [NSString stringWithFormat:@"JSON object key must be string: %@", k]; - return NO; - } - - if (![self writeString:k]) - return NO; - if (![self writeValue:[dict objectForKey:k]]) - return NO; - } - - return [self writeObjectClose]; -} - -- (BOOL)writeArray:(NSArray*)array { - if (![self writeArrayOpen]) - return NO; - for (id v in array) - if (![self writeValue:v]) - return NO; - return [self writeArrayClose]; -} - - -- (BOOL)writeObjectOpen { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable && stateStack.count) [state appendWhitespace:self]; - - [stateStack addObject:state]; - self.state = [SBJsonStreamWriterStateObjectStart sharedInstance]; - - if (maxDepth && stateStack.count > maxDepth) { - self.error = @"Nested too deep"; - return NO; - } - - [delegate writer:self appendBytes:"{" length:1]; - return YES; -} - -- (BOOL)writeObjectClose { - if ([state isInvalidState:self]) return NO; - - SBJsonStreamWriterState *prev = state; - - self.state = [stateStack lastObject]; - [stateStack removeLastObject]; - - if (humanReadable) [prev appendWhitespace:self]; - [delegate writer:self appendBytes:"}" length:1]; - - [state transitionState:self]; - return YES; -} - -- (BOOL)writeArrayOpen { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable && stateStack.count) [state appendWhitespace:self]; - - [stateStack addObject:state]; - self.state = [SBJsonStreamWriterStateArrayStart sharedInstance]; - - if (maxDepth && stateStack.count > maxDepth) { - self.error = @"Nested too deep"; - return NO; - } - - [delegate writer:self appendBytes:"[" length:1]; - return YES; -} - -- (BOOL)writeArrayClose { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - - SBJsonStreamWriterState *prev = state; - - self.state = [stateStack lastObject]; - [stateStack removeLastObject]; - - if (humanReadable) [prev appendWhitespace:self]; - [delegate writer:self appendBytes:"]" length:1]; - - [state transitionState:self]; - return YES; -} - -- (BOOL)writeNull { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable) [state appendWhitespace:self]; - - [delegate writer:self appendBytes:"null" length:4]; - [state transitionState:self]; - return YES; -} - -- (BOOL)writeBool:(BOOL)x { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable) [state appendWhitespace:self]; - - if (x) - [delegate writer:self appendBytes:"true" length:4]; - else - [delegate writer:self appendBytes:"false" length:5]; - [state transitionState:self]; - return YES; -} - - -- (BOOL)writeValue:(id)o { - if ([o isKindOfClass:[NSDictionary class]]) { - return [self writeObject:o]; - - } else if ([o isKindOfClass:[NSArray class]]) { - return [self writeArray:o]; - - } else if ([o isKindOfClass:[NSString class]]) { - [self writeString:o]; - return YES; - - } else if ([o isKindOfClass:[NSNumber class]]) { - return [self writeNumber:o]; - - } else if ([o isKindOfClass:[NSNull class]]) { - return [self writeNull]; - - } else if ([o respondsToSelector:@selector(proxyForJson)]) { - return [self writeValue:[o proxyForJson]]; - - } - - self.error = [NSString stringWithFormat:@"JSON serialisation not supported for %@", [o class]]; - return NO; -} - -static const char *strForChar(int c) { - switch (c) { - case 0: return "\\u0000"; break; - case 1: return "\\u0001"; break; - case 2: return "\\u0002"; break; - case 3: return "\\u0003"; break; - case 4: return "\\u0004"; break; - case 5: return "\\u0005"; break; - case 6: return "\\u0006"; break; - case 7: return "\\u0007"; break; - case 8: return "\\b"; break; - case 9: return "\\t"; break; - case 10: return "\\n"; break; - case 11: return "\\u000b"; break; - case 12: return "\\f"; break; - case 13: return "\\r"; break; - case 14: return "\\u000e"; break; - case 15: return "\\u000f"; break; - case 16: return "\\u0010"; break; - case 17: return "\\u0011"; break; - case 18: return "\\u0012"; break; - case 19: return "\\u0013"; break; - case 20: return "\\u0014"; break; - case 21: return "\\u0015"; break; - case 22: return "\\u0016"; break; - case 23: return "\\u0017"; break; - case 24: return "\\u0018"; break; - case 25: return "\\u0019"; break; - case 26: return "\\u001a"; break; - case 27: return "\\u001b"; break; - case 28: return "\\u001c"; break; - case 29: return "\\u001d"; break; - case 30: return "\\u001e"; break; - case 31: return "\\u001f"; break; - case 34: return "\\\""; break; - case 92: return "\\\\"; break; - } - NSLog(@"FUTFUTFUT: -->'%c'<---", c); - return "FUTFUTFUT"; -} - -- (BOOL)writeString:(NSString*)string { - if ([state isInvalidState:self]) return NO; - [state appendSeparator:self]; - if (humanReadable) [state appendWhitespace:self]; - - NSMutableData *buf = [cache objectForKey:string]; - if (!buf) { - - NSUInteger len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - const char *utf8 = [string UTF8String]; - NSUInteger written = 0, i = 0; - - buf = [NSMutableData dataWithCapacity:(NSUInteger)(len * 1.1f)]; - [buf appendBytes:"\"" length:1]; - - for (i = 0; i < len; i++) { - int c = utf8[i]; - BOOL isControlChar = c >= 0 && c < 32; - if (isControlChar || c == '"' || c == '\\') { - if (i - written) - [buf appendBytes:utf8 + written length:i - written]; - written = i + 1; - - const char *t = strForChar(c); - [buf appendBytes:t length:strlen(t)]; - } - } - - if (i - written) - [buf appendBytes:utf8 + written length:i - written]; - - [buf appendBytes:"\"" length:1]; - [cache setObject:buf forKey:string]; - } - - [delegate writer:self appendBytes:[buf bytes] length:[buf length]]; - [state transitionState:self]; - return YES; -} - -- (BOOL)writeNumber:(NSNumber*)number { - if (number == kTrue || number == kFalse) - return [self writeBool:[number boolValue]]; - - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable) [state appendWhitespace:self]; - - if ([kPositiveInfinity isEqualToNumber:number]) { - self.error = @"+Infinity is not a valid number in JSON"; - return NO; - - } else if ([kNegativeInfinity isEqualToNumber:number]) { - self.error = @"-Infinity is not a valid number in JSON"; - return NO; - - } else if ([kNotANumber isEqualToNumber:number]) { - self.error = @"NaN is not a valid number in JSON"; - return NO; - } - - const char *objcType = [number objCType]; - char num[128]; - size_t len; - - switch (objcType[0]) { - case 'c': case 'i': case 's': case 'l': case 'q': - len = snprintf(num, sizeof num, "%lld", [number longLongValue]); - break; - case 'C': case 'I': case 'S': case 'L': case 'Q': - len = snprintf(num, sizeof num, "%llu", [number unsignedLongLongValue]); - break; - case 'f': case 'd': default: - if ([number isKindOfClass:[NSDecimalNumber class]]) { - char const *utf8 = [[number stringValue] UTF8String]; - [delegate writer:self appendBytes:utf8 length: strlen(utf8)]; - [state transitionState:self]; - return YES; - } - len = snprintf(num, sizeof num, "%.17g", [number doubleValue]); - break; - } - [delegate writer:self appendBytes:num length: len]; - [state transitionState:self]; - return YES; -} - -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterAccumulator.h ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterAccumulator.h b/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterAccumulator.h deleted file mode 100755 index b12d0d5..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterAccumulator.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamWriter.h" - -@interface SBJsonStreamWriterAccumulator : NSObject <SBJsonStreamWriterDelegate> - -@property (readonly, copy) NSMutableData* data; - -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterAccumulator.m ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterAccumulator.m b/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterAccumulator.m deleted file mode 100755 index be65190..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterAccumulator.m +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamWriterAccumulator.h" - - -@implementation SBJsonStreamWriterAccumulator - -@synthesize data; - -- (id)init { - self = [super init]; - if (self) { - data = [[NSMutableData alloc] initWithCapacity:8096u]; - } - return self; -} - - -#pragma mark SBJsonStreamWriterDelegate - -- (void)writer:(SBJsonStreamWriter *)writer appendBytes:(const void *)bytes length:(NSUInteger)length { - [data appendBytes:bytes length:length]; -} - -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterState.h ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterState.h b/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterState.h deleted file mode 100755 index 90d442a..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterState.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Foundation/Foundation.h> - -@class SBJsonStreamWriter; - -@interface SBJsonStreamWriterState : NSObject -+ (id)sharedInstance; -- (BOOL)isInvalidState:(SBJsonStreamWriter*)writer; -- (void)appendSeparator:(SBJsonStreamWriter*)writer; -- (BOOL)expectingKey:(SBJsonStreamWriter*)writer; -- (void)transitionState:(SBJsonStreamWriter*)writer; -- (void)appendWhitespace:(SBJsonStreamWriter*)writer; -@end - -@interface SBJsonStreamWriterStateObjectStart : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateObjectKey : SBJsonStreamWriterStateObjectStart -@end - -@interface SBJsonStreamWriterStateObjectValue : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateArrayStart : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateArrayValue : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateStart : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateComplete : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateError : SBJsonStreamWriterState -@end - http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterState.m ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterState.m b/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterState.m deleted file mode 100755 index 9f04cac..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonStreamWriterState.m +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamWriterState.h" -#import "SBJsonStreamWriter.h" - -#define SINGLETON \ -+ (id)sharedInstance { \ - static id state; \ - if (!state) state = [[self alloc] init]; \ - return state; \ -} - - -@implementation SBJsonStreamWriterState -+ (id)sharedInstance { return nil; } -- (BOOL)isInvalidState:(SBJsonStreamWriter*)writer { return NO; } -- (void)appendSeparator:(SBJsonStreamWriter*)writer {} -- (BOOL)expectingKey:(SBJsonStreamWriter*)writer { return NO; } -- (void)transitionState:(SBJsonStreamWriter *)writer {} -- (void)appendWhitespace:(SBJsonStreamWriter*)writer { - [writer appendBytes:"\n" length:1]; - for (NSUInteger i = 0; i < writer.stateStack.count; i++) - [writer appendBytes:" " length:2]; -} -@end - -@implementation SBJsonStreamWriterStateObjectStart - -SINGLETON - -- (void)transitionState:(SBJsonStreamWriter *)writer { - writer.state = [SBJsonStreamWriterStateObjectValue sharedInstance]; -} -- (BOOL)expectingKey:(SBJsonStreamWriter *)writer { - writer.error = @"JSON object key must be string"; - return YES; -} -@end - -@implementation SBJsonStreamWriterStateObjectKey - -SINGLETON - -- (void)appendSeparator:(SBJsonStreamWriter *)writer { - [writer appendBytes:"," length:1]; -} -@end - -@implementation SBJsonStreamWriterStateObjectValue - -SINGLETON - -- (void)appendSeparator:(SBJsonStreamWriter *)writer { - [writer appendBytes:":" length:1]; -} -- (void)transitionState:(SBJsonStreamWriter *)writer { - writer.state = [SBJsonStreamWriterStateObjectKey sharedInstance]; -} -- (void)appendWhitespace:(SBJsonStreamWriter *)writer { - [writer appendBytes:" " length:1]; -} -@end - -@implementation SBJsonStreamWriterStateArrayStart - -SINGLETON - -- (void)transitionState:(SBJsonStreamWriter *)writer { - writer.state = [SBJsonStreamWriterStateArrayValue sharedInstance]; -} -@end - -@implementation SBJsonStreamWriterStateArrayValue - -SINGLETON - -- (void)appendSeparator:(SBJsonStreamWriter *)writer { - [writer appendBytes:"," length:1]; -} -@end - -@implementation SBJsonStreamWriterStateStart - -SINGLETON - - -- (void)transitionState:(SBJsonStreamWriter *)writer { - writer.state = [SBJsonStreamWriterStateComplete sharedInstance]; -} -- (void)appendSeparator:(SBJsonStreamWriter *)writer { -} -@end - -@implementation SBJsonStreamWriterStateComplete - -SINGLETON - -- (BOOL)isInvalidState:(SBJsonStreamWriter*)writer { - writer.error = @"Stream is closed"; - return YES; -} -@end - -@implementation SBJsonStreamWriterStateError - -SINGLETON - -@end - http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonTokeniser.h ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonTokeniser.h b/sdks/ios/UGAPI/SBJson/SBJsonTokeniser.h deleted file mode 100755 index e484a94..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonTokeniser.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Foundation/Foundation.h> - -typedef enum { - sbjson_token_error = -1, - sbjson_token_eof, - - sbjson_token_array_start, - sbjson_token_array_end, - - sbjson_token_object_start, - sbjson_token_object_end, - - sbjson_token_separator, - sbjson_token_keyval_separator, - - sbjson_token_number, - sbjson_token_string, - sbjson_token_true, - sbjson_token_false, - sbjson_token_null, - -} sbjson_token_t; - -@class SBJsonUTF8Stream; - -@interface SBJsonTokeniser : NSObject - -@property (strong) SBJsonUTF8Stream *stream; -@property (copy) NSString *error; - -- (void)appendData:(NSData*)data_; - -- (sbjson_token_t)getToken:(NSObject**)token; - -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonTokeniser.m ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonTokeniser.m b/sdks/ios/UGAPI/SBJson/SBJsonTokeniser.m deleted file mode 100755 index 75d3268..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonTokeniser.m +++ /dev/null @@ -1,453 +0,0 @@ -/* - Copyright (c) 2010-2011, Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonTokeniser.h" -#import "SBJsonUTF8Stream.h" - -#define SBStringIsIllegalSurrogateHighCharacter(character) (((character) >= 0xD800UL) && ((character) <= 0xDFFFUL)) -#define SBStringIsSurrogateLowCharacter(character) ((character >= 0xDC00UL) && (character <= 0xDFFFUL)) -#define SBStringIsSurrogateHighCharacter(character) ((character >= 0xD800UL) && (character <= 0xDBFFUL)) - -@implementation SBJsonTokeniser - -@synthesize error = _error; -@synthesize stream = _stream; - -- (id)init { - self = [super init]; - if (self) { - _stream = [[SBJsonUTF8Stream alloc] init]; - - } - - return self; -} - - -- (void)appendData:(NSData *)data_ { - [_stream appendData:data_]; -} - - -- (sbjson_token_t)match:(const char *)pattern length:(NSUInteger)len retval:(sbjson_token_t)token { - if (![_stream haveRemainingCharacters:len]) - return sbjson_token_eof; - - if ([_stream skipCharacters:pattern length:len]) - return token; - - self.error = [NSString stringWithFormat:@"Expected '%s' after initial '%.1s'", pattern, pattern]; - return sbjson_token_error; -} - -- (BOOL)decodeEscape:(unichar)ch into:(unichar*)decoded { - switch (ch) { - case '\\': - case '/': - case '"': - *decoded = ch; - break; - - case 'b': - *decoded = '\b'; - break; - - case 'n': - *decoded = '\n'; - break; - - case 'r': - *decoded = '\r'; - break; - - case 't': - *decoded = '\t'; - break; - - case 'f': - *decoded = '\f'; - break; - - default: - self.error = @"Illegal escape character"; - return NO; - break; - } - return YES; -} - -- (BOOL)decodeHexQuad:(unichar*)quad { - unichar c, tmp = 0; - - for (int i = 0; i < 4; i++) { - (void)[_stream getNextUnichar:&c]; - tmp *= 16; - switch (c) { - case '0' ... '9': - tmp += c - '0'; - break; - - case 'a' ... 'f': - tmp += 10 + c - 'a'; - break; - - case 'A' ... 'F': - tmp += 10 + c - 'A'; - break; - - default: - return NO; - } - } - *quad = tmp; - return YES; -} - -- (sbjson_token_t)getStringToken:(NSObject**)token { - NSMutableString *acc = nil; - - for (;;) { - [_stream skip]; - - unichar ch; - { - NSMutableString *string = nil; - - if (![_stream getStringFragment:&string]) - return sbjson_token_eof; - - if (!string) { - self.error = @"Broken Unicode encoding"; - return sbjson_token_error; - } - - if (![_stream getUnichar:&ch]) - return sbjson_token_eof; - - if (acc) { - [acc appendString:string]; - - } else if (ch == '"') { - *token = [string copy]; - [_stream skip]; - return sbjson_token_string; - - } else { - acc = [string mutableCopy]; - } - } - - - switch (ch) { - case 0 ... 0x1F: - self.error = [NSString stringWithFormat:@"Unescaped control character [0x%0.2X]", (int)ch]; - return sbjson_token_error; - break; - - case '"': - *token = acc; - [_stream skip]; - return sbjson_token_string; - break; - - case '\\': - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - if (ch == 'u') { - if (![_stream haveRemainingCharacters:5]) - return sbjson_token_eof; - - unichar hi; - if (![self decodeHexQuad:&hi]) { - self.error = @"Invalid hex quad"; - return sbjson_token_error; - } - - if (SBStringIsSurrogateHighCharacter(hi)) { - unichar lo; - - if (![_stream haveRemainingCharacters:6]) - return sbjson_token_eof; - - (void)[_stream getNextUnichar:&ch]; - (void)[_stream getNextUnichar:&lo]; - if (ch != '\\' || lo != 'u' || ![self decodeHexQuad:&lo]) { - self.error = @"Missing low character in surrogate pair"; - return sbjson_token_error; - } - - if (!SBStringIsSurrogateLowCharacter(lo)) { - self.error = @"Invalid low character in surrogate pair"; - return sbjson_token_error; - } - - [acc appendFormat:@"%C%C", hi, lo]; - } else if (SBStringIsIllegalSurrogateHighCharacter(hi)) { - self.error = @"Invalid high character in surrogate pair"; - return sbjson_token_error; - } else { - [acc appendFormat:@"%C", hi]; - } - - - } else { - unichar decoded; - if (![self decodeEscape:ch into:&decoded]) - return sbjson_token_error; - [acc appendFormat:@"%C", decoded]; - } - - break; - - default: { - self.error = [NSString stringWithFormat:@"Invalid UTF-8: '%x'", (int)ch]; - return sbjson_token_error; - break; - } - } - } - return sbjson_token_eof; -} - -- (sbjson_token_t)getNumberToken:(NSObject**)token { - - NSUInteger numberStart = _stream.index; - NSCharacterSet *digits = [NSCharacterSet decimalDigitCharacterSet]; - - unichar ch; - if (![_stream getUnichar:&ch]) - return sbjson_token_eof; - - BOOL isNegative = NO; - if (ch == '-') { - isNegative = YES; - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - unsigned long long mantissa = 0; - int mantissa_length = 0; - - if (ch == '0') { - mantissa_length++; - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - if ([digits characterIsMember:ch]) { - self.error = @"Leading zero is illegal in number"; - return sbjson_token_error; - } - } - - while ([digits characterIsMember:ch]) { - mantissa *= 10; - mantissa += (ch - '0'); - mantissa_length++; - - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - short exponent = 0; - BOOL isFloat = NO; - - if (ch == '.') { - isFloat = YES; - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - while ([digits characterIsMember:ch]) { - mantissa *= 10; - mantissa += (ch - '0'); - mantissa_length++; - exponent--; - - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - if (!exponent) { - self.error = @"No digits after decimal point"; - return sbjson_token_error; - } - } - - BOOL hasExponent = NO; - if (ch == 'e' || ch == 'E') { - hasExponent = YES; - - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - BOOL expIsNegative = NO; - if (ch == '-') { - expIsNegative = YES; - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - } else if (ch == '+') { - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - short explicit_exponent = 0; - short explicit_exponent_length = 0; - while ([digits characterIsMember:ch]) { - explicit_exponent *= 10; - explicit_exponent += (ch - '0'); - explicit_exponent_length++; - - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - if (explicit_exponent_length == 0) { - self.error = @"No digits in exponent"; - return sbjson_token_error; - } - - if (expIsNegative) - exponent -= explicit_exponent; - else - exponent += explicit_exponent; - } - - if (!mantissa_length && isNegative) { - self.error = @"No digits after initial minus"; - return sbjson_token_error; - - } else if (mantissa_length >= 19) { - - NSString *number = [_stream stringWithRange:NSMakeRange(numberStart, _stream.index - numberStart)]; - *token = [NSDecimalNumber decimalNumberWithString:number]; - - } else if (!isFloat && !hasExponent) { - if (!isNegative) - *token = [NSNumber numberWithUnsignedLongLong:mantissa]; - else - *token = [NSNumber numberWithLongLong:-mantissa]; - } else { - *token = [NSDecimalNumber decimalNumberWithMantissa:mantissa - exponent:exponent - isNegative:isNegative]; - } - - return sbjson_token_number; -} - -- (sbjson_token_t)getToken:(NSObject **)token { - - [_stream skipWhitespace]; - - unichar ch; - if (![_stream getUnichar:&ch]) - return sbjson_token_eof; - - NSUInteger oldIndexLocation = _stream.index; - sbjson_token_t tok; - - switch (ch) { - case '[': - tok = sbjson_token_array_start; - [_stream skip]; - break; - - case ']': - tok = sbjson_token_array_end; - [_stream skip]; - break; - - case '{': - tok = sbjson_token_object_start; - [_stream skip]; - break; - - case ':': - tok = sbjson_token_keyval_separator; - [_stream skip]; - break; - - case '}': - tok = sbjson_token_object_end; - [_stream skip]; - break; - - case ',': - tok = sbjson_token_separator; - [_stream skip]; - break; - - case 'n': - tok = [self match:"null" length:4 retval:sbjson_token_null]; - break; - - case 't': - tok = [self match:"true" length:4 retval:sbjson_token_true]; - break; - - case 'f': - tok = [self match:"false" length:5 retval:sbjson_token_false]; - break; - - case '"': - tok = [self getStringToken:token]; - break; - - case '0' ... '9': - case '-': - tok = [self getNumberToken:token]; - break; - - case '+': - self.error = @"Leading + is illegal in number"; - tok = sbjson_token_error; - break; - - default: - self.error = [NSString stringWithFormat:@"Illegal start of token [%c]", ch]; - tok = sbjson_token_error; - break; - } - - if (tok == sbjson_token_eof) { - // We ran out of bytes in the middle of a token. - // We don't know how to restart in mid-flight, so - // rewind to the start of the token for next attempt. - // Hopefully we'll have more data then. - _stream.index = oldIndexLocation; - } - - return tok; -} - - -@end http://git-wip-us.apache.org/repos/asf/usergrid/blob/867060fa/sdks/ios/UGAPI/SBJson/SBJsonUTF8Stream.h ---------------------------------------------------------------------- diff --git a/sdks/ios/UGAPI/SBJson/SBJsonUTF8Stream.h b/sdks/ios/UGAPI/SBJson/SBJsonUTF8Stream.h deleted file mode 100755 index a26f032..0000000 --- a/sdks/ios/UGAPI/SBJson/SBJsonUTF8Stream.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (c) 2011, Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Foundation/Foundation.h> - - -@interface SBJsonUTF8Stream : NSObject { -@private - const char *_bytes; - NSMutableData *_data; - NSUInteger _length; -} - -@property (assign) NSUInteger index; - -- (void)appendData:(NSData*)data_; - -- (BOOL)haveRemainingCharacters:(NSUInteger)chars; - -- (void)skip; -- (void)skipWhitespace; -- (BOOL)skipCharacters:(const char *)chars length:(NSUInteger)len; - -- (BOOL)getUnichar:(unichar*)ch; -- (BOOL)getNextUnichar:(unichar*)ch; -- (BOOL)getStringFragment:(NSString**)string; - -- (NSString*)stringWithRange:(NSRange)range; - -@end
