internal override SymbolStyle buildSymbol <T1>(SymbolStyle.SymbolBuilder <T1> b, string src, Bitmap bitmap)
        {
            // we need to hash with the width/height included as the same symbol could be required
            // in a different size and must be cached with a size-specific hash
            string absoluteName = CanvasAdapter.getAbsoluteFile(mTheme.RelativePathPrefix, src).AbsolutePath;
            int    hash         = (new StringBuilder()).Append(absoluteName).Append(b.symbolWidth).Append(b.symbolHeight).Append(b.symbolPercent).ToString().GetHashCode();

            bitmapMap[hash] = bitmap;
            return(b.hash(hash).build());
        }
        private static IRenderTheme replaceThemeSymbols(RenderTheme renderTheme, IDictionary <object, TextureRegion> regionMap)
        {
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: org.oscim.theme.styles.SymbolStyle.SymbolBuilder<?> symbolBuilder = org.oscim.theme.styles.SymbolStyle.builder();
            SymbolStyle.SymbolBuilder <object> symbolBuilder = SymbolStyle.builder();
            foreach (Rule rule in renderTheme.Rules)
            {
                replaceRuleSymbols(rule, regionMap, symbolBuilder);
            }
            return(renderTheme);
        }
 private static void replaceRuleSymbols <T1>(Rule rule, IDictionary <object, TextureRegion> regionMap, SymbolStyle.SymbolBuilder <T1> b)
 {
     for (int i = 0, n = rule.styles.length; i < n; i++)
     {
         RenderStyle style = rule.styles[i];
         if (style is SymbolStyle)
         {
             SymbolStyle   symbol = (SymbolStyle)style;
             TextureRegion region = regionMap[symbol.hash];
             if (region != null)
             {
                 rule.styles[i] = b.set(symbol).bitmap(null).texture(region).build();
             }
         }
     }
     foreach (Rule subRule in rule.subRules)
     {
         replaceRuleSymbols(subRule, regionMap, b);
     }
 }