ami pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e8ae4178d846136e9993828c3523002c24cdf015

commit e8ae4178d846136e9993828c3523002c24cdf015
Author: Amitesh Singh <amitesh...@samsung.com>
Date:   Tue Nov 28 17:05:31 2017 +0900

    Efl.Ui.Format: do format check once only.
---
 src/lib/efl/interfaces/efl_ui_format.c | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/lib/efl/interfaces/efl_ui_format.c 
b/src/lib/efl/interfaces/efl_ui_format.c
index 7fdbc49249..15212f168f 100644
--- a/src/lib/efl/interfaces/efl_ui_format.c
+++ b/src/lib/efl/interfaces/efl_ui_format.c
@@ -3,11 +3,6 @@
 
 #define ERR(...) EINA_LOG_DOM_ERR(EINA_LOG_DOMAIN_DEFAULT, __VA_ARGS__)
 
-typedef struct
-{
-   const char *template;
-} Efl_Ui_Format_Data;
-
 typedef enum _Format_Type
 {
    FORMAT_TYPE_INVALID,
@@ -15,6 +10,12 @@ typedef enum _Format_Type
    FORMAT_TYPE_INT
 } Format_Type;
 
+typedef struct
+{
+   const char *template;
+   Format_Type format_type;
+} Efl_Ui_Format_Data;
+
 static Eina_Bool
 _is_valid_digit(char x)
 {
@@ -78,7 +79,6 @@ _default_format_cb(void *data, Eina_Strbuf *str, const 
Eina_Value value)
 {
    const Eina_Value_Type *type = eina_value_type_get(&value);
    Efl_Ui_Format_Data *sd = data;
-   int format_check_result;
 
    if (type == EINA_VALUE_TYPE_TM)
      {
@@ -89,29 +89,27 @@ _default_format_cb(void *data, Eina_Strbuf *str, const 
Eina_Value value)
         return;
      }
 
-   format_check_result = _format_string_check(sd->template);
-
-   if (format_check_result == FORMAT_TYPE_INVALID)
+   if (sd->format_type == FORMAT_TYPE_INVALID)
      {
         ERR("Wrong String Format: %s", sd->template);
         return;
      }
 
-   if ((format_check_result == FORMAT_TYPE_DOUBLE)
+   if ((sd->format_type == FORMAT_TYPE_DOUBLE)
        && (type == EINA_VALUE_TYPE_DOUBLE))
      {
         double v;
         eina_value_get(&value, &v);
         eina_strbuf_append_printf(str, sd->template, v);
      }
-   else if ((format_check_result == FORMAT_TYPE_INT)
+   else if ((sd->format_type == FORMAT_TYPE_INT)
             && (type == EINA_VALUE_TYPE_INT))
      {
         int v;
         eina_value_get(&value, &v);
         eina_strbuf_append_printf(str, sd->template, v);
      }
-   else if ((format_check_result == FORMAT_TYPE_DOUBLE)
+   else if ((sd->format_type == FORMAT_TYPE_DOUBLE)
             && (type == EINA_VALUE_TYPE_INT))
      {
         int v;
@@ -122,7 +120,7 @@ _default_format_cb(void *data, Eina_Strbuf *str, const 
Eina_Value value)
         d_v = v;
         eina_strbuf_append_printf(str, sd->template, d_v);
      }
-   else if ((format_check_result == FORMAT_TYPE_INT)
+   else if ((sd->format_type == FORMAT_TYPE_INT)
             && (type == EINA_VALUE_TYPE_DOUBLE))
      {
         double v;
@@ -157,7 +155,10 @@ EOLIAN static void
 _efl_ui_format_format_string_set(Eo *obj, Efl_Ui_Format_Data *sd, const char 
*template)
 {
    if (!template) return;
+
    eina_stringshare_replace(&sd->template, template);
+   sd->format_type = _format_string_check(sd->template);
+
    efl_ui_format_cb_set(obj, sd, _default_format_cb, _default_format_free_cb);
 }
 

-- 


Reply via email to