* @{
*/
+/**
+ * @typedef Eina_Stringshare
+ *
+ * Interchangeable with "const char *" but still a good visual hint for the
+ * purpose. Maybe in the far far future we'll even add strict type checking.
+ *
+ * @since 1.2.0
+ */
+typedef const char * Eina_Stringshare;
/**
* @brief Retrieve an instance of a string for use in a program.
*
* @see eina_share_common_add()
*/
-EAPI const char *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
+EAPI Eina_Stringshare eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieve an instance of a string for use in a program.
*
* @see eina_stringshare_add_length()
*/
-EAPI const char *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT;
+EAPI Eina_Stringshare eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieve an instance of a string for use in a program
*
* @see eina_stringshare_nprintf()
*/
-EAPI const char *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2);
+EAPI Eina_Stringshare eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2);
/**
* @brief Retrieve an instance of a string for use in a program
*
* @see eina_stringshare_nprintf()
*/
-EAPI const char *eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT;
+EAPI Eina_Stringshare eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT;
/**
* @brief Retrieve an instance of a string for use in a program
*
* @see eina_stringshare_printf()
*/
-EAPI const char *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3);
+EAPI Eina_Stringshare eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3);
/**
* Increment references of the given shared string.
*
* There is no unref since this is the work of eina_share_common_del().
*/
-EAPI const char *eina_stringshare_ref(const char *str);
+EAPI Eina_Stringshare eina_stringshare_ref(Eina_Stringshare str);
/**
* @brief Note that the given string has lost an instance.
* Note that if the given pointer is not shared or NULL, bad things
* will happen, likely a segmentation fault.
*/
-EAPI void eina_stringshare_del(const char *str);
+EAPI void eina_stringshare_del(Eina_Stringshare str);
/**
* @brief Note that the given string @b must be shared.
* things will happen, likely a segmentation fault. If in doubt, try
* strlen().
*/
-EAPI int eina_stringshare_strlen(const char *str) EINA_PURE EINA_WARN_UNUSED_RESULT;
+EAPI int eina_stringshare_strlen(Eina_Stringshare str) EINA_PURE EINA_WARN_UNUSED_RESULT;
/**
* @brief Dump the contents of the share_common.
*/
EAPI void eina_stringshare_dump(void);
-static inline Eina_Bool eina_stringshare_replace(const char **p_str, const char *news) EINA_ARG_NONNULL(1);
-static inline Eina_Bool eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1);
+static inline Eina_Bool eina_stringshare_replace(Eina_Stringshare *p_str, Eina_Stringshare news) EINA_ARG_NONNULL(1);
+static inline Eina_Bool eina_stringshare_replace_length(Eina_Stringshare *p_str, Eina_Stringshare news, unsigned int slen) EINA_ARG_NONNULL(1);
#include "eina_inline_stringshare.x"
*============================================================================*/
EAPI void
-eina_stringshare_del(const char *str)
+eina_stringshare_del(Eina_Stringshare str)
{
int slen;
CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str);
}
-EAPI const char *
+EAPI Eina_Stringshare
eina_stringshare_add_length(const char *str, unsigned int slen)
{
if ((!str) || (slen <= 0))
return "";
else if (slen == 1)
- return (const char *)_eina_stringshare_single + ((*str) << 1);
+ return (Eina_Stringshare) _eina_stringshare_single + ((*str) << 1);
else if (slen < 4)
{
const char *s;
sizeof(char), sizeof(char));
}
-EAPI const char *
+EAPI Eina_Stringshare
eina_stringshare_add(const char *str)
{
int slen;
return eina_stringshare_add_length(str, slen);
}
-EAPI const char *
+EAPI Eina_Stringshare
eina_stringshare_printf(const char *fmt, ...)
{
va_list args;
return ret;
}
-EAPI const char *
+EAPI Eina_Stringshare
eina_stringshare_vprintf(const char *fmt, va_list args)
{
char *tmp;
return ret;
}
-EAPI const char *
+EAPI Eina_Stringshare
eina_stringshare_nprintf(unsigned int len, const char *fmt, ...)
{
va_list args;
return eina_stringshare_add_length(tmp, len);
}
-EAPI const char *
-eina_stringshare_ref(const char *str)
+EAPI Eina_Stringshare
+eina_stringshare_ref(Eina_Stringshare str)
{
int slen;
}
EAPI int
-eina_stringshare_strlen(const char *str)
+eina_stringshare_strlen(Eina_Stringshare str)
{
int len;
/* special cases */
if (str[3] == '\0')
return 3;
- len = eina_share_common_length(stringshare_share, (const char *)str);
+ len = eina_share_common_length(stringshare_share, (Eina_Stringshare) str);
len = (len > 0) ? len / (int)sizeof(char) : -1;
return len;
}