Skip to content

Commit

Permalink
Showing 2 changed files with 20 additions and 4 deletions.
9 changes: 9 additions & 0 deletions ksp_plugin_adapter/localization_extensions.cs
Original file line number Diff line number Diff line change
@@ -134,6 +134,15 @@ public static string CelestialStringOrNull(string template,
FormatOrNull(template, names));
}

public static string CacheFormat(string name) {
return lru_cache_.Get(name, () => Localizer.Format(name));
}

public static string CacheFormat(string name, params string[] args) {
return lru_cache_.Get(name, args,
() => Localizer.Format(name, args));
}

public static string CacheFormat(string name, params object[] args) {
return lru_cache_.Get(name, args,
() => Localizer.Format(name, args));
15 changes: 11 additions & 4 deletions ksp_plugin_adapter/lru_cache.cs
Original file line number Diff line number Diff line change
@@ -8,7 +8,11 @@ namespace principia {
namespace ksp_plugin_adapter {

class LRUCache {
public string Get(string name, object[] args, Func<string> compute_value) {
public string Get(string name, Func<string> compute_value) {
return Get(name, new string[]{}, compute_value);
}

public string Get(string name, string[] args, Func<string> compute_value) {
string key = MakeKey(name, args);
Entry entry;
if (cache_.TryGetValue(key, out entry)) {
@@ -30,10 +34,13 @@ public string Get(string name, object[] args, Func<string> compute_value) {
return entry.value;
}

public string MakeKey(string name, object[] args) {
public string Get(string name, object[] args, Func<string> compute_value) {
return Get(name, (from arg in args select arg.ToString()).ToArray(), compute_value);
}

public string MakeKey(string name, string[] args) {
string unit_separator = "\x1F";
return name + unit_separator +
string.Join(unit_separator, from arg in args select arg.ToString());
return name + unit_separator + string.Join(unit_separator, args);
}

private class Entry {

0 comments on commit d0f59ca

Please sign in to comment.