Forum: Ruby [RubyCocoa] C pointers, and documentation

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Christophe M. (Guest)
on 2008-12-17 20:21
hi,

how are C pointers handled on the rubycocoa side?
for example a method like the following:

- (BOOL)validateValue:(id *)ioValue
               forKey:(NSString *)key
                error:(NSError **)outError

is there a standard way of handling it? is this
kind of thing documented anywhere?

thanks for any tips,
_c
Brian M. (Guest)
on 2008-12-18 16:23
(Received via mailing list)
On Dec 17, 2008, at 12:13 PM, Christophe M. wrote:
>               error:(NSError **)outError
>
> is there a standard way of handling it? is this
> kind of thing documented anywhere?

There's a class called ObjcPtr that's used to translate to/from such
arguments. Google around for that word and you'll find sketchy
documentation. Here's an example of stuffing a value into such an
"out" parameter:

def getObjectValue_forString_errorDescription(objptr, s, errdesc)
  case s.to_ruby.downcase
    when 'yes': objptr.assign(true)
    when 'no': objptr.assign(false)
    else return false
  end
  true
end

To pull an object out of a pointer-to-object, you do this:

  def observeValueForKeyPath_ofObject_change_context(
             keyPath, object, change, rawContext)
    context = rawContext.cast_as('@')
    puts "Context: #{context.inspect}"
  end

The '@' identifies the thing-being-pointed-to as an object. There are
other symbols to identify things like raw machine integers, etc. I
forget where you find them, but they're not RubyCocoa-specific, so
they're somewhere in Apple documentation.

For non-objects there are also methods like "int_at", "bool_at",
"bool", and "int". I haven't had reason to use them yet, so I don't
know the details.

-----
Brian M., independent consultant
Mostly on agile methods with a testing slant
www.exampler.com, www.exampler.com/blog, www.twitter.com/marick
This topic is locked and can not be replied to.