gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: some unsigned/NSInteger to NSUInteger changes in -gui


From: Fred Kiefer
Subject: Re: some unsigned/NSInteger to NSUInteger changes in -gui
Date: Mon, 09 Apr 2012 22:37:34 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120312 Thunderbird/11.0

I just checked the code in base and Eric seems to be right here. The type check code in NSUnarchiver (we aren't talking about keyed coding here) has a lot of HACK warnings, but it seems to do what we need here, allow for different integer types to be used interchangeable.

Please go ahead and apply this change.

Fred

On 09.04.2012 21:14, Eric Wasylishen wrote:
Hi,
What's safe is encoding with any supported integer type and decoding with 
another integer type, so you can write a keyed archive with @encode(long) and 
decode it as @encode(int), even if long is 64-bits and int is 32-bits.

In other words it's safe to use @encode(NS[U]Integer). However, if the ivar is 
changed to NSUInteger, I think these:

-      [aCoder encodeValueOfObjCType: "i" at:&_selected_item];
+      [aCoder encodeValueOfObjCType: "I" at:&_selected_item];

-      [aDecoder decodeValueOfObjCType: "i" at:&_selected_item];
+      [aDecoder decodeValueOfObjCType: "I" at:&_selected_item];

should actually use @encode(NSUInteger), not "l". Otherwise the patch looks 
good :-).

Eric

On 2012-04-09, at 11:08 AM, Fred Kiefer wrote:

Most of the patch is ok, but we have too ake a careful look at the coding 
change. This may break backwards and forewards compatibility. Maybe Richard is 
able to explain if this change is save or not.

Fred

On the road

Am 09.04.2012 um 18:02 schrieb "Sebastian Reitenbach"<address@hidden>:

Hi,

while looking at compilation warnings from the latest releases, I found in -gui 
(svn) some parts in NSTableView that would need to be changed. First is easy, 
declare i as NSUInteger (was unsigned before). Further I think _selected_item 
declared in the header as NSInteger also should be a NSUInteger.

is it OK when I commit the patch?

Sebastian

Index: Source/NSTabView.m
===================================================================
--- Source/NSTabView.m    (revision 35049)
+++ Source/NSTabView.m    (working copy)
@@ -123,7 +123,7 @@

- (void) removeTabViewItem: (NSTabViewItem*)tabViewItem
{
-  unsigned i = [_items indexOfObject: tabViewItem];
+  NSUInteger i = [_items indexOfObject: tabViewItem];

  if (i == NSNotFound)
    return;
@@ -202,7 +202,7 @@

- (void) selectNextTabViewItem: (id)sender
{
-  if ((_selected_item != NSNotFound)&&  ((unsigned)(_selected_item + 1)<  
[_items count]))
+  if ((_selected_item != NSNotFound)&&  ((_selected_item + 1)<  [_items 
count]))
    {
      [self selectTabViewItemAtIndex: _selected_item + 1];
    }
@@ -550,7 +550,7 @@
      [aCoder encodeValueOfObjCType: @encode(BOOL) at:&_draws_background];
      [aCoder encodeValueOfObjCType: @encode(BOOL) at:&_truncated_label];
      [aCoder encodeConditionalObject: _delegate];
-      [aCoder encodeValueOfObjCType: "i" at:&_selected_item];
+      [aCoder encodeValueOfObjCType: "I" at:&_selected_item];
    }
}

@@ -631,7 +631,7 @@
      [aDecoder decodeValueOfObjCType: @encode(BOOL) at:&_draws_background];
      [aDecoder decodeValueOfObjCType: @encode(BOOL) at:&_truncated_label];
      _delegate = [aDecoder decodeObject];
-      [aDecoder decodeValueOfObjCType: "i" at:&_selected_item];
+      [aDecoder decodeValueOfObjCType: "I" at:&_selected_item];
      _selected = [_items objectAtIndex: _selected_item];
    }
  return self;
Index: Headers/AppKit/NSTabView.h
===================================================================
--- Headers/AppKit/NSTabView.h    (revision 35049)
+++ Headers/AppKit/NSTabView.h    (working copy)
@@ -54,7 +54,7 @@
  BOOL _draws_background;
  BOOL _truncated_label;
  id _delegate;
-  NSInteger _selected_item;
+  NSUInteger _selected_item;
}
- (void)addTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)insertTabViewItem:(NSTabViewItem *)tabViewItem




reply via email to

[Prev in Thread] Current Thread [Next in Thread]