require 'towers_ext'
str = "
[black] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[blue] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[cyan] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[dark blue] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis
dapibus interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur
sagittis lorem a pretium. Praesent a libero turpis, ut.
[dark cyan] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis
dapibus interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur
sagittis lorem a pretium. Praesent a libero turpis, ut.
[dark green] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis
dapibus interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur
sagittis lorem a pretium. Praesent a libero turpis, ut.
[dark grey] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis
dapibus interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur
sagittis lorem a pretium. Praesent a libero turpis, ut.
[dark red] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[green] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[grey] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[orange] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[pink] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[purple] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[red] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[white] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
[yellow] Pellentesque varius urna eget nibh ullamcorper dignissim. Pellentesque ullamcorper neque eu turpis dapibus
interdum id sit amet tortor. Ut nunc quam, pretium et tempus eu, sagittis ac mauris. Quisque consectetur sagittis
lorem a pretium. Praesent a libero turpis, ut.
"
30000.times do
output = TowersEXT::Colour.parse_colours(str)
end
[s] % cumulative self self total
time seconds seconds calls ms/call ms/call name
70.27 0.26 0.26 30000 0.01 0.01 TowersEXT::Colour#parse_colours
29.73 0.37 0.11 1 110.00 370.00 Integer#times
0.00 0.37 0.00 1 0.00 0.00 Kernel.require
0.00 0.37 0.00 2 0.00 0.00 BasicObject#singleton_method_added
0.00 0.37 0.00 1 0.00 0.00 Class#inherited
0.00 0.37 0.00 2 0.00 0.00 IO#set_encoding
0.00 0.37 0.00 1 0.00 370.00 #toplevel
require 'benchmark'
$color_table = {
"#z" => "\e
require 'benchmark'
$color_table = {
"#z" => "\e[2;30m",
"#Z" => "\e[1;30m",
"#r" => "\e[2;31m",
"#R" => "\e[1;31m",
"#g" => "\e[2;32m",
"#G" => "\e[1;32m",
"#y" => "\e[2;33m",
"#Y" => "\e[1;33m",
"#b" => "\e[2;34m",
"#B" => "\e[1;34m",
"#m" => "\e[2;35m",
"#M" => "\e[1;35m",
"#c" => "\e[2;36m",
"#C" => "\e[1;36m",
"#w" => "\e[2;37m",
"#W" => "\e[1;37m",
"#n" => "\e[0m",
}
$comp_tab = Regexp.union *$color_table.keys
def parse_color(data)
last_code = nil
data.gsub($comp_tab) do |s|
if last_code != nil && last_code.eql?(s)
""
else
last_code = s
$color_table[s]
end
end
end
line = "#rH#re#Rll#go#n#rT#rh#Re#n"
puts parse_color line
Benchmark.bmbm do |x|
x.report("using gsub") { 1000.times do; parse_color(line); end }
end
[/code]
I think it could be applied to just about any codebase. Improvements or suggestions welcome. Here's a profile of 1001 iterations on "#rH#re#Rll#go#n#rT#rh#Re#n"