summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDov Grobgeld <dov.grobgeld@gmail.com>2017-11-14 19:05:22 +0200
committerDov Grobgeld <dov.grobgeld@gmail.com>2017-11-14 19:05:22 +0200
commit0e273c103dd059f6d4e87182189d5cc37d996e00 (patch)
treed364f817a3a03e0a6a66f8dc9dbc00f9215a88f8
parenta6fee5ee9d8987be1ada02d4ef5ed7c06893d05f (diff)
downloadfribidi-0e273c103dd059f6d4e87182189d5cc37d996e00.tar.gz
Turned FribidiBracketType into a simple UINT32 instead of a struct.
-rw-r--r--lib/fribidi-bidi.c14
-rw-r--r--lib/fribidi-brackets.c7
-rw-r--r--lib/fribidi-brackets.h6
-rw-r--r--lib/fribidi-run.c4
-rw-r--r--lib/fribidi-types.h11
5 files changed, 20 insertions, 22 deletions
diff --git a/lib/fribidi-bidi.c b/lib/fribidi-bidi.c
index 309c9df..1c0bde5 100644
--- a/lib/fribidi-bidi.c
+++ b/lib/fribidi-bidi.c
@@ -102,8 +102,8 @@ compact_list (
for_run_list (list, list)
if (RL_TYPE (list->prev) == RL_TYPE (list)
&& RL_LEVEL (list->prev) == RL_LEVEL (list)
- && RL_BRACKET_TYPE(list).bracket_id == 0 /* Don't join brackets! */
- && RL_BRACKET_TYPE(list->prev).bracket_id == 0
+ && RL_BRACKET_TYPE(list) == FRIBIDI_NO_BRACKET /* Don't join brackets! */
+ && RL_BRACKET_TYPE(list->prev) == FRIBIDI_NO_BRACKET
)
list = merge_with_prev (list);
}
@@ -124,8 +124,8 @@ compact_neutrals (
((RL_TYPE (list->prev) == RL_TYPE (list)
|| (FRIBIDI_IS_NEUTRAL (RL_TYPE (list->prev))
&& FRIBIDI_IS_NEUTRAL (RL_TYPE (list)))))
- && RL_BRACKET_TYPE(list).bracket_id == 0 /* Don't join brackets! */
- && RL_BRACKET_TYPE(list->prev).bracket_id == 0
+ && RL_BRACKET_TYPE(list) == FRIBIDI_NO_BRACKET /* Don't join brackets! */
+ && RL_BRACKET_TYPE(list->prev) == FRIBIDI_NO_BRACKET
)
list = merge_with_prev (list);
}
@@ -1060,9 +1060,9 @@ fribidi_get_par_embedding_levels_ex (
bracket_stack[iso_level] = fribidi_malloc (sizeof (bracket_stack[0])
* FRIBIDI_BIDI_MAX_NESTED_BRACKET_PAIRS);
FriBidiBracketType brack_prop = RL_BRACKET_TYPE(pp);
- if (FRIBIDI_IS_BRACKET(&brack_prop))
+ if (brack_prop!= FRIBIDI_NO_BRACKET)
{
- if (brack_prop.is_open)
+ if (FRIBIDI_IS_BRACKET_OPEN(brack_prop))
{
if (bracket_stack_size[iso_level]==FRIBIDI_BIDI_MAX_NESTED_BRACKET_PAIRS)
break;
@@ -1076,7 +1076,7 @@ fribidi_get_par_embedding_levels_ex (
while (stack_idx >= 0)
{
FriBidiBracketType se_brack_prop = RL_BRACKET_TYPE(bracket_stack[iso_level][stack_idx]);
- if (se_brack_prop.bracket_id == brack_prop.bracket_id)
+ if (FRIBIDI_BRACKET_ID(se_brack_prop) == FRIBIDI_BRACKET_ID(brack_prop))
{
bracket_stack_size[iso_level] = stack_idx;
diff --git a/lib/fribidi-brackets.c b/lib/fribidi-brackets.c
index 1dbc419..8a1740c 100644
--- a/lib/fribidi-brackets.c
+++ b/lib/fribidi-brackets.c
@@ -60,13 +60,14 @@ fribidi_get_bracket (
fribidi_boolean is_open = false;
if (char_type == 0)
- bracket_type.bracket_id = 0;
+ bracket_type = FRIBIDI_NO_BRACKET;
else
{
is_open = (char_type & FRIBIDI_TYPE_BRACKET_OPEN) != 0;
- bracket_type.bracket_id = FRIBIDI_GET_BRACKETS (ch);
+ bracket_type = FRIBIDI_GET_BRACKETS (ch) & FRIBIDI_BRACKET_ID_MASK;
}
- bracket_type.is_open = is_open;
+ if (is_open)
+ bracket_type |= FRIBIDI_BRACKET_OPEN_MASK;
return bracket_type;
}
diff --git a/lib/fribidi-brackets.h b/lib/fribidi-brackets.h
index 3e421f3..f2932fe 100644
--- a/lib/fribidi-brackets.h
+++ b/lib/fribidi-brackets.h
@@ -73,8 +73,10 @@ fribidi_get_bracket_types (
FriBidiBracketType *btypes
);
-#define FRIBIDI_IS_BRACKET(bt) ((bt)->bracket_id>0)
-#define FRIBIDI_IS_BRACKET_OPEN(bt) ((bt)->is_open>0)
+#define FRIBIDI_BRACKET_OPEN_MASK 0x80000000
+#define FRIBIDI_BRACKET_ID_MASK 0x7fffffff
+#define FRIBIDI_IS_BRACKET_OPEN(bt) ((bt & FRIBIDI_BRACKET_OPEN_MASK)>0)
+#define FRIBIDI_BRACKET_ID(bt) ((bt & FRIBIDI_BRACKET_ID_MASK))
#include "fribidi-enddecls.h"
diff --git a/lib/fribidi-run.c b/lib/fribidi-run.c
index f67d9e2..d494c3d 100644
--- a/lib/fribidi-run.c
+++ b/lib/fribidi-run.c
@@ -137,8 +137,8 @@ run_list_encode_bidi_types (
bracket_type = bracket_types[i];
if (char_type != last->type
- || bracket_type.bracket_id > 0 /* Always separate bracket into single char runs! */
- || last->bracket_type.bracket_id > 0
+ || bracket_type != FRIBIDI_NO_BRACKET /* Always separate bracket into single char runs! */
+ || last->bracket_type != FRIBIDI_NO_BRACKET
|| FRIBIDI_IS_ISOLATE(char_type)
)
{
diff --git a/lib/fribidi-types.h b/lib/fribidi-types.h
index 1288fb4..f95742a 100644
--- a/lib/fribidi-types.h
+++ b/lib/fribidi-types.h
@@ -115,16 +115,11 @@ typedef FRIBIDI_BOOLEAN fribidi_boolean;
typedef FRIBIDI_UNICHAR FriBidiChar;
typedef FRIBIDI_STR_INDEX FriBidiStrIndex;
-struct _FriBracketTypeStruct {
- FriBidiChar bracket_id;
- fribidi_boolean is_open;
-};
-
-typedef struct _FriBracketTypeStruct FriBidiBracketType;
+/* The MSB is used to indicate an opening bracket */
+typedef FriBidiChar FriBidiBracketType;
/* Use FRIBIDI_NO_BRACKET for assigning to a non-bracket */
-#define FRIBIDI_NO_BRACKET { 0, 0 }
-
+#define FRIBIDI_NO_BRACKET 0
/* A few macros for working with bits */