This is the mail archive of the frysk-cvs@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: Move tree code from Log.java to Tree.java.


The branch, master has been updated
       via  86395789e16a674353533d7b897df0f24ce4d2df (commit)
      from  36cff033d7840d1968d9952a44486abbe3b26b3f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 86395789e16a674353533d7b897df0f24ce4d2df
Author: Andrew Cagney <cagney@redhat.com>
Date:   Fri Dec 7 17:49:06 2007 -0500

    Move tree code from Log.java to Tree.java.
    
    frysk-sys/frysk/rsl/ChangeLog
    2007-12-07  Andrew Cagney  <cagney@redhat.com>
    
    	* LogOption.java: New file.
    	* Branch.java: New.
    	* Level.mkenum: Add MAX.
    	* Log.java (print(int)): New.
    	(print(long)): New.
    	(print(String)): New.
    	(print(Object)): New.
    	(print(int[])): New.
    	(print(long[])): New.
    	(print(String[])): New.
    	(print(Object[])): New.
    	(fine(...), finest(...)): New.
    	(Log()): Moved to Branch.
    	(children): Moved to Branch.
    	(fine(...), finest(...)): Delete.
    	(get(String,int)): Move to Branch.
    	(complete(String,int,List)): Move to Branch.
    	* package.html: Update.
    	* TestLog.java: Update.

-----------------------------------------------------------------------

Summary of changes:
 frysk-sys/frysk/rsl/{Log.java => Branch.java}      |  180 +++--------
 frysk-sys/frysk/rsl/ChangeLog                      |   20 ++
 frysk-sys/frysk/rsl/Level.mkenum                   |    1 +
 frysk-sys/frysk/rsl/Log.java                       |  337 ++++++++++++--------
 .../frysk/rsl/LogOption.java                       |   49 ++--
 frysk-sys/frysk/rsl/TestLog.java                   |   35 ++-
 6 files changed, 314 insertions(+), 308 deletions(-)
 copy frysk-sys/frysk/rsl/{Log.java => Branch.java} (57%)
 copy frysk-core/frysk/event/TestSigChild.java => frysk-sys/frysk/rsl/LogOption.java (70%)

First 500 lines of diff:
diff --git a/frysk-sys/frysk/rsl/Log.java b/frysk-sys/frysk/rsl/Branch.java
similarity index 57%
copy from frysk-sys/frysk/rsl/Log.java
copy to frysk-sys/frysk/rsl/Branch.java
index 964f919..b1856d9 100644
--- a/frysk-sys/frysk/rsl/Log.java
+++ b/frysk-sys/frysk/rsl/Branch.java
@@ -39,7 +39,6 @@
 
 package frysk.rsl;
 
-import java.io.PrintStream;
 import java.util.TreeMap;
 import java.util.Iterator;
 import java.util.List;
@@ -47,99 +46,81 @@ import java.util.List;
 /**
  * Generate log information when enabled.
  */
-public final class Log {
+public final class Branch {
 
-    private int level;
+    private final TreeMap children = new TreeMap();
+    private final Log[] loggers = new Log[Level.MAX.intValue()];
+    private Level level = Level.NONE;
     private final String path;
     private final String name;
-    private Log(String path, String name, Log parent) {
+
+    private Branch(String path, String name) {
 	this.path = path;
-	this.level = parent.level;
 	this.name = name;
     }
 
     /**
-     * Create a root logger; package private so that test code can
-     * create their own root logger.
+     * Package private for testing.
      */
-    Log() {
-	this.level = 0;
-	this.path = "";
-	this.name = "";
-    }
-
-    public String toString() {
-	return ("{" + super.toString()
-		+ ",path=" + path
-		+ ",level=" + level
-		+ "}");
+    Branch() {
+	this("<root>", "<root>");
     }
-
     /**
-     * Return the "basename" of the logger.
+     * The root note; also serves as a single global lock.
      */
-    public final String name() {
-	return name;
-    }
-    /**
-     * Return the full path of the logger.
-     */
-    public final String path() {
-	return path;
-    }
+    static final Branch root = new Branch();
 
-    private final TreeMap children = new TreeMap();
     /**
      * Set this logger's logging level.
      */
-    public synchronized final Log set(Level level) {
-	this.level = level.intValue();
-	for (Iterator i = children.values().iterator(); i.hasNext(); ) {
-	    Log child = (Log)i.next();
-	    child.set(level);
+    public final void set(Level level) {
+	synchronized (root) {
+	    this.level = level;
+	    for (int i = 0; i < Level.MAX.intValue(); i++) {
+		if (loggers[i] != null) {
+		    loggers[i].set(i >= level.intValue());
+		}
+	    }
+	    for (Iterator i = children.values().iterator(); i.hasNext(); ) {
+		Branch child = (Branch)i.next();
+		child.set(level);
+	    }
 	}
-	return this;
-    }
-    /**
-     * Return this loggers current logging level.
-     */
-    public final Level level() {
-	return Level.valueOf(level);
     }
 
     /**
      * POS starts at -1, then points at "." or the end of the name.
      * Package private so it can be called from test code.
      */
-    synchronized final Log get(String path, int pos) {
-	if (pos >= path.length())
-	    // Reached end if the string.
+    final Branch get(String path, int pos) {
+	if (pos >= path.length()) {
+	    // Reached end if the string; find the logger.
 	    return this;
-	// Split
-	int dot = path.indexOf(".", pos + 1);
-	if (dot < 0)
-	    dot = path.length();
-	String name = path.substring(pos + 1, dot);
-	Log child = (Log)children.get(name);
-	if (child == null) {
-	    child = new Log(path.substring(0, dot), name, this);
-	    children.put(name, child);
+	} else {
+	    // Split
+	    int dot = path.indexOf(".", pos + 1);
+	    if (dot < 0)
+		dot = path.length();
+	    String name = path.substring(pos + 1, dot);
+	    Branch child = (Branch)children.get(name);
+	    if (child == null) {
+		child = new Branch(path.substring(0, dot), name);
+		children.put(name, child);
+	    }
+	    return child.get(path, dot);
 	}
-	return child.get(path, dot);
     }
 
-    private static final Log root = new Log();
-    /**
-     * Find the logger by the name KLASS.
-     */
-    public static Log get(String klass) {
-	return root.get(klass, -1);
-    }
     /**
-     * Find the logger by with KLASS's name.
+     * Return the requested level.
      */
-    public static Log get(Class klass) {
-	return root.get(klass.getName(), -1);
+    final Log get(Level level) {
+	int l = level.intValue();
+	if (loggers[l] == null) {
+	    loggers[l] = new Log(path, name, level,
+				 this.level.compareTo(level) >= 0);
+	}
+	return loggers[l];
     }
 
     /**
@@ -153,13 +134,13 @@ public final class Log {
      *
      * Package private to allow testing.
      */
-    synchronized final int complete(String incomplete, int pos,
-				    List candidates) {
+    final int complete(String incomplete, int pos,
+		       List candidates) {
 	int dot = incomplete.indexOf('.', pos + 1);
 	if (dot >= 0) {
 	    // More tokens to follow; recursively resolve.
 	    String name = incomplete.substring(pos + 1, dot);
-	    Log child = (Log)children.get(name);
+	    Branch child = (Branch)children.get(name);
 	    if (child == null)
 		return -1;
 	    else
@@ -176,7 +157,7 @@ public final class Log {
 	    case 0:
 		return -1;
 	    case 1:
-		Log child = (Log)children.get(name);
+		Branch child = (Branch)children.get(name);
 		if (child != null) {
 		    // The final NAME was an exact match for a child;
 		    // and there are no other possible completions
@@ -201,65 +182,4 @@ public final class Log {
 	    }
 	}
     }
-
-    /**
-     * Complete the logger path using constructed loggers.  Return the
-     * offset into incomplete where the completions apply, or -1 when
-     * no completions.
-     */
-    public static int complete(String incomplete, List candidates) {
-	return root.complete(incomplete, -1, candidates);
-    }
-
-    // Static?
-    private static PrintStream out = System.out;
-    static void set(PrintStream out) {
-	Log.out = out;
-    }
-
-    private void prefix() {
-	out.print(path);
-	out.print(": ");
-    }
-
-    private void prefix(Object o) {
-	out.print(path);
-	out.print("[");
-	out.print(o.toString());
-	out.print("]: ");
-    }
-
-    private void postfix() {
-	out.println();
-    }
-
-    // Add at will and on demand.
-    private void log(String s1) {
-	prefix();
-	out.print(s1);
-	postfix();
-    }
-    public final void fine(String s1) {
-	log(s1);
-    }
-    public final void finest(String s1) {
-	log(s1);
-    }
-
-    // Add at will and on demand.
-    private void log(Object self, String s1) {
-	prefix(self);
-	out.print(s1);
-	postfix();
-    }
-    public final void fine(Object self, String s1) {
-	if (level < Level.FINE_)
-	    return;
-	log(self, s1);
-    }
-    public final void finest(Object self, String s1) {
-	if (level < Level.FINEST_)
-	    return;
-	log(self, s1);
-    }
 }
diff --git a/frysk-sys/frysk/rsl/ChangeLog b/frysk-sys/frysk/rsl/ChangeLog
index a7f1335..2141ae3 100644
--- a/frysk-sys/frysk/rsl/ChangeLog
+++ b/frysk-sys/frysk/rsl/ChangeLog
@@ -1,5 +1,25 @@
 2007-12-07  Andrew Cagney  <cagney@redhat.com>
 
+	* LogOption.java: New file.
+	* Branch.java: New.
+	* Level.mkenum: Add MAX.
+	* Log.java (print(int)): New.
+	(print(long)): New.
+	(print(String)): New.
+	(print(Object)): New.
+	(print(int[])): New.
+	(print(long[])): New.
+	(print(String[])): New.
+	(print(Object[])): New.
+	(fine(...), finest(...)): New.
+	(Log()): Moved to Branch.
+	(children): Moved to Branch.
+	(fine(...), finest(...)): Delete.
+	(get(String,int)): Move to Branch.
+	(complete(String,int,List)): Move to Branch.
+	* package.html: Update.
+	* TestLog.java: Update.
+	
 	* TestLog.java (testCompletion()): New.
 	(checkComplete(String,int,String[])): New.
 	(testName()): New.
diff --git a/frysk-sys/frysk/rsl/Level.mkenum b/frysk-sys/frysk/rsl/Level.mkenum
index 5deb651..513ac9d 100644
--- a/frysk-sys/frysk/rsl/Level.mkenum
+++ b/frysk-sys/frysk/rsl/Level.mkenum
@@ -1,3 +1,4 @@
 NONE 0
 FINE 1
 FINEST 2
+MAX 3
diff --git a/frysk-sys/frysk/rsl/Log.java b/frysk-sys/frysk/rsl/Log.java
index 964f919..dfaaeb7 100644
--- a/frysk-sys/frysk/rsl/Log.java
+++ b/frysk-sys/frysk/rsl/Log.java
@@ -40,8 +40,6 @@
 package frysk.rsl;
 
 import java.io.PrintStream;
-import java.util.TreeMap;
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -49,23 +47,15 @@ import java.util.List;
  */
 public final class Log {
 
-    private int level;
     private final String path;
     private final String name;
-    private Log(String path, String name, Log parent) {
+    private final Level level;
+    private boolean logging;
+    Log(String path, String name, Level level, boolean logging) {
 	this.path = path;
-	this.level = parent.level;
 	this.name = name;
-    }
-
-    /**
-     * Create a root logger; package private so that test code can
-     * create their own root logger.
-     */
-    Log() {
-	this.level = 0;
-	this.path = "";
-	this.name = "";
+	this.level = level;
+	this.logging = logging;
     }
 
     public String toString() {
@@ -78,137 +68,61 @@ public final class Log {
     /**
      * Return the "basename" of the logger.
      */
-    public final String name() {
+    public String name() {
 	return name;
     }
     /**
      * Return the full path of the logger.
      */
-    public final String path() {
+    public String path() {
 	return path;
     }
-
-    private final TreeMap children = new TreeMap();
     /**
-     * Set this logger's logging level.
+     * The level at which this logger starts logging.
      */
-    public synchronized final Log set(Level level) {
-	this.level = level.intValue();
-	for (Iterator i = children.values().iterator(); i.hasNext(); ) {
-	    Log child = (Log)i.next();
-	    child.set(level);
-	}
-	return this;
+    public Level level() {
+	return level;
     }
     /**
-     * Return this loggers current logging level.
+     * Enable logging; package private.
      */
-    public final Level level() {
-	return Level.valueOf(level);
+    void set(boolean logging) {
+	this.logging = logging;
     }
 
     /**
-     * POS starts at -1, then points at "." or the end of the name.
-     * Package private so it can be called from test code.
+     * Return if this logger is currently enabled for logging.
      */
-    synchronized final Log get(String path, int pos) {
-	if (pos >= path.length())
-	    // Reached end if the string.
-	    return this;
-	// Split
-	int dot = path.indexOf(".", pos + 1);
-	if (dot < 0)
-	    dot = path.length();
-	String name = path.substring(pos + 1, dot);
-	Log child = (Log)children.get(name);
-	if (child == null) {
-	    child = new Log(path.substring(0, dot), name, this);
-	    children.put(name, child);
-	}
-	return child.get(path, dot);
+    public boolean logging() {
+	return logging;
     }
 
-    private static final Log root = new Log();
-    /**
-     * Find the logger by the name KLASS.
-     */
-    public static Log get(String klass) {
-	return root.get(klass, -1);
+    public static Branch get(String klass) {
+	synchronized (Branch.root) {
+	    return Branch.root.get(klass, -1);
+	}
     }
-    /**
-     * Find the logger by with KLASS's name.
-     */
-    public static Log get(Class klass) {
-	return root.get(klass.getName(), -1);
+    public static Log fine(String klass) {
+	return get(klass).get(Level.FINE);
+    }
+    public static Log finest(String klass) {
+	return get(klass).get(Level.FINEST);
     }
 
-    /**
-     * Complete the logger.  On entry, POS is either -1 or the
-     * location of the last DOT indicating further name completion is
-     * needed; or the length indicating that either a "." or " "
-     * completion is needed.
-     *
-     * Returns the offset into INCOMPLETE that the completions apply
-     * to, or -1.
-     *
-     * Package private to allow testing.
-     */
-    synchronized final int complete(String incomplete, int pos,
-				    List candidates) {
-	int dot = incomplete.indexOf('.', pos + 1);
-	if (dot >= 0) {
-	    // More tokens to follow; recursively resolve.
-	    String name = incomplete.substring(pos + 1, dot);
-	    Log child = (Log)children.get(name);
-	    if (child == null)
-		return -1;
-	    else
-		return child.complete(incomplete, dot, candidates);
-	} else {
-	    // Final token, scan children for all partial matches.
-	    String name = incomplete.substring(pos + 1);
-	    for (Iterator i = children.keySet().iterator(); i.hasNext(); ) {
-		String child = (String)i.next();
-		if (child.startsWith(name))
-		    candidates.add(child);
-	    }
-	    switch (candidates.size()) {
-	    case 0:
-		return -1;
-	    case 1:
-		Log child = (Log)children.get(name);
-		if (child != null) {
-		    // The final NAME was an exact match for a child;
-		    // and there are no other possible completions
-		    // (size == 1); change the expansion to either "."
-		    // (have children) or " " (childless).
-		    candidates.remove(0);
-		    synchronized (child) {
-			if (child.children.size() > 0) {
-			    candidates.add(".");
-			} else {
-			    candidates.add(" ");
-			}
-			return incomplete.length();
-		    }
-		} else {
-		    // A single partial completion e.g., <<foo<TAB>>>
-		    // -> <<foobar>>.
-		    return pos + 1;
-		}
-	    default:
-		return pos + 1;
-	    }
-	}
+    public static Branch get(Class klass) {
+	return get(klass.getName());
+    }
+    public static Log fine(Class klass) {
+	return fine(klass.getName());
+    }
+    public static Log finest(Class klass) {
+	return finest(klass.getName());
     }
 
-    /**
-     * Complete the logger path using constructed loggers.  Return the
-     * offset into incomplete where the completions apply, or -1 when
-     * no completions.
-     */
     public static int complete(String incomplete, List candidates) {
-	return root.complete(incomplete, -1, candidates);
+	synchronized (Branch.root) {
+	    return Branch.root.complete(incomplete, -1, candidates);
+	}


hooks/post-receive
--
frysk system monitor/debugger


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]