Binder.h File Reference


Detailed Description

Basic functionality of all Binder objects.

#include <support/Value.h>
#include <support/StaticValue.h>
#include <support/SupportDefs.h>
#include <support/Context.h>

Go to the source code of this file.

Classes

class  BBinder
 Standard implementation of IBinder for a Binder object. More...
class  BnInterface
 This is the base implementation for a native (local) IInterface. More...
class  BpAtom
 This is the SAtom protocol implementation for a proxy interface. More...
class  BpInterface
 This is the base implementation for a remote IInterface. More...
struct  effect_action_def

BBinder::HandleEffect() Helpers

These are helper functions for implementing BBinder::HandleEffect().

enum  { B_ACTIONS_SORTED_BY_KEY = 0x00000001 }
 Flags for execute_effect(). More...
enum  { B_NO_ACTION = 0x00000000, B_INVOKE_ACTION = 0x00000001, B_GET_ACTION, B_PUT_ACTION }
 Flags for execute_effect(). More...
status_t _IMPEXP_SUPPORT execute_effect (const sptr< IInterface > &target, const SValue &in, const SValue &inBindings, const SValue &outBindings, SValue *out, const effect_action_def *actions, size_t num_actions, uint32_t flags=0)
 Flags for execute_effect().

Defines

#define B_IMPLEMENT_META_INTERFACE(iname, descriptor, leftmostbase)
 B_IMPLEMENT_META_INTERFACE should be used in almost all cases.
#define B_IMPLEMENT_META_INTERFACE_LOCAL(iname, descriptor, leftmostbase)
 B_IMPLEMENT_META_INTERFACE_LOCAL is used for [local] interfaces.
#define B_IMPLEMENT_META_INTERFACE_NO_INSTANTIATE(iname, descriptor, leftmostbase)
 Use the B_IMPLEMENT_META_INTERFACE macro inside of your IInterface subclass's .cpp file to implement the Binder meta-API.


Define Documentation

#define B_IMPLEMENT_META_INTERFACE iname,
descriptor,
leftmostbase   ) 
 

Value:

static BNS(::palmos::support::) sptr<BNS(::palmos::support::) IInterface>           \
        instantiate_proxy_ ## iname (const BNS(::palmos::support::)sptr<BNS(::palmos::support::) IBinder>& b) {     \
            return static_cast<leftmostbase*>(new Bp ## iname(b));                          \
        }                                                                                   \
        B_IMPLEMENT_META_INTERFACE_NO_INSTANTIATE(iname, descriptor, leftmostbase)          \
B_IMPLEMENT_META_INTERFACE should be used in almost all cases.

#define B_IMPLEMENT_META_INTERFACE_LOCAL iname,
descriptor,
leftmostbase   ) 
 

Value:

static BNS(::palmos::support::) sptr<BNS(::palmos::support::) IInterface>           \
        instantiate_proxy_ ## iname (const BNS(::palmos::support::)sptr<BNS(::palmos::support::) IBinder>& b) {     \
            return NULL;                                                                    \
        }                                                                                   \
        B_IMPLEMENT_META_INTERFACE_NO_INSTANTIATE(iname, descriptor, leftmostbase)          \
B_IMPLEMENT_META_INTERFACE_LOCAL is used for [local] interfaces.

(Local to one process and not callable by other languages.)

#define B_IMPLEMENT_META_INTERFACE_NO_INSTANTIATE iname,
descriptor,
leftmostbase   ) 
 

Use the B_IMPLEMENT_META_INTERFACE macro inside of your IInterface subclass's .cpp file to implement the Binder meta-API.

You will not normally use this, instead letting pidgen generate similar code from an IDL file.

Note that you must have defined your remote proxy class (with an "Bp" prefix) before using the macro. B_IMPLEMENT_META_INTERFACE_NO_INSTANTIATE implements the internals of B_IMPLEMENT_META_INTERFACE, which is what should be used 99% of the time. B_IMPLEMENT_META_INTERFACE_LOCAL can be used for those cases what want binder functionality without the cross-process or multi-language support. (See documentation for the [local] attribute in PIDgen.) The leftmostbase casts are needed when the interface has multiple bases. Rather than have 2 macro versions, we just always insert the extra cast. In the case of single (or no) inheritance, the leftmostbase will be the same as I ## iname, which results in code like this: static_cast<IFoo*>(static_cast<IFoo*> blah))


Enumeration Type Documentation

anonymous enum
 

Flags for execute_effect().

Enumerator:
B_ACTIONS_SORTED_BY_KEY 

anonymous enum
 

Flags for execute_effect().

Enumerator:
B_NO_ACTION 
B_INVOKE_ACTION 
B_GET_ACTION 
B_PUT_ACTION 


Function Documentation

status_t _IMPEXP_SUPPORT execute_effect const sptr< IInterface > &  target,
const SValue in,
const SValue inBindings,
const SValue outBindings,
SValue out,
const effect_action_def actions,
size_t  num_actions,
uint32_t  flags = 0
 

Flags for execute_effect().