From: Enrico Zini Date: Sat, 27 Mar 2010 22:00:33 +0000 (+0000) Subject: Enumerate log entries using delegates and lambdas X-Git-Url: https://git.toastfreeware.priv.at/gregoa/zavai.git/commitdiff_plain/7ffc3bb1dad23d38fdc9633fda189bde7b2a3862 Enumerate log entries using delegates and lambdas --- diff --git a/src/log.vala b/src/log.vala index 84b0d20..2f10dbc 100644 --- a/src/log.vala +++ b/src/log.vala @@ -367,34 +367,27 @@ public class Logger : Resource, Object return parser.result; } - protected size_t list_dir(string dir, ref List res) + public delegate bool EntriesVisitor(string dir, string name); + + + protected void list_dir(string dir, EntriesVisitor visitor) { - size_t count = 0; var d = File.new_for_path(dir); var enumerator = d.enumerate_children(FILE_ATTRIBUTE_STANDARD_NAME, 0, null); FileInfo file_info; while ((file_info = enumerator.next_file(null)) != null) { if (!file_info.get_name().has_suffix(".gpx")) continue; - res.append(file_info.get_name()); - ++count; + if (!visitor(dir, file_info.get_name())) + break; } - return count; } - public string[] list_entries(bool only_unacked=true) + public void list_entries(EntriesVisitor visitor, bool only_unacked=true) { - size_t count = 0; - List entries = new List(); if (!only_unacked) - count += list_dir(config.homedir + "/archive", ref entries); - count += list_dir(config.homedir + "/log", ref entries); - string[] res = new string[count+1]; - size_t cur = 0; - for (weak List i = entries; i != null; i = i.next) - res[cur++] = i.data; - res[cur] = null; - return res; + list_dir(config.homedir + "/archive", visitor); + list_dir(config.homedir + "/log", visitor); } public void instant(string tag, string msg) diff --git a/src/zavai.vala b/src/zavai.vala index 29df675..caa6f3f 100644 --- a/src/zavai.vala +++ b/src/zavai.vala @@ -279,12 +279,14 @@ static int main (string[] args) { if (args.length > 2 && args[1] == "showlog") { - string[] z = zavai.log.log.list_entries(false); - for (int i = 0; z[i] != null; ++i) - stderr.printf("FALSE %s\n", z[i]); - z = zavai.log.log.list_entries(true); - for (int i = 0; z[i] != null; ++i) - stderr.printf("TRUE %s\n", z[i]); + zavai.log.log.list_entries((d, f) => { + stderr.printf("FALSE %s %s\n", d, f); + return true; + }, false); + zavai.log.log.list_entries((d, f) => { + stderr.printf("TRUE %s %s\n", d, f); + return true; + }, true); zavai.log.Log l = zavai.log.log.load(args[2]); l.dump(); return 0;