zbar-windows/iphone/ZBarSymbol.m
Mauro Carvalho Chehab cd5b63e5b5 Update to the very latest version of zbar
zbar was using a 2010 snapshot of its hg tree.
Take a new snapshot to get zbar's improvements.

[Imported from Fedora 26 tree]
2017-03-25 23:04:38 -03:00

198 lines
4.5 KiB
Objective-C

//------------------------------------------------------------------------
// 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