00001
00002
00003
00004
00005 #ifndef STORAGE_IREFERABLE_H
00006 #define STORAGE_IREFERABLE_H
00007
00008 #include <support/IInterface.h>
00009 #include <support/Binder.h>
00010 #include <support/Context.h>
00011 #include <support/String.h>
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00030
00031
00032 #if _SUPPORTS_NAMESPACE
00033 namespace palmos {
00034 namespace storage {
00035 using namespace palmos::support;
00036 #endif
00037
00039
00066 class IReferable : public IInterface
00067 {
00068 public:
00069 B_DECLARE_META_INTERFACE(Referable)
00070
00071
00072
00073
00074
00075
00084 virtual SString Reference() const = 0;
00085
00086
00087 status_t LinkReferable(const sptr<IBinder>& to, const SValue& mappings, uint32_t flags = 0)
00088 {
00089 return AsBinder()->Link(to, mappings, flags);
00090 }
00091 status_t UnlinkReferable(const sptr<IBinder>& to, const SValue& mappings, uint32_t flags = 0)
00092 {
00093 return AsBinder()->Unlink(to, mappings, flags);
00094 }
00095
00096 protected:
00097 IReferable() { }
00098 virtual ~IReferable();
00099
00100 private:
00101
00102 IReferable(const IReferable& o);
00103 IReferable& operator=(const IReferable& o);
00104 };
00105
00106
00107
00108
00109 class BnReferable : public IReferable, public BBinder
00110 {
00111 public:
00112 virtual SValue Inspect(const sptr<IBinder>& caller, const SValue& which, uint32_t flags = 0);
00113 virtual sptr<IInterface> InterfaceFor(const SValue& descriptor, uint32_t flags = 0);
00114
00115
00116 public:
00117 void PushReference(const SString& value);
00118
00119 protected:
00120 BnReferable();
00121 BnReferable(const SContext& context);
00122 virtual ~BnReferable();
00123
00124 virtual sptr<IBinder> AsBinderImpl();
00125 virtual sptr<const IBinder> AsBinderImpl() const;
00126
00127
00128 virtual status_t HandleEffect(const SValue &, const SValue &, const SValue &, SValue *);
00129 virtual status_t Transact(uint32_t code, SParcel& data, SParcel* reply, uint32_t flags);
00130
00131 private:
00132 BnReferable(const BnReferable& o);
00133 BnReferable& operator=(const BnReferable& o);
00134 };
00135
00136
00137 #if _SUPPORTS_NAMESPACE
00138 } }
00139 #endif
00140
00141
00142
00143
00144 #endif // STORAGE_IREFERABLE_H
00145