aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMStringEncoding.h
diff options
context:
space:
mode:
authorGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2010-01-15 23:01:01 +0000
committerGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2010-01-15 23:01:01 +0000
commit2bb0d1179cb0fe86385eaf087f9a924d1802910f (patch)
treed216356f43945142a277bcd06b7a290e8743e2b7 /Foundation/GTMStringEncoding.h
parentb2fa9805eb63d5daa1dd8fab1edf0c85fb7ebfc0 (diff)
[Author: iwade]
Added GTMStringEncoding which is a generic base 2-128 encoder/decoder with support for custom character maps. R=thomasvl APPROVED=thomasvl DELTA=723 (723 added, 0 deleted, 0 changed)
Diffstat (limited to 'Foundation/GTMStringEncoding.h')
-rw-r--r--Foundation/GTMStringEncoding.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/Foundation/GTMStringEncoding.h b/Foundation/GTMStringEncoding.h
new file mode 100644
index 0000000..b74f2d9
--- /dev/null
+++ b/Foundation/GTMStringEncoding.h
@@ -0,0 +1,88 @@
+//
+// GTMStringEncoding.h
+//
+// Copyright 2010 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy
+// of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+//
+
+#import <Foundation/Foundation.h>
+#import "GTMDefines.h"
+
+// A generic class for arbitrary base-2 to 128 string encoding and decoding.
+@interface GTMStringEncoding : NSObject {
+ @private
+ NSData *charMapData_;
+ char *charMap_;
+ int reverseCharMap_[128];
+ int shift_;
+ int mask_;
+ BOOL doPad_;
+ char paddingChar_;
+ int padLen_;
+}
+
+// Create a new, autoreleased GTMStringEncoding object with a standard encoding.
++ (id)binaryStringEncoding;
++ (id)hexStringEncoding;
++ (id)rfc4648Base32StringEncoding;
++ (id)rfc4648Base32HexStringEncoding;
++ (id)crockfordBase32StringEncoding;
++ (id)rfc4648Base64StringEncoding;
++ (id)rfc4648Base64WebsafeStringEncoding;
+
+// Create a new, autoreleased GTMStringEncoding object with the given string,
+// as described below.
++ (id)stringEncodingWithString:(NSString *)string;
+
+// Initialize a new GTMStringEncoding object with the string.
+//
+// The length of the string must be a power of 2, at least 2 and at most 128.
+// Only 7-bit ASCII characters are permitted in the string.
+//
+// These characters are the canonical set emitted during encoding.
+// If the characters have alternatives (e.g. case, easily transposed) then use
+// addDecodeSynonyms: to configure them.
+- (id)initWithString:(NSString *)string;
+
+// Add decoding synonyms as specified in the synonyms argument.
+//
+// It should be a sequence of one previously reverse mapped character,
+// followed by one or more non-reverse mapped character synonyms.
+// Only 7-bit ASCII characters are permitted in the string.
+//
+// e.g. If a GTMStringEncoder object has already been initialised with a set
+// of characters excluding I, L and O (to avoid confusion with digits) and you
+// want to accept them as digits you can call addDecodeSynonyms:@"0oO1iIlL".
+- (void)addDecodeSynonyms:(NSString *)synonyms;
+
+// A sequence of characters to ignore if they occur during encoding.
+// Only 7-bit ASCII characters are permitted in the string.
+- (void)ignoreCharacters:(NSString *)chars;
+
+// Indicates whether padding is performed during encoding.
+- (BOOL)doPad;
+- (void)setDoPad:(BOOL)doPad;
+
+// Sets the padding character to use during encoding.
+- (void)setPaddingChar:(char)c;
+
+// Encode a raw binary buffer to a 7-bit ASCII string.
+- (NSString *)encode:(NSData *)data;
+- (NSString *)encodeString:(NSString *)string;
+
+// Decode a 7-bit ASCII string to a raw binary buffer.
+- (NSData *)decode:(NSString *)string;
+- (NSString *)stringByDecoding:(NSString *)string;
+
+@end