From b0b68590562f7726034fd82d35d19cdb2b388d71 Mon Sep 17 00:00:00 2001 From: Volker Birk Date: Wed, 3 Aug 2016 14:41:22 +0200 Subject: [PATCH] attach and detach C structs --- src/Identity.cc | 24 ++++++++++++++++++++++++ src/Identity.hh | 3 +++ 2 files changed, 27 insertions(+) diff --git a/src/Identity.cc b/src/Identity.cc index 933f918..fb1250f 100644 --- a/src/Identity.cc +++ b/src/Identity.cc @@ -19,11 +19,35 @@ namespace pEp { throw bad_alloc(); } + Identity::Identity(pEp_identity *ident) + : _ident(ident) + { + + } + Identity::~Identity() { free_identity(_ident); } + void Identity::attach(pEp_identity *ident) + { + free_identity(_ident); + _ident = ident; + } + + pEp_identity *Identity::detach() + { + pEp_identity *new_one = new_identity(NULL, NULL, NULL, NULL); + if (!new_one) + throw bad_alloc(); + + pEp_identity *ident = _ident; + _ident = new_one; + + return ident; + } + Identity::operator pEp_identity *() { if (!_ident) diff --git a/src/Identity.hh b/src/Identity.hh index 11c5752..8aff91c 100644 --- a/src/Identity.hh +++ b/src/Identity.hh @@ -16,8 +16,11 @@ namespace pEp { public: Identity(); Identity(const Identity& second); + Identity(pEp_identity *ident); ~Identity(); operator pEp_identity *(); + void attach(pEp_identity *ident); + pEp_identity *detach(); void address(string value) { str_attr(_ident->address, value); } string address() { return str_attr(_ident->address); }