File: NSScanner%2BExtensions.m

package info (click to toggle)
pantomime 1.4.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,288 kB
  • sloc: objc: 22,039; makefile: 11; sh: 4
file content (81 lines) | stat: -rw-r--r-- 1,668 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
**  NSScanner+Extensions.m
**
**  Copyright (c) 2005 Ludovic Marcotte
**
**  Author: Ludovic Marcotte <ludovic@Sophos.ca>
**
**  This library is free software; you can redistribute it and/or
**  modify it under the terms of the GNU Lesser General Public
**  License as published by the Free Software Foundation; either
**  version 2.1 of the License, or (at your option) any later version.
**  
**  This library 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 General Public License for more details.
**  
** You should have received a copy of the GNU General Public License
** along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#import <Pantomime/NSScanner+Extensions.h>

#import <Foundation/NSString.h>

#include <ctype.h>

//
//
//
@implementation NSScanner (PantomimeScannerExtensions)

- (BOOL) scanUnsignedInt: (unsigned int *) theValue
{
  NSString *s;
  NSUInteger l1, l2, len;
  unsigned int d, v;

  l1 = l2 = [self scanLocation];
  s = [self string];
  len = [s length];

  while (l1 < len)
    {
      if (isdigit([s characterAtIndex: l1]))
	{
	  l2 = l1;
	  while (l2 < len && isdigit([s characterAtIndex: l2]))
	    {
	      l2++;
	    }
	  break;
	}
      l1++;
    }

  if (l2 <= l1)
    {
      [self setScanLocation: l1+1];
      return NO;
    }

  [self setScanLocation: (l2+1 > len ? len : l2+1)];

  v = 0;
  d = 1;
  l2--;

  while (l2 >= l1)
    {
      v += (([s characterAtIndex: l2]-48)*d);
      d *= 10;
      l2--;
    }

  *theValue = v;

  return YES;
}

@end