/* 
 | 
 Copyright (c) 2010-2013, 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 CSSBJson4StreamParser; 
 | 
@class CSSBJson4StreamParserState; 
 | 
  
 | 
typedef enum { 
 | 
    CSSBJson4ParserComplete, 
 | 
    CSSBJson4ParserStopped, 
 | 
    CSSBJson4ParserWaitingForData, 
 | 
    CSSBJson4ParserError, 
 | 
} CSSBJson4ParserStatus; 
 | 
  
 | 
  
 | 
/** 
 | 
 Delegate for interacting directly with the low-level parser 
 | 
  
 | 
 You will most likely find it much more convenient to use the CSCSSBJson4Parser instead. 
 | 
 */ 
 | 
@protocol CSSBJson4StreamParserDelegate < NSObject > 
 | 
  
 | 
/// Called when object start is found 
 | 
- (void)parserFoundObjectStart; 
 | 
  
 | 
/// Called when object key is found 
 | 
- (void)parserFoundObjectKey:(NSString *)key; 
 | 
  
 | 
/// Called when object end is found 
 | 
- (void)parserFoundObjectEnd; 
 | 
  
 | 
/// Called when array start is found 
 | 
- (void)parserFoundArrayStart; 
 | 
  
 | 
/// Called when array end is found 
 | 
- (void)parserFoundArrayEnd; 
 | 
  
 | 
/// Called when a boolean value is found 
 | 
- (void)parserFoundBoolean:(BOOL)x; 
 | 
  
 | 
/// Called when a null value is found 
 | 
- (void)parserFoundNull; 
 | 
  
 | 
/// Called when a number is found 
 | 
- (void)parserFoundNumber:(NSNumber *)num; 
 | 
  
 | 
/// Called when a string is found 
 | 
- (void)parserFoundString:(NSString *)string; 
 | 
  
 | 
/// Called when an error occurs 
 | 
- (void)parserFoundError:(NSError *)err; 
 | 
  
 | 
@optional 
 | 
  
 | 
/// Called to determine whether to allow multiple whitespace-separated documents 
 | 
- (BOOL)parserShouldSupportManyDocuments; 
 | 
  
 | 
@end 
 | 
  
 | 
/** 
 | 
 Low-level Stream parser 
 | 
  
 | 
 You most likely want to use the CSCSSBJson4Parser instead, but if you 
 | 
 really need low-level access to tokens one-by-one you can use this class. 
 | 
 */ 
 | 
@interface CSSBJson4StreamParser : NSObject 
 | 
  
 | 
@property (nonatomic, weak) CSSBJson4StreamParserState *state; // Private 
 | 
@property (nonatomic, readonly, strong) NSMutableArray *stateStack; // Private 
 | 
  
 | 
/** 
 | 
 Delegate to receive messages 
 | 
  
 | 
 The object set here receives a series of messages as the parser breaks down the JSON stream 
 | 
 into valid tokens. 
 | 
  
 | 
 Usually this should be an instance of CSCSSBJson4Parser, but you can 
 | 
 substitute your own implementation of the CSCSSBJson4StreamParserDelegate protocol if you need to. 
 | 
 */ 
 | 
@property (nonatomic, weak) id<CSSBJson4StreamParserDelegate> delegate; 
 | 
  
 | 
/** 
 | 
 Parse some JSON 
 | 
  
 | 
 The JSON is assumed to be UTF8 encoded. This can be a full JSON document, or a part of one. 
 | 
  
 | 
 @param data An NSData object containing the next chunk of JSON 
 | 
  
 | 
 @return 
 | 
 - CSCSSBJson4ParserComplete if a full document was found 
 | 
 - CSCSSBJson4ParserWaitingForData if a partial document was found and more data is required to complete it 
 | 
 - CSCSSBJson4ParserError if an error occurred. 
 | 
  
 | 
 */ 
 | 
- (CSSBJson4ParserStatus)parse:(NSData*)data; 
 | 
  
 | 
/** 
 | 
 Call this to cause parsing to stop. 
 | 
 */ 
 | 
- (void)stop; 
 | 
  
 | 
@end 
 |