<p>In <a href="https://github.com/geany/geany/pull/957#discussion_r61948761">tagmanager/src/tm_parser.c</a>:</p>
<pre style='color:#555'>> +
> +
> +TMTagType tm_parser_get_tag_type(gchar kind, TMParserType lang)
> +{
> +  TMParserMap *map = &parser_map[lang];
> +  guint i;
> +
> +  for (i = 0; i < map->size; i++)
> +  {
> +          TMParserMapEntry *entry = &map->entries[i];
> +
> +          if (entry->kind == kind)
> +                  return entry->type;
> +  }
> +  return tm_tag_undef_t;
> +}
</pre>
<p>If type lookup happens to be a bottleneck, we could index on kind letter in the maps:</p>

<div class="highlight highlight-source-c"><pre><span class="pl-k">static</span> TMTagType map_CONF[<span class="pl-c1">128</span>] = {
    [<span class="pl-s"><span class="pl-pds">'</span>n<span class="pl-pds">'</span></span>] = <span class="pl-c1">tm_tag_namespace_t</span>,
    [<span class="pl-s"><span class="pl-pds">'</span>m<span class="pl-pds">'</span></span>] = <span class="pl-c1">tm_tag_macro_t</span>,
};</pre></div>

<p>it obviously has a memory footprint cost though (<code>sizeof(TMTagType)*128 - (sizeof(TMParserMapEntry - sizeof(TMTagType)) * n_actual_entries</code> -- likely about 120*4 = 480 bytes per map, so about 24kb), which may or may not be worth it.  If we weren't afraid, we could lower this to 52 entries tops instead of 128 (so about 9kb) as we can assume kinds are alphabetic letters, so can do something like that:</p>

<div class="highlight highlight-source-c"><pre>#<span class="pl-k">define</span> <span class="pl-en">ENTRY</span>(<span class="pl-v">letter, type</span>) \
    [(letter >= <span class="pl-s"><span class="pl-pds">'</span>A<span class="pl-pds">'</span></span> && letter <= <span class="pl-s"><span class="pl-pds">'</span>Z<span class="pl-pds">'</span></span>) ? (letter - <span class="pl-s"><span class="pl-pds">'</span>A<span class="pl-pds">'</span></span>) : \
     (letter >= <span class="pl-s"><span class="pl-pds">'</span>a<span class="pl-pds">'</span></span> && letter <= <span class="pl-s"><span class="pl-pds">'</span>z<span class="pl-pds">'</span></span>) ? (<span class="pl-s"><span class="pl-pds">'</span>Z<span class="pl-pds">'</span></span> + <span class="pl-c1">1</span> + letter - <span class="pl-s"><span class="pl-pds">'</span>a<span class="pl-pds">'</span></span>) : \
     -<span class="pl-c1">1</span>] = type

<span class="pl-k">static</span> TMTagType map_CONF[<span class="pl-c1">26</span>*<span class="pl-c1">2</span>] = {
    <span class="pl-c1">ENTRY</span>(<span class="pl-s"><span class="pl-pds">'</span>n<span class="pl-pds">'</span></span>, <span class="pl-c1">tm_tag_namespace_t</span>),
    <span class="pl-c1">ENTRY</span>(<span class="pl-s"><span class="pl-pds">'</span>m<span class="pl-pds">'</span></span>, <span class="pl-c1">tm_tag_macro_t</span>),
};</pre></div>

<p>It could also simply have the kinds sorted alphabetically, too, and use a bsearch.</p>

<p>Anyway, hypothetical problem for now :)</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly or <a href="https://github.com/geany/geany/pull/957/files/aea7d7845917843dd6b02e5a8dc9031cabc87a86..5d9376ea801a6e6c3ec22748741362a3a2eff7ac#r61948761">view it on GitHub</a><img alt="" height="1" src="https://github.com/notifications/beacon/ABDrJ8_mMr7IdrfXq0QGDw1WyC_BdrPqks5p964qgaJpZM4Ht-Ad.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/geany/geany/pull/957/files/aea7d7845917843dd6b02e5a8dc9031cabc87a86..5d9376ea801a6e6c3ec22748741362a3a2eff7ac#r61948761"></link>
  <meta itemprop="name" content="View Pull Request"></meta>
</div>
<meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>