hook_* proof-of-concept working for type c_byte
authorRyan Jendoubi <ryan.jendoubi@gmail.com>
Tue, 12 Oct 2010 23:21:27 +0000 (00:21 +0100)
committerRyan Jendoubi <ryan.jendoubi@gmail.com>
Tue, 12 Oct 2010 23:21:27 +0000 (00:21 +0100)
commit3c895e3b5cdce6dfe94c4211f28168aacf757366
tree06ea0f824ee56093d3eed8f8701a0d1980faef09
parentc64d07471c77a56686f4ac454ad5dce389a9bdb1
hook_* proof-of-concept working for type c_byte

. All $_types now have sizecodes and packcodes, since these can
  be different from their typecodes. Since our range of Types
  don't reflect only those in C or Python's Ctypes, typecodes
  are really only for use within Ctypes identify them.

. All $_types need an anonymous sub under the hash key 'hook_in'.
  This takes one argument, the value passed to be STOREd, and
  performs whatever validations necessary. It returns a list of
  two scalars: an indicator of invalidity (must be undef if arg
  was valid) and a 'sanitized' form of the arg - basically, do
  whatever can be done to make the input valid for the type.
  This will be STOREd instead of the original input. The original
  input is stored in $object->{_input} though, for use later by
  hook_out if needs be.

. $_types /can/ have a hook_out, but it's not compulsory. This
  can take two arguments: the STOREd $val, and the $object itself.
  The latter can be used to ascertain information which might
  affect whether anything special needs to be done to the value
  before output (e.g., whether the {_input} was numeric or string).

. Type::Simple objects now have size(), sizecode(), packcode() and
  validate() methods (can you believe they didn't implement size()
  before?? @_@). The validate() is the same as used by STORE. It
  can be used if you happen to need to know if certain input is
  invalid for a given type without squashing its current contents.

Now all the rest of the types need their hooks and test written.
Onward!

modified:   lib/Ctypes/Type.pm
modified:   lib/Ctypes/Type/Simple.pm
modified:   t/Simple_byte.t
lib/Ctypes/Type.pm
lib/Ctypes/Type/Simple.pm
t/Simple_byte.t