aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src/lib/eina_stringshare.c
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-04-22 09:19:23 +1000
committerDavid Walter Seikel2012-04-22 09:19:23 +1000
commitc963d75dfdeec11f82e79e727062fbf89afa2c04 (patch)
tree895633dbf641110be46f117c29890c49b3ffc0bd /libraries/eina/src/lib/eina_stringshare.c
parentAdding the new extantz viewer and grid manager. (diff)
downloadSledjHamr-c963d75dfdeec11f82e79e727062fbf89afa2c04.zip
SledjHamr-c963d75dfdeec11f82e79e727062fbf89afa2c04.tar.gz
SledjHamr-c963d75dfdeec11f82e79e727062fbf89afa2c04.tar.bz2
SledjHamr-c963d75dfdeec11f82e79e727062fbf89afa2c04.tar.xz
Update EFL to latest beta.
Diffstat (limited to 'libraries/eina/src/lib/eina_stringshare.c')
-rw-r--r--libraries/eina/src/lib/eina_stringshare.c77
1 files changed, 59 insertions, 18 deletions
diff --git a/libraries/eina/src/lib/eina_stringshare.c b/libraries/eina/src/lib/eina_stringshare.c
index 478b300..f371fcd 100644
--- a/libraries/eina/src/lib/eina_stringshare.c
+++ b/libraries/eina/src/lib/eina_stringshare.c
@@ -55,12 +55,30 @@ void *alloca (size_t);
55#include "eina_private.h" 55#include "eina_private.h"
56#include "eina_error.h" 56#include "eina_error.h"
57#include "eina_log.h" 57#include "eina_log.h"
58#include "eina_stringshare.h"
59#include "eina_lock.h" 58#include "eina_lock.h"
59#include "eina_share_common.h"
60 60
61/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ 61/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
62#include "eina_safety_checks.h" 62#include "eina_safety_checks.h"
63#include "eina_share_common.h" 63#include "eina_stringshare.h"
64
65
66#ifdef CRITICAL
67#undef CRITICAL
68#endif
69#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_stringshare_log_dom, __VA_ARGS__)
70
71#ifdef ERR
72#undef ERR
73#endif
74#define ERR(...) EINA_LOG_DOM_ERR(_eina_share_stringshare_log_dom, __VA_ARGS__)
75
76#ifdef DBG
77#undef DBG
78#endif
79#define DBG(...) EINA_LOG_DOM_DBG(_eina_share_stringshare_log_dom, __VA_ARGS__)
80
81static int _eina_share_stringshare_log_dom = -1;
64 82
65/* The actual share */ 83/* The actual share */
66static Eina_Share *stringshare_share; 84static Eina_Share *stringshare_share;
@@ -447,11 +465,8 @@ _eina_stringshare_small_bucket_dump(Eina_Stringshare_Small_Bucket *bucket,
447 for (i = 0; i < bucket->count; i++, s++, l++, r++) 465 for (i = 0; i < bucket->count; i++, s++, l++, r++)
448 { 466 {
449 int dups; 467 int dups;
450#ifdef _WIN32 468
451 printf("DDD: %5hu %5hu '%s'\n", *l, *r, *s);
452#else
453 printf("DDD: %5hhu %5hu '%s'\n", *l, *r, *s); 469 printf("DDD: %5hhu %5hu '%s'\n", *l, *r, *s);
454#endif
455 470
456 dups = (*r - 1); 471 dups = (*r - 1);
457 472
@@ -500,11 +515,29 @@ Eina_Bool
500eina_stringshare_init(void) 515eina_stringshare_init(void)
501{ 516{
502 Eina_Bool ret; 517 Eina_Bool ret;
518
519 if (_eina_share_stringshare_log_dom < 0)
520 {
521 _eina_share_stringshare_log_dom = eina_log_domain_register
522 ("eina_stringshare", EINA_LOG_COLOR_DEFAULT);
523
524 if (_eina_share_stringshare_log_dom < 0)
525 {
526 EINA_LOG_ERR("Could not register log domain: eina_stringshare");
527 return EINA_FALSE;
528 }
529 }
530
503 ret = eina_share_common_init(&stringshare_share, 531 ret = eina_share_common_init(&stringshare_share,
504 EINA_MAGIC_STRINGSHARE_NODE, 532 EINA_MAGIC_STRINGSHARE_NODE,
505 EINA_MAGIC_STRINGSHARE_NODE_STR); 533 EINA_MAGIC_STRINGSHARE_NODE_STR);
506 if (ret) 534 if (ret)
507 _eina_stringshare_small_init(); 535 _eina_stringshare_small_init();
536 else
537 {
538 eina_log_domain_unregister(_eina_share_stringshare_log_dom);
539 _eina_share_stringshare_log_dom = -1;
540 }
508 541
509 return ret; 542 return ret;
510} 543}
@@ -526,6 +559,13 @@ eina_stringshare_shutdown(void)
526 Eina_Bool ret; 559 Eina_Bool ret;
527 _eina_stringshare_small_shutdown(); 560 _eina_stringshare_small_shutdown();
528 ret = eina_share_common_shutdown(&stringshare_share); 561 ret = eina_share_common_shutdown(&stringshare_share);
562
563 if (_eina_share_stringshare_log_dom >= 0)
564 {
565 eina_log_domain_unregister(_eina_share_stringshare_log_dom);
566 _eina_share_stringshare_log_dom = -1;
567 }
568
529 return ret; 569 return ret;
530} 570}
531 571
@@ -534,7 +574,7 @@ eina_stringshare_shutdown(void)
534*============================================================================*/ 574*============================================================================*/
535 575
536EAPI void 576EAPI void
537eina_stringshare_del(const char *str) 577eina_stringshare_del(Eina_Stringshare *str)
538{ 578{
539 int slen; 579 int slen;
540 580
@@ -564,16 +604,17 @@ eina_stringshare_del(const char *str)
564 return; 604 return;
565 } 605 }
566 606
567 eina_share_common_del(stringshare_share, str); 607 if (!eina_share_common_del(stringshare_share, str))
608 CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str);
568} 609}
569 610
570EAPI const char * 611EAPI Eina_Stringshare *
571eina_stringshare_add_length(const char *str, unsigned int slen) 612eina_stringshare_add_length(const char *str, unsigned int slen)
572{ 613{
573 if ((!str) || (slen <= 0)) 614 if ((!str) || (slen <= 0))
574 return ""; 615 return "";
575 else if (slen == 1) 616 else if (slen == 1)
576 return (const char *)_eina_stringshare_single + ((*str) << 1); 617 return (Eina_Stringshare *) _eina_stringshare_single + ((*str) << 1);
577 else if (slen < 4) 618 else if (slen < 4)
578 { 619 {
579 const char *s; 620 const char *s;
@@ -588,7 +629,7 @@ eina_stringshare_add_length(const char *str, unsigned int slen)
588 sizeof(char), sizeof(char)); 629 sizeof(char), sizeof(char));
589} 630}
590 631
591EAPI const char * 632EAPI Eina_Stringshare *
592eina_stringshare_add(const char *str) 633eina_stringshare_add(const char *str)
593{ 634{
594 int slen; 635 int slen;
@@ -609,7 +650,7 @@ eina_stringshare_add(const char *str)
609 return eina_stringshare_add_length(str, slen); 650 return eina_stringshare_add_length(str, slen);
610} 651}
611 652
612EAPI const char * 653EAPI Eina_Stringshare *
613eina_stringshare_printf(const char *fmt, ...) 654eina_stringshare_printf(const char *fmt, ...)
614{ 655{
615 va_list args; 656 va_list args;
@@ -633,7 +674,7 @@ eina_stringshare_printf(const char *fmt, ...)
633 return ret; 674 return ret;
634} 675}
635 676
636EAPI const char * 677EAPI Eina_Stringshare *
637eina_stringshare_vprintf(const char *fmt, va_list args) 678eina_stringshare_vprintf(const char *fmt, va_list args)
638{ 679{
639 char *tmp; 680 char *tmp;
@@ -654,7 +695,7 @@ eina_stringshare_vprintf(const char *fmt, va_list args)
654 return ret; 695 return ret;
655} 696}
656 697
657EAPI const char * 698EAPI Eina_Stringshare *
658eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) 699eina_stringshare_nprintf(unsigned int len, const char *fmt, ...)
659{ 700{
660 va_list args; 701 va_list args;
@@ -679,8 +720,8 @@ eina_stringshare_nprintf(unsigned int len, const char *fmt, ...)
679 return eina_stringshare_add_length(tmp, len); 720 return eina_stringshare_add_length(tmp, len);
680} 721}
681 722
682EAPI const char * 723EAPI Eina_Stringshare *
683eina_stringshare_ref(const char *str) 724eina_stringshare_ref(Eina_Stringshare *str)
684{ 725{
685 int slen; 726 int slen;
686 727
@@ -721,7 +762,7 @@ eina_stringshare_ref(const char *str)
721} 762}
722 763
723EAPI int 764EAPI int
724eina_stringshare_strlen(const char *str) 765eina_stringshare_strlen(Eina_Stringshare *str)
725{ 766{
726 int len; 767 int len;
727 /* special cases */ 768 /* special cases */
@@ -737,7 +778,7 @@ eina_stringshare_strlen(const char *str)
737 if (str[3] == '\0') 778 if (str[3] == '\0')
738 return 3; 779 return 3;
739 780
740 len = eina_share_common_length(stringshare_share, (const char *)str); 781 len = eina_share_common_length(stringshare_share, (Eina_Stringshare *) str);
741 len = (len > 0) ? len / (int)sizeof(char) : -1; 782 len = (len > 0) ? len / (int)sizeof(char) : -1;
742 return len; 783 return len;
743} 784}