freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] gsoc-craig-2023 37e3e348b 2/2: * Make reverse charmap lookup


From: Werner Lemberg
Subject: [freetype2] gsoc-craig-2023 37e3e348b 2/2: * Make reverse charmap lookup a binary search
Date: Sun, 25 Jun 2023 23:47:17 -0400 (EDT)

branch: gsoc-craig-2023
commit 37e3e348b5eba682aaba649723817ed170d285ce
Author: Craig White <gerzytet@gmail.com>
Commit: Craig White <gerzytet@gmail.com>

    * Make reverse charmap lookup a binary search
    * Style fixes
---
 src/autofit/afadjust.c | 47 +++++++++++++++++++++++++++++++++--------------
 src/autofit/aflatin.c  |  7 +++++--
 2 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/src/autofit/afadjust.c b/src/autofit/afadjust.c
index cf2a59671..78487f3f4 100644
--- a/src/autofit/afadjust.c
+++ b/src/autofit/afadjust.c
@@ -4,7 +4,7 @@
 #include <freetype/internal/ftmemory.h>
 #include <freetype/internal/ftdebug.h>
 
-#define AF_ADJUSTMENT_DATABASE_LENGTH 
(sizeof(adjustment_database)/sizeof(adjustment_database[0]))
+#define AF_ADJUSTMENT_DATABASE_LENGTH ( 
sizeof(adjustment_database)/sizeof(adjustment_database[0]) )
 #undef  FT_COMPONENT
 #define FT_COMPONENT  afadjust
 
@@ -38,15 +38,22 @@ adjustment_database[] =
 FT_LOCAL_DEF( const AF_AdjustmentDatabaseEntry* )
 af_adjustment_database_lookup( FT_UInt32 codepoint ) {
     /* Binary search for database entry */
-    FT_UInt low = 0;
-    FT_UInt high = AF_ADJUSTMENT_DATABASE_LENGTH - 1;
-    while (high > low) {
-        FT_UInt mid = (low + high) / 2;
-        if (adjustment_database[mid].codepoint < codepoint) {
+    FT_Int low = 0;
+    FT_Int high = AF_ADJUSTMENT_DATABASE_LENGTH - 1;
+    while ( high > low )
+    {
+        FT_Int mid = ( low + high ) / 2;
+        FT_UInt32 mid_codepoint = adjustment_database[mid].codepoint;
+        if ( mid_codepoint < codepoint )
+        {
             low = mid + 1;
-        } else if (adjustment_database[mid].codepoint > codepoint) {
+        }
+        else if ( mid_codepoint > codepoint )
+        {
             high = mid - 1;
-        } else {
+        }
+        else
+        {
             return &adjustment_database[mid];
         }
     }
@@ -77,19 +84,31 @@ typedef struct AF_ReverseCharacterMap_
     AF_ReverseMapEntry *entries;
 } AF_ReverseCharacterMap_Rec;
 
-FT_LOCAL_DEF(FT_UInt32)
+FT_LOCAL_DEF( FT_UInt32 )
 af_reverse_character_map_lookup( AF_ReverseCharacterMap map, FT_Int 
glyph_index )
 {
     if ( map == NULL )
     {
         return 0;
     }
-
-    for ( FT_UInt entry = 0; entry < map->length; entry++ )
+    /* Binary search for reverse character map entry */
+    FT_Int low = 0;
+    FT_Int high = map->length - 1;
+    while ( high > low )
     {
-        if ( map->entries[entry].glyph_index == glyph_index )
+        FT_Int mid = ( high + low ) / 2;
+        FT_Int mid_glyph_index = map->entries[mid].glyph_index;
+        if ( glyph_index < mid_glyph_index )
+        {
+            high = mid - 1;
+        }
+        else if ( glyph_index > mid_glyph_index )
+        {
+            low = mid + 1;
+        }
+        else
         {
-            return map->entries[entry].codepoint;
+            return map->entries[mid].codepoint;
         }
     }
 
@@ -131,7 +150,7 @@ af_reverse_character_map_new( FT_Face face, 
AF_ReverseCharacterMap *map, FT_Memo
     FT_Int capacity = 10;
     FT_Int size = 0;
 
-    if ( FT_NEW_ARRAY((*map)->entries, capacity) )
+    if ( FT_NEW_ARRAY( ( *map )->entries, capacity) )
     {
         goto Exit;
     }
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
index 2e870f59e..47ad8b175 100644
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -2832,7 +2832,8 @@ af_glyph_hints_apply_vertical_separation_adjustments( 
AF_GlyphHints hints,
     }
 
     FT_TRACE4(( "    Pushing top contour %d units up\n", adjustment_amount ));
-    if ( adjustment_amount > 0 ) {
+    if ( adjustment_amount > 0 )
+    {
       AF_Point point = hints->contours[highest_contour];
       AF_Point first_point = point;
       if ( point != NULL )
@@ -2844,7 +2845,9 @@ af_glyph_hints_apply_vertical_separation_adjustments( 
AF_GlyphHints hints,
         } while ( point != first_point );
       }
     }
-  } else {
+  }
+  else
+  {
     FT_TRACE4(( "af_glyph_hints_apply_vertical_separation_adjustments: No 
vertical adjustment needed\n" ));
   }
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]