| # Copyright Bruno da Silva de Oliveira 2003. Use, modification and |
| # distribution is subject to the Boost Software License, Version 1.0. |
| # (See accompanying file LICENSE_1_0.txt or copy at |
| # http://www.boost.org/LICENSE_1_0.txt) |
| |
| |
| |
| class Policy(object): |
| 'Represents one of the call policies of boost.python.' |
| |
| def __init__(self): |
| if type(self) is Policy: |
| raise RuntimeError, "Can't create an instance of the class Policy" |
| |
| |
| def Code(self): |
| 'Returns the string corresponding to a instancialization of the policy.' |
| pass |
| |
| |
| def _next(self): |
| if self.next is not None: |
| return ', %s >' % self.next.Code() |
| else: |
| return ' >' |
| |
| |
| def __eq__(self, other): |
| try: |
| return self.Code() == other.Code() |
| except AttributeError: |
| return False |
| |
| |
| |
| class return_internal_reference(Policy): |
| 'Ties the return value to one of the parameters.' |
| |
| def __init__(self, param=1, next=None): |
| ''' |
| param is the position of the parameter, or None for "self". |
| next indicates the next policy, or None. |
| ''' |
| self.param = param |
| self.next=next |
| |
| |
| def Code(self): |
| c = 'return_internal_reference< %i' % self.param |
| c += self._next() |
| return c |
| |
| |
| |
| class with_custodian_and_ward(Policy): |
| 'Ties lifetime of two arguments of a function.' |
| |
| def __init__(self, custodian, ward, next=None): |
| self.custodian = custodian |
| self.ward = ward |
| self.next = next |
| |
| def Code(self): |
| c = 'with_custodian_and_ward< %i, %i' % (self.custodian, self.ward) |
| c += self._next() |
| return c |
| |
| |
| |
| class return_value_policy(Policy): |
| 'Policy to convert return values.' |
| |
| def __init__(self, which, next=None): |
| self.which = which |
| self.next = next |
| |
| |
| def Code(self): |
| c = 'return_value_policy< %s' % self.which |
| c += self._next() |
| return c |
| |
| class return_self(Policy): |
| |
| def Code(self): |
| return 'return_self<>' |
| |
| |
| # values for return_value_policy |
| reference_existing_object = 'reference_existing_object' |
| copy_const_reference = 'copy_const_reference' |
| copy_non_const_reference = 'copy_non_const_reference' |
| manage_new_object = 'manage_new_object' |
| return_opaque_pointer = 'return_opaque_pointer' |
| return_by_value = 'return_by_value' |