You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libpEpDatatypes/src/stringlist.cc

80 lines
1.9 KiB
C++

#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<>
const char* stringlist_t::* const ListWrapper<stringlist_t*, const char*>::Value
= const_cast<const char* stringlist_t::*>(&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