eina_stringshare: add slice_get()
authorGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Fri, 12 Aug 2016 21:54:26 +0000 (18:54 -0300)
committerGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Mon, 22 Aug 2016 21:25:14 +0000 (18:25 -0300)
src/lib/eina/eina_inline_stringshare.x
src/lib/eina/eina_stringshare.h
src/tests/eina/eina_test_stringshare.c

index bc1f92e..1f824b3 100644 (file)
@@ -117,6 +117,23 @@ eina_stringshare_replace_length(Eina_Stringshare **p_str, const char *news, unsi
 }
 
 /**
+ * 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;
+}
+
+/**
  * @}
  */
 
index 080e951..c24c7c1 100644 (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"
 
 /**
index cfc063b..02e5c81 100644 (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);