summaryrefslogtreecommitdiffstats
path: root/iphone/ZBarSymbol.m
diff options
context:
space:
mode:
Diffstat (limited to 'iphone/ZBarSymbol.m')
-rw-r--r--iphone/ZBarSymbol.m197
1 files changed, 197 insertions, 0 deletions
diff --git a/iphone/ZBarSymbol.m b/iphone/ZBarSymbol.m
new file mode 100644
index 0000000..3131205
--- /dev/null
+++ b/iphone/ZBarSymbol.m
@@ -0,0 +1,197 @@
+//------------------------------------------------------------------------
+// Copyright 2009-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
+//
+// This file is part of the ZBar Bar Code Reader.
+//
+// The ZBar Bar Code Reader is free software; you can redistribute it
+// and/or modify it under the terms of the GNU Lesser Public License as
+// published by the Free Software Foundation; either version 2.1 of
+// the License, or (at your option) any later version.
+//
+// The ZBar Bar Code Reader is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser Public License for more details.
+//
+// You should have received a copy of the GNU Lesser Public License
+// along with the ZBar Bar Code Reader; if not, write to the Free
+// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+// Boston, MA 02110-1301 USA
+//
+// http://sourceforge.net/projects/zbar
+//------------------------------------------------------------------------
+
+#import <ZBarSDK/ZBarSymbol.h>
+
+@implementation ZBarSymbol
+
+@dynamic type, typeName, configMask, modifierMask, data, quality, count,
+ zbarSymbol;
+
++ (NSString*) nameForType: (zbar_symbol_type_t) type
+{
+ return([NSString stringWithUTF8String: zbar_get_symbol_name(type)]);
+}
+
+- (id) initWithSymbol: (const zbar_symbol_t*) sym
+{
+ if(self = [super init]) {
+ symbol = sym;
+ zbar_symbol_ref(sym, 1);
+ }
+ return(self);
+}
+
+- (void) dealloc
+{
+ if(symbol) {
+ zbar_symbol_ref(symbol, -1);
+ symbol = NULL;
+ }
+ [super dealloc];
+}
+
+- (zbar_symbol_type_t) type
+{
+ return(zbar_symbol_get_type(symbol));
+}
+
+- (NSString*) typeName
+{
+ return([[self class] nameForType: zbar_symbol_get_type(symbol)]);
+}
+
+- (NSUInteger) configMask
+{
+ return(zbar_symbol_get_configs(symbol));
+}
+
+- (NSUInteger) modifierMask
+{
+ return(zbar_symbol_get_modifiers(symbol));
+}
+
+- (NSString*) data
+{
+ return([NSString stringWithUTF8String: zbar_symbol_get_data(symbol)]);
+}
+
+- (int) quality
+{
+ return(zbar_symbol_get_quality(symbol));
+}
+
+- (int) count
+{
+ return(zbar_symbol_get_count(symbol));
+}
+
+- (zbar_orientation_t) orientation
+{
+ return(zbar_symbol_get_orientation(symbol));
+}
+
+- (const zbar_symbol_t*) zbarSymbol
+{
+ return(symbol);
+}
+
+- (ZBarSymbolSet*) components
+{
+ return([[[ZBarSymbolSet alloc]
+ initWithSymbolSet: zbar_symbol_get_components(symbol)]
+ autorelease]);
+}
+
+- (CGRect) bounds
+{
+ int n = zbar_symbol_get_loc_size(symbol);
+ if(!n)
+ return(CGRectNull);
+
+ int xmin = INT_MAX, xmax = INT_MIN;
+ int ymin = INT_MAX, ymax = INT_MIN;
+
+ for(int i = 0; i < n; i++) {
+ int t = zbar_symbol_get_loc_x(symbol, i);
+ if(xmin > t) xmin = t;
+ if(xmax < t) xmax = t;
+ t = zbar_symbol_get_loc_y(symbol, i);
+ if(ymin > t) ymin = t;
+ if(ymax < t) ymax = t;
+ }
+ return(CGRectMake(xmin, ymin, xmax - xmin, ymax - ymin));
+}
+
+@end
+
+
+@implementation ZBarSymbolSet
+
+@dynamic count, zbarSymbolSet;
+@synthesize filterSymbols;
+
+- (id) initWithSymbolSet: (const zbar_symbol_set_t*) s
+{
+ if(!s) {
+ [self release];
+ return(nil);
+ }
+ if(self = [super init]) {
+ set = s;
+ zbar_symbol_set_ref(s, 1);
+ filterSymbols = YES;
+ }
+ return(self);
+}
+
+- (void) dealloc
+{
+ if(set) {
+ zbar_symbol_set_ref(set, -1);
+ set = NULL;
+ }
+ [super dealloc];
+}
+
+- (int) count
+{
+ if(filterSymbols)
+ return(zbar_symbol_set_get_size(set));
+
+ int n = 0;
+ const zbar_symbol_t *sym = zbar_symbol_set_first_unfiltered(set);
+ for(; sym; sym = zbar_symbol_next(sym))
+ n++;
+ return(n);
+}
+
+- (const zbar_symbol_set_t*) zbarSymbolSet
+{
+ return(set);
+}
+
+- (NSUInteger) countByEnumeratingWithState: (NSFastEnumerationState*) state
+ objects: (id*) stackbuf
+ count: (NSUInteger) len
+{
+ const zbar_symbol_t *sym = (void*)state->state; // FIXME
+ if(sym)
+ sym = zbar_symbol_next(sym);
+ else if(set && filterSymbols)
+ sym = zbar_symbol_set_first_symbol(set);
+ else if(set)
+ sym = zbar_symbol_set_first_unfiltered(set);
+
+ if(sym)
+ *stackbuf = [[[ZBarSymbol alloc]
+ initWithSymbol: sym]
+ autorelease];
+
+ state->state = (unsigned long)sym; // FIXME
+ state->itemsPtr = stackbuf;
+ state->mutationsPtr = (void*)self;
+ return((sym) ? 1 : 0);
+}
+
+@end