eina_stringshare: add slice_get()

This commit is contained in:
Gustavo Sverzut Barbieri 2016-08-12 18:54:26 -03:00
parent 9062bbd8e0
commit 77faebde67
3 changed files with 25 additions and 0 deletions

View File

@ -116,6 +116,23 @@ eina_stringshare_replace_length(Eina_Stringshare **p_str, const char *news, unsi
return EINA_TRUE;
}
/**
* Return the read-only memory slice for this stringshare.
*
* @param str the stringshare to get a slice.
* @return A read-only slice.
*/
static inline Eina_Slice
eina_stringshare_slice_get(Eina_Stringshare *str)
{
Eina_Slice ret;
ret.len = eina_stringshare_strlen(str);
ret.mem = str;
return ret;
}
/**
* @}
*/

View File

@ -54,6 +54,7 @@
#include <stdarg.h>
#include "eina_types.h"
#include "eina_slice.h"
/**
* @page eina_stringshare_example_01_page
@ -335,6 +336,8 @@ EAPI void eina_stringshare_dump(void);
static inline Eina_Bool eina_stringshare_replace(Eina_Stringshare **p_str, const char *news) EINA_ARG_NONNULL(1);
static inline Eina_Bool eina_stringshare_replace_length(Eina_Stringshare **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1);
static inline Eina_Slice eina_stringshare_slice_get(Eina_Stringshare *str) EINA_PURE EINA_WARN_UNUSED_RESULT;
#include "eina_inline_stringshare.x"
/**

View File

@ -36,6 +36,7 @@ START_TEST(eina_stringshare_simple)
{
const char *t0;
const char *t1;
Eina_Slice slice;
eina_init();
@ -53,6 +54,10 @@ START_TEST(eina_stringshare_simple)
fail_if(t0 == NULL);
fail_if((int)strlen(TEST0) != eina_stringshare_strlen(t0));
slice = eina_stringshare_slice_get(t0);
fail_if(slice.mem != t0);
fail_if(slice.len != strlen(TEST0));
eina_stringshare_del(t0);
eina_stringshare_del(t0);
eina_stringshare_del(t1);