
4 changed files with 91 additions and 6 deletions
@ -0,0 +1,78 @@ |
|||||
|
#include "types.hh" |
||||
|
|
||||
|
#include <pEp/status_to_string.hh> // from libpEpAdapter |
||||
|
#include <pEp/stringlist.h> |
||||
|
|
||||
|
#include <string> |
||||
|
|
||||
|
namespace pEp |
||||
|
{ |
||||
|
template<> |
||||
|
void Wrapper<::stringlist_t*>::_free(::stringlist_t* sl) |
||||
|
{ |
||||
|
::free_stringlist(sl); |
||||
|
} |
||||
|
|
||||
|
template<> |
||||
|
char* stringlist_t::* const ListWrapper<stringlist_t*, char*>::Value = &stringlist_t::value; |
||||
|
|
||||
|
template<> |
||||
|
int StringList::size() const |
||||
|
{ |
||||
|
return stringlist_length(value); |
||||
|
} |
||||
|
|
||||
|
// faster than .size()==0 because it's not necessary to iterate throgh the whole list
|
||||
|
template<> |
||||
|
bool StringList::empty() const |
||||
|
{ |
||||
|
return !(value && value->value); |
||||
|
} |
||||
|
|
||||
|
template<> |
||||
|
void StringList::erase( const StringList::iterator& it) |
||||
|
{ |
||||
|
if(it.value && it.value->value) |
||||
|
{ |
||||
|
value = stringlist_delete(value, it.value->value); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
template<> |
||||
|
void StringList::clear() |
||||
|
{ |
||||
|
free_stringlist(value); |
||||
|
value = nullptr; |
||||
|
} |
||||
|
|
||||
|
template<> |
||||
|
void StringList::push_back(const char*&& s) |
||||
|
{ |
||||
|
auto last = stringlist_add(value, s); |
||||
|
if(value==nullptr) |
||||
|
value = last; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
template<> |
||||
|
ListWrapper<::stringlist_t*, const char*>::ListWrapper(const std::initializer_list<const char*>& il) |
||||
|
: StringList{} |
||||
|
{ |
||||
|
::stringlist_t* last = nullptr; |
||||
|
for(const char* s : il) |
||||
|
{ |
||||
|
last = stringlist_add(last, s); |
||||
|
if(last==nullptr) |
||||
|
{ |
||||
|
throw std::runtime_error("Cannot create StringPairList from {}: Out Of Memory."); |
||||
|
} |
||||
|
if(value==nullptr) |
||||
|
value = last; // save the head of linked list.
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
////////////////
|
||||
|
|
||||
|
template class ListWrapper<::stringlist_t*, const char*>; |
||||
|
|
||||
|
} // end of namespace pEp
|
Loading…
Reference in new issue