You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/11/07 14:36:34 UTC

svn commit: r1198733 [2/13] - in /incubator/jena/Scratch/AFS/Dev/trunk: src-archive/riot/comms/ src-archive/riot/comms/client/ src-archive/riot/comms/server0/ src-archive/riot/comms/server1/nio/ src-archive/riot/comms/server1/socket/ src-archive/riot/c...

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/comms/server1/token/Handler.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/comms/server1/token/Handler.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/comms/server1/token/Handler.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/comms/server1/token/Handler.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
 
-package riot.comms.server1.token;
-
-
-
-public interface Handler
-{
-    public void loop() ;
+package riot.comms.server1.token;
+
+
+
+public interface Handler
+{
+    public void loop() ;
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/comms/server1/token/HandlerFactory.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/comms/server1/token/HandlerFactory.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/comms/server1/token/HandlerFactory.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/comms/server1/token/HandlerFactory.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,13 +16,13 @@
  * limitations under the License.
  */
 
-package riot.comms.server1.token;
-
-import riot.comms.TokenStreamEndpoint ;
-
-
-/** Factory for handlers of new channels */
-public interface HandlerFactory
-{
-    public Handler create(TokenStreamEndpoint stream) ;
+package riot.comms.server1.token;
+
+import riot.comms.TokenStreamEndpoint ;
+
+
+/** Factory for handlers of new channels */
+public interface HandlerFactory
+{
+    public Handler create(TokenStreamEndpoint stream) ;
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/io/section/TokenInputSection.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/io/section/TokenInputSection.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/io/section/TokenInputSection.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/io/section/TokenInputSection.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,98 +16,98 @@
  * limitations under the License.
  */
 
-package riot.io.section;
-
-import java.util.Iterator ;
-import java.util.List ;
-import java.util.NoSuchElementException ;
-
-import org.openjena.atlas.lib.Pool ;
-import org.openjena.riot.tokens.Token ;
-import riot.comms.End ;
-import riot.comms.TokenComms ;
-import riot.comms.TokenStreamEndpoint ;
-import riot.io.TokenInputStream ;
-
-
-
-/** Iterate until the endLog marker is seen.
- */
-
-public class TokenInputSection implements TokenInputStream
-{
-    // Should be a TokenInputStream (interface)
-    
-    private boolean finished = false ;
-    private final TokenInputStream tokens ;
-    private List<Token> list = null ;
-    private Pool<TokenStreamEndpoint> pool ;
-    private End atEnd ;
-    
-    public TokenInputSection(TokenInputStream tokenInputStream, End atEnd)
-    {
-        this.tokens = tokenInputStream ;
-        this.atEnd = atEnd ;
-    }
-
-    @Override
-    public boolean hasNext()
-    {
-        if ( finished )
-            return false ;
-        if ( list != null )
-            return true ;
-        if ( ! tokens.hasNext() )
-        {
-            close() ;
-            finished = true ;
-            return false ;
-        }
-        
-        list = tokens.next() ;
-        if ( TokenComms.isEndSectionMarker(list) || TokenComms.isEndStreamMarker(list)) 
-        {
-            close() ;
-            finished = true ;
-            return false ;
-        }
-        // It's not the endLog of a section. 
-        return true ;
-    }
-
-    @Override
-    public List<Token> next()
-    {
-        if ( ! hasNext() )
-            throw new NoSuchElementException() ;
-        List<Token> r = list ;
-        list = null ;
-        return r ;
-    }
-    
-    public List<Token> nextOrNull()
-    {
-        if ( ! hasNext() )
-            return null ;
-        List<Token> r = list ;
-        list = null ;
-        return r ;
-    }
-    
-    @Override
-    public void remove()
-    { throw new UnsupportedOperationException() ; }
-
-    @Override
-    public Iterator<List<Token>> iterator()
-    {
-        return this ;
-    }
-
-    @Override
-    public void close()
-    {
-        if ( atEnd != null )
-            atEnd.end() ;
-    }
+package riot.io.section;
+
+import java.util.Iterator ;
+import java.util.List ;
+import java.util.NoSuchElementException ;
+
+import org.openjena.atlas.lib.Pool ;
+import org.openjena.riot.tokens.Token ;
+import riot.comms.End ;
+import riot.comms.TokenComms ;
+import riot.comms.TokenStreamEndpoint ;
+import riot.io.TokenInputStream ;
+
+
+
+/** Iterate until the endLog marker is seen.
+ */
+
+public class TokenInputSection implements TokenInputStream
+{
+    // Should be a TokenInputStream (interface)
+    
+    private boolean finished = false ;
+    private final TokenInputStream tokens ;
+    private List<Token> list = null ;
+    private Pool<TokenStreamEndpoint> pool ;
+    private End atEnd ;
+    
+    public TokenInputSection(TokenInputStream tokenInputStream, End atEnd)
+    {
+        this.tokens = tokenInputStream ;
+        this.atEnd = atEnd ;
+    }
+
+    @Override
+    public boolean hasNext()
+    {
+        if ( finished )
+            return false ;
+        if ( list != null )
+            return true ;
+        if ( ! tokens.hasNext() )
+        {
+            close() ;
+            finished = true ;
+            return false ;
+        }
+        
+        list = tokens.next() ;
+        if ( TokenComms.isEndSectionMarker(list) || TokenComms.isEndStreamMarker(list)) 
+        {
+            close() ;
+            finished = true ;
+            return false ;
+        }
+        // It's not the endLog of a section. 
+        return true ;
+    }
+
+    @Override
+    public List<Token> next()
+    {
+        if ( ! hasNext() )
+            throw new NoSuchElementException() ;
+        List<Token> r = list ;
+        list = null ;
+        return r ;
+    }
+    
+    public List<Token> nextOrNull()
+    {
+        if ( ! hasNext() )
+            return null ;
+        List<Token> r = list ;
+        list = null ;
+        return r ;
+    }
+    
+    @Override
+    public void remove()
+    { throw new UnsupportedOperationException() ; }
+
+    @Override
+    public Iterator<List<Token>> iterator()
+    {
+        return this ;
+    }
+
+    @Override
+    public void close()
+    {
+        if ( atEnd != null )
+            atEnd.end() ;
+    }
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/io/section/TokenOutputSection.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/io/section/TokenOutputSection.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/io/section/TokenOutputSection.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-archive/riot/io/section/TokenOutputSection.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,30 +16,30 @@
  * limitations under the License.
  */
 
-package riot.io.section;
-
-import riot.comms.End ;
-import riot.io.TokenOutputStream ;
-import riot.io.TokenOutputStreamWrapper ;
-
-public class TokenOutputSection extends TokenOutputStreamWrapper
-{
-    private TokenOutputStream stream ;
-    private End atEnd ;
-
-    public TokenOutputSection(TokenOutputStream stream, End atEnd)
-    {
-        super(stream) ;
-        this.atEnd = atEnd ;
-        startSection() ;
-    }
-    
-    @Override
-    public void close()
-    { 
-        endSection() ;
-        flush() ; 
-        if ( atEnd != null )
-            atEnd.end() ;
-    } 
+package riot.io.section;
+
+import riot.comms.End ;
+import riot.io.TokenOutputStream ;
+import riot.io.TokenOutputStreamWrapper ;
+
+public class TokenOutputSection extends TokenOutputStreamWrapper
+{
+    private TokenOutputStream stream ;
+    private End atEnd ;
+
+    public TokenOutputSection(TokenOutputStream stream, End atEnd)
+    {
+        super(stream) ;
+        this.atEnd = atEnd ;
+        startSection() ;
+    }
+    
+    @Override
+    public void close()
+    { 
+        endSection() ;
+        flush() ; 
+        if ( atEnd != null )
+            atEnd.end() ;
+    } 
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/BindingN.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/BindingN.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/BindingN.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/BindingN.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/DevAFS.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/DevAFS.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/DevAFS.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/DevAFS.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,26 +16,26 @@
  * limitations under the License.
  */
 
-package dev;
-
-public class DevAFS
-{
-    // De-mess top level directories.
-    // http://www.mongodb.org/display/DOCS/BSON
-    
-    /* Storage toys
-     * + FileHeader can contain quite a lot of info. ==> metafile. 
-     * + Variable length entries
-     * 
-     * Classes:
-     *   Fix length for logical-physical.
-     * Three files:
-     *   Data file - raw bytes
-     *   Offset file - (size, location) slots
-     *     -size => free
-     *   Free block file - (id, next) for a singly linked list
-     *     List starts are firts few blocks where (id = -max size , next=start)   
-     * Or: minimum size for a (fiuxed) chunk includes space for the free chain to be managed
-     */
-    
+package dev;
+
+public class DevAFS
+{
+    // De-mess top level directories.
+    // http://www.mongodb.org/display/DOCS/BSON
+    
+    /* Storage toys
+     * + FileHeader can contain quite a lot of info. ==> metafile. 
+     * + Variable length entries
+     * 
+     * Classes:
+     *   Fix length for logical-physical.
+     * Three files:
+     *   Data file - raw bytes
+     *   Offset file - (size, location) slots
+     *     -size => free
+     *   Free block file - (id, next) for a singly linked list
+     *     List starts are firts few blocks where (id = -max size , next=start)   
+     * Or: minimum size for a (fiuxed) chunk includes space for the free chain to be managed
+     */
+    
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/LogMain.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/LogMain.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/LogMain.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/LogMain.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,116 +16,116 @@
  * limitations under the License.
  */
 
-package dev;
-
-import java.io.ByteArrayInputStream ;
-import java.io.IOException ;
-import java.io.UnsupportedEncodingException ;
-
-import org.openjena.atlas.lib.StrUtils ;
-import org.openjena.atlas.logging.Log ;
-import org.openjena.atlas.logging.java.ConsoleHandlerStdout ;
-import org.slf4j.LoggerFactory ;
-
-public class LogMain
-{
-    static { Log.setLog4j() ; }
-    public static void main(String ... args) //throws SecurityException, IOException
-    {
-        mainSLF4j() ;
-        mainJUL() ;
-    }
-    
-    public static void logNetwork()
-    {
-        // org.apache.log4j.net.SimpleSocketServer 6000 log4j.properties
-        // org.apache.log4j.net.SocketServer 6000 log4j.properties DIR
-        //   log4j.properties logging
-        //   DIR is one config file per host
-
-        Log.setLog4j("log4j-net.properties") ;    // Re-initialize log4j.
-        LoggerFactory.getLogger("HELLO").info("Message") ;
-        System.out.println("Exit") ;
-        System.exit(0) ;
-    }
-    
-    private static void mainSLF4j()
-    {
-
-        org.slf4j.Logger logger_slf4j = org.slf4j.LoggerFactory.getLogger(dev.RunAFS.class) ;
-        logger_slf4j.error("org.slf4j") ;
-    }        
-        
-        
-        
-    private static void mainJUL()
-    {
-        String s = StrUtils.strjoinNL(
-                                      // Handlers - output
-                                      // All (comma separated)
-                                      //"handlers=java.util.logging.ConsoleHandler,atlas.logging.java.ConsoleHandlerStdout",
-                                      
-                                      // Atlas.
-                                      //"handlers=atlas.logging.java.ConsoleHandlerStdout" ,
-                                      
-                                      // Provided by the JRE
-                                      "handlers=java.util.logging.ConsoleHandler" ,
-                                      
-                                      // Formatting and levels
-                                      //"atlas.logging.java.ConsoleHandlerStdout.level=ALL",
-                                      //"atlas.logging.java.ConsoleHandlerStdout.formatter=atlas.logging.java.TextFormatter",
-                                      
-                                      "java.util.logging.ConsoleHandler.level=INFO"
-                                      //, "java.util.logging.ConsoleHandler.formatter=atlas.logging.java.TextFormatter"
-                                      ) ;   
-        
-        try
-        {
-            java.util.logging.LogManager.getLogManager().readConfiguration(new ByteArrayInputStream(s.getBytes("UTF-8"))) ;
-        } catch (SecurityException ex)
-        {
-            ex.printStackTrace();
-        } catch (UnsupportedEncodingException ex)
-        {
-            ex.printStackTrace();
-        } catch (IOException ex)
-        {
-            ex.printStackTrace();
-        }
-
-        //System.setProperty("java.util.logging.config.file", "logging.properties") ;
-        //LogManager.getLogManager().readConfiguration() ;
-        
-        java.util.logging.Logger log = java.util.logging.Logger.getLogger(RunAFS.class.getName()) ;
-        //log.setLevel(Level.WARNING) ;
-
-        // Default output, Atlas/Java logging formatter.
-        log.info("Hello World") ;
-        
-        // Because the parent has the plumbed in ConsoleHandler
-        log.setUseParentHandlers(false) ;
-        log.addHandler(new ConsoleHandlerStdout()) ;
-        log.info("Hello World (part 2)") ;
-         
-//        // -- Remove any ConsoleHanlder
-//        Handler[] handlers = log.getHandlers() ;
-//        for ( Handler h : handlers )
-//        {
-//            if ( h instanceof ConsoleHandler )
-//                log.removeHandler(h) ;
-//        }
-        log.info("Hello World (part 3)") ;
-        System.out.println("(End)") ;
-        
-        
-//        // ---- 
-//        System.setProperty("log4j.configuration", "file:log4j.properties") ;
-//        
-//        
-//        org.apache.log4j.Logger log4j = org.apache.log4j.Logger.getLogger(Run.class);
-//        log4j.setLevel(org.apache.log4j.Level.ALL) ;
-//        log4j.info("Log4j direct") ;
-        
-        // Must have the right logger adapter on the classpath: slf4j-log4j... or slf4j-
-    }
+package dev;
+
+import java.io.ByteArrayInputStream ;
+import java.io.IOException ;
+import java.io.UnsupportedEncodingException ;
+
+import org.openjena.atlas.lib.StrUtils ;
+import org.openjena.atlas.logging.Log ;
+import org.openjena.atlas.logging.java.ConsoleHandlerStdout ;
+import org.slf4j.LoggerFactory ;
+
+public class LogMain
+{
+    static { Log.setLog4j() ; }
+    public static void main(String ... args) //throws SecurityException, IOException
+    {
+        mainSLF4j() ;
+        mainJUL() ;
+    }
+    
+    public static void logNetwork()
+    {
+        // org.apache.log4j.net.SimpleSocketServer 6000 log4j.properties
+        // org.apache.log4j.net.SocketServer 6000 log4j.properties DIR
+        //   log4j.properties logging
+        //   DIR is one config file per host
+
+        Log.setLog4j("log4j-net.properties") ;    // Re-initialize log4j.
+        LoggerFactory.getLogger("HELLO").info("Message") ;
+        System.out.println("Exit") ;
+        System.exit(0) ;
+    }
+    
+    private static void mainSLF4j()
+    {
+
+        org.slf4j.Logger logger_slf4j = org.slf4j.LoggerFactory.getLogger(dev.RunAFS.class) ;
+        logger_slf4j.error("org.slf4j") ;
+    }        
+        
+        
+        
+    private static void mainJUL()
+    {
+        String s = StrUtils.strjoinNL(
+                                      // Handlers - output
+                                      // All (comma separated)
+                                      //"handlers=java.util.logging.ConsoleHandler,atlas.logging.java.ConsoleHandlerStdout",
+                                      
+                                      // Atlas.
+                                      //"handlers=atlas.logging.java.ConsoleHandlerStdout" ,
+                                      
+                                      // Provided by the JRE
+                                      "handlers=java.util.logging.ConsoleHandler" ,
+                                      
+                                      // Formatting and levels
+                                      //"atlas.logging.java.ConsoleHandlerStdout.level=ALL",
+                                      //"atlas.logging.java.ConsoleHandlerStdout.formatter=atlas.logging.java.TextFormatter",
+                                      
+                                      "java.util.logging.ConsoleHandler.level=INFO"
+                                      //, "java.util.logging.ConsoleHandler.formatter=atlas.logging.java.TextFormatter"
+                                      ) ;   
+        
+        try
+        {
+            java.util.logging.LogManager.getLogManager().readConfiguration(new ByteArrayInputStream(s.getBytes("UTF-8"))) ;
+        } catch (SecurityException ex)
+        {
+            ex.printStackTrace();
+        } catch (UnsupportedEncodingException ex)
+        {
+            ex.printStackTrace();
+        } catch (IOException ex)
+        {
+            ex.printStackTrace();
+        }
+
+        //System.setProperty("java.util.logging.config.file", "logging.properties") ;
+        //LogManager.getLogManager().readConfiguration() ;
+        
+        java.util.logging.Logger log = java.util.logging.Logger.getLogger(RunAFS.class.getName()) ;
+        //log.setLevel(Level.WARNING) ;
+
+        // Default output, Atlas/Java logging formatter.
+        log.info("Hello World") ;
+        
+        // Because the parent has the plumbed in ConsoleHandler
+        log.setUseParentHandlers(false) ;
+        log.addHandler(new ConsoleHandlerStdout()) ;
+        log.info("Hello World (part 2)") ;
+         
+//        // -- Remove any ConsoleHanlder
+//        Handler[] handlers = log.getHandlers() ;
+//        for ( Handler h : handlers )
+//        {
+//            if ( h instanceof ConsoleHandler )
+//                log.removeHandler(h) ;
+//        }
+        log.info("Hello World (part 3)") ;
+        System.out.println("(End)") ;
+        
+        
+//        // ---- 
+//        System.setProperty("log4j.configuration", "file:log4j.properties") ;
+//        
+//        
+//        org.apache.log4j.Logger log4j = org.apache.log4j.Logger.getLogger(Run.class);
+//        log4j.setLevel(org.apache.log4j.Level.ALL) ;
+//        log4j.info("Log4j direct") ;
+        
+        // Must have the right logger adapter on the classpath: slf4j-log4j... or slf4j-
+    }
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/RunAFS.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/RunAFS.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/RunAFS.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/RunAFS.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package dev;
+package dev;
 
 import java.util.Iterator ;
 
@@ -31,16 +31,16 @@ import com.hp.hpl.jena.iri.IRIFactory ;
 import com.hp.hpl.jena.iri.Violation ;
 import com.hp.hpl.jena.iri.ViolationCodes ;
 import com.hp.hpl.jena.tdb.base.record.Record ;
-
-public class RunAFS
-{
-    static { Log.setLog4j() ; }
-    
-    public static void exit(int code)
-    {
-        System.out.println("DONE") ;
-        System.exit(code) ;
-    }
+
+public class RunAFS
+{
+    static { Log.setLog4j() ; }
+    
+    public static void exit(int code)
+    {
+        System.out.println("DONE") ;
+        System.exit(code) ;
+    }
     
     static byte[] key1 = { 2 , 4 , 6 , 8  } ;
     static byte[] key2 = { 2 , 4 , 6 , 10  } ;
@@ -48,8 +48,8 @@ public class RunAFS
     static byte[] key4 = { 2 , 4 , 6,  8 , 10 } ;
     static byte[] key5 = { 2 , 4 , 3 , 1 } ;
     static byte[] key6 = { 0 , 1 , 2 , 3 , 4  } ;
-    
-    public static void main(String ... args) throws Exception
+    
+    public static void main(String ... args) throws Exception
     {
         RadixTree t = new RadixTree() ;
         byte[][] keys = { key1, key2, key3, key4, key5, key6 } ;
@@ -105,151 +105,151 @@ public class RunAFS
 //        return sb.toString() ;
 //    }
 
-    static IRIFactory iriFactory = new IRIFactory();
-    static {
-        // IRIFactory.iriImplementation() ...
-        iriFactory.useSpecificationIRI(true);
-        iriFactory.useSchemeSpecificRules("*",true);
-
-        iriFactory.shouldViolation(false,true);
-
-        // Moderate it -- allow unwise chars and any scheme name.
-        iriFactory.setIsError(ViolationCodes.UNWISE_CHARACTER,false);
-        iriFactory.setIsWarning(ViolationCodes.UNWISE_CHARACTER,false);
-
-        iriFactory.setIsError(ViolationCodes.UNREGISTERED_IANA_SCHEME,false);
-        iriFactory.setIsWarning(ViolationCodes.UNREGISTERED_IANA_SCHEME,false);
-
-        iriFactory.create("");
-
-    }
-    
-    private static void iriTest(String iriStr)
-    {
-        System.out.println("IRI =  "+iriStr) ;
-        IRIFactory factory = iriFactory ;
-        
-        IRI iri = factory.create(iriStr) ;
-        System.out.println("IRI => "+iri.toDisplayString()) ;
-        
-        
-        Iterator<Violation> iter = iri.violations(true) ;
-        for ( ; iter.hasNext();  )
-        {
-            Violation v = iter.next();
-            String x = (v.isError()?"ERROR":"WARN ") ;
-            
-            int code = v.getViolationCode() ;
-            
-//            // Treat these with low priority.
-//            if ( code == Violation.LOWERCASE_PREFERRED ||
-//                code == Violation.PERCENT_ENCODING_SHOULD_BE_UPPERCASE )
-//            {
-//                continue ;
-//            }
-            
-            System.out.printf("%s  %s\n", x, v.getShortMessage()) ;
-        }
-    }
-    
-    private static void varBlock()
-    {
-        byte[] d1 = {1,2,3,4} ;
-        byte[] d2 = {(byte)0xFF, (byte)0xFE} ;
-
-        byte[] d3 = {5,4,5,4,3,2,3,2,1,1} ;
-        byte[] d4 = {(byte)0xFF, (byte)0xFE, (byte)0xFD, (byte)0xFC, (byte)0xFB} ;
-        
-        {
-            VarRecordBuffer vrb = new VarRecordBuffer(50) ;
-            vrb.dump();
-            vrb.put(d1,d2) ;
-            vrb.dump();
-            vrb.put(d3,d4) ;
-            vrb.dump();
-            System.out.println(vrb) ;
-            Record r = vrb.get(0) ;
-
-            System.out.println(r) ;
-            System.exit(0) ;
-        }
-        
-        VarRecordBuffer vrb = new VarRecordBuffer(40) ;
-        byte[] k1 = new byte[]{1,2} ;
-        byte[] v1 = new byte[]{(byte)0xA9, (byte)0xA8, (byte)0xA7 }; //, (byte)0xA6} ;
-
-        byte[] k2 = new byte[]{3,4} ;
-        byte[] v2 = new byte[]{(byte)0xFF, (byte)0xFE, (byte)0xFD, (byte)0xFC} ;
-        
-        byte[] k3 = new byte[]{5,6} ;
-        byte[] v3 = new byte[]{(byte)0xBF, (byte)0xBE} ;//, (byte)0xBD, (byte)0xBC} ;
-        
-        //byte[] v3 = new byte[100] ;
-
-        divider() ;
-
-        boolean PRINT = false ;
-            
-        if ( PRINT ) System.out.println("k="+str(k1)+", v="+str(v1)) ;
-        vrb.put(0, k1, v1) ;
-        if ( PRINT ) vrb.dump();
-        if ( PRINT ) System.out.println(vrb) ;
-
-        if ( PRINT )divider() ;
-
-        // Push up.
-        if ( PRINT ) System.out.println("k="+str(k2)+", v="+str(v2)) ;
-        vrb.put(0, k2, v2) ;
-        if ( PRINT ) vrb.dump();
-        if ( PRINT ) System.out.println(vrb) ;
-
-        if ( PRINT ) divider() ;
-        
-        if ( PRINT ) System.out.println("k="+str(k3)+", v="+str(v3)) ;
-        vrb.put(2, k3, v3) ;
-        if ( PRINT ) vrb.dump();
-        if ( PRINT ) System.out.println(vrb) ;
-
-        PRINT = false ;
-        if ( PRINT ) divider() ;
-        if ( PRINT ) vrb.dump();
-        if ( PRINT ) System.out.println(vrb) ;
-        vrb.delete(1) ;
-        if ( PRINT ) vrb.dump();
-        System.out.println(vrb) ;
-        
-        
-    }
-
-    private static String str(byte[] bytes)
-    {
-        StringBuilder sb = new StringBuilder() ;
-        char sep = 0 ;
-        for ( byte b : bytes )
-        {
-            if ( sep != 0 )
-                sb.append(sep) ;
-            else
-                sep = ' ' ;
-                
-            sb.append(String.format("%02X", b)) ;
-        }
-        return sb.toString() ;
-    }
-
- 
-    // ---- Helpers
-    
-    private static final String NL = "\n" ;
-
-    public static String divider = "---- ----" ;
-
-    private static String nextDivider = null ;
-    
-    public static void divider()
-    {
-        if ( nextDivider != null )
-            System.out.println(nextDivider) ;
-        nextDivider = divider ;
-    }
+    static IRIFactory iriFactory = new IRIFactory();
+    static {
+        // IRIFactory.iriImplementation() ...
+        iriFactory.useSpecificationIRI(true);
+        iriFactory.useSchemeSpecificRules("*",true);
+
+        iriFactory.shouldViolation(false,true);
+
+        // Moderate it -- allow unwise chars and any scheme name.
+        iriFactory.setIsError(ViolationCodes.UNWISE_CHARACTER,false);
+        iriFactory.setIsWarning(ViolationCodes.UNWISE_CHARACTER,false);
+
+        iriFactory.setIsError(ViolationCodes.UNREGISTERED_IANA_SCHEME,false);
+        iriFactory.setIsWarning(ViolationCodes.UNREGISTERED_IANA_SCHEME,false);
+
+        iriFactory.create("");
+
+    }
+    
+    private static void iriTest(String iriStr)
+    {
+        System.out.println("IRI =  "+iriStr) ;
+        IRIFactory factory = iriFactory ;
+        
+        IRI iri = factory.create(iriStr) ;
+        System.out.println("IRI => "+iri.toDisplayString()) ;
+        
+        
+        Iterator<Violation> iter = iri.violations(true) ;
+        for ( ; iter.hasNext();  )
+        {
+            Violation v = iter.next();
+            String x = (v.isError()?"ERROR":"WARN ") ;
+            
+            int code = v.getViolationCode() ;
+            
+//            // Treat these with low priority.
+//            if ( code == Violation.LOWERCASE_PREFERRED ||
+//                code == Violation.PERCENT_ENCODING_SHOULD_BE_UPPERCASE )
+//            {
+//                continue ;
+//            }
+            
+            System.out.printf("%s  %s\n", x, v.getShortMessage()) ;
+        }
+    }
+    
+    private static void varBlock()
+    {
+        byte[] d1 = {1,2,3,4} ;
+        byte[] d2 = {(byte)0xFF, (byte)0xFE} ;
+
+        byte[] d3 = {5,4,5,4,3,2,3,2,1,1} ;
+        byte[] d4 = {(byte)0xFF, (byte)0xFE, (byte)0xFD, (byte)0xFC, (byte)0xFB} ;
+        
+        {
+            VarRecordBuffer vrb = new VarRecordBuffer(50) ;
+            vrb.dump();
+            vrb.put(d1,d2) ;
+            vrb.dump();
+            vrb.put(d3,d4) ;
+            vrb.dump();
+            System.out.println(vrb) ;
+            Record r = vrb.get(0) ;
+
+            System.out.println(r) ;
+            System.exit(0) ;
+        }
+        
+        VarRecordBuffer vrb = new VarRecordBuffer(40) ;
+        byte[] k1 = new byte[]{1,2} ;
+        byte[] v1 = new byte[]{(byte)0xA9, (byte)0xA8, (byte)0xA7 }; //, (byte)0xA6} ;
+
+        byte[] k2 = new byte[]{3,4} ;
+        byte[] v2 = new byte[]{(byte)0xFF, (byte)0xFE, (byte)0xFD, (byte)0xFC} ;
+        
+        byte[] k3 = new byte[]{5,6} ;
+        byte[] v3 = new byte[]{(byte)0xBF, (byte)0xBE} ;//, (byte)0xBD, (byte)0xBC} ;
+        
+        //byte[] v3 = new byte[100] ;
+
+        divider() ;
+
+        boolean PRINT = false ;
+            
+        if ( PRINT ) System.out.println("k="+str(k1)+", v="+str(v1)) ;
+        vrb.put(0, k1, v1) ;
+        if ( PRINT ) vrb.dump();
+        if ( PRINT ) System.out.println(vrb) ;
+
+        if ( PRINT )divider() ;
+
+        // Push up.
+        if ( PRINT ) System.out.println("k="+str(k2)+", v="+str(v2)) ;
+        vrb.put(0, k2, v2) ;
+        if ( PRINT ) vrb.dump();
+        if ( PRINT ) System.out.println(vrb) ;
+
+        if ( PRINT ) divider() ;
+        
+        if ( PRINT ) System.out.println("k="+str(k3)+", v="+str(v3)) ;
+        vrb.put(2, k3, v3) ;
+        if ( PRINT ) vrb.dump();
+        if ( PRINT ) System.out.println(vrb) ;
+
+        PRINT = false ;
+        if ( PRINT ) divider() ;
+        if ( PRINT ) vrb.dump();
+        if ( PRINT ) System.out.println(vrb) ;
+        vrb.delete(1) ;
+        if ( PRINT ) vrb.dump();
+        System.out.println(vrb) ;
+        
+        
+    }
+
+    private static String str(byte[] bytes)
+    {
+        StringBuilder sb = new StringBuilder() ;
+        char sep = 0 ;
+        for ( byte b : bytes )
+        {
+            if ( sep != 0 )
+                sb.append(sep) ;
+            else
+                sep = ' ' ;
+                
+            sb.append(String.format("%02X", b)) ;
+        }
+        return sb.toString() ;
+    }
+
+ 
+    // ---- Helpers
+    
+    private static final String NL = "\n" ;
+
+    public static String divider = "---- ----" ;
+
+    private static String nextDivider = null ;
+    
+    public static void divider()
+    {
+        if ( nextDivider != null )
+            System.out.println(nextDivider) ;
+        nextDivider = divider ;
+    }
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/SizeIndexes.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/SizeIndexes.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/SizeIndexes.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/SizeIndexes.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/StringUTF8.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/StringUTF8.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/StringUTF8.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/StringUTF8.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,85 +16,85 @@
  * limitations under the License.
  */
 
-package dev;
-
-import java.nio.ByteBuffer ;
-
-import migrate.lib.VarInteger ;
-import org.openjena.atlas.lib.Pair ;
-import org.openjena.atlas.lib.StrUtils ;
-
-public class StringUTF8
-{
-    // See also:
-    // http://www.unicode.org/reports/tr6/ -- a compression scheme for Unicode. 
-    // ftp://ftp.unicode.org/Public/PROGRAMS/SCSU/
-    
-    
-    /* A compact string.
-     * Stored as:
-     * [int - allocation space]
-     * int - length
-     * bytes - UTF8 
-     * except:
-     *   ints are held as Varints
-     *   bytes (FF, 00) is "http://"
-     *   bytes (FF, 01) is "http://www."
-     *   
-     *   FF is an illegal UTF8 byte, as a first byte of a UTF-8 codepoint sequence.
-     *   F5-FF would be 4 byte sequences above 10FFFF
-     *   80-BF not in a first byte.  
-     *   
-     *   Eventually, will be a slice of a very large ByteBuffer and we will do our own malloc.
-     *   
-     * 00000000-01111111   00-7F   0-127       Single-byte encoding (compatible with US-ASCII)
-     * 10000000-10111111   80-BF   128-191     Second, third, or fourth byte of a multi-byte sequence
-     * 11000000-11000001   C0-C1   192-193     Overlong encoding: start of 2-byte sequence, but would encode a code point ≤ 127
-     * 11000010-11011111   C2-DF   194-223     Start of 2-byte sequence
-     * 11100000-11101111   E0-EF   224-239     Start of 3-byte sequence
-     * 11110000-11110100   F0-F4   240-244     Start of 4-byte sequence
-     * 11110101-11110111   F5-F7   245-247     Restricted by RFC 3629: start of 4-byte sequence for codepoint above 10FFFF
-     * 11111000-11111011   F8-FB   248-251     Restricted by RFC 3629: start of 5-byte sequence
-     * 11111100-11111101   FC-FD   252-253     Restricted by RFC 3629: start of 6-byte sequence
-     * 11111110-11111111   FE-FF   254-255     Invalid: not defined by original UTF-8 specification
-     *     
-     */
-    
-    public static StringUTF8 alloc(String string)
-    {
-        return null ;
-    }
-    
-    // V1 - object allocation.
-    
-    private VarInteger length ;
-    private ByteBuffer bytes ;
-    private StringUTF8(String string)
-    {
-        // A copy ...
-        byte[] rawbytes = StrUtils.asUTF8bytes(string) ;
-        bytes = ByteBuffer.wrap(rawbytes) ;
-        length = VarInteger.valueOf(rawbytes.length) ;
-    }
-    
-    public String asString() {return StrUtils.fromUTF8bytes(bytes.array()) ; }
-    
-    @Override
-    public String toString() { return asString() ; }
-    
-    
-    static ByteBuffer space1 = ByteBuffer.allocate(1000*1000) ;
-    
-    private static Pair<VarInteger, VarInteger> allocSpace(String string)
-    {
-        return null ;
-    }
-    
-    private static ByteBuffer allocSpace(VarInteger allocSpaceId, VarInteger allocId)
-    {
-        if ( allocSpaceId.value() != 0 )
-            throw new IllegalArgumentException() ;
-        return space1 ;
-    }
-    
+package dev;
+
+import java.nio.ByteBuffer ;
+
+import migrate.lib.VarInteger ;
+import org.openjena.atlas.lib.Pair ;
+import org.openjena.atlas.lib.StrUtils ;
+
+public class StringUTF8
+{
+    // See also:
+    // http://www.unicode.org/reports/tr6/ -- a compression scheme for Unicode. 
+    // ftp://ftp.unicode.org/Public/PROGRAMS/SCSU/
+    
+    
+    /* A compact string.
+     * Stored as:
+     * [int - allocation space]
+     * int - length
+     * bytes - UTF8 
+     * except:
+     *   ints are held as Varints
+     *   bytes (FF, 00) is "http://"
+     *   bytes (FF, 01) is "http://www."
+     *   
+     *   FF is an illegal UTF8 byte, as a first byte of a UTF-8 codepoint sequence.
+     *   F5-FF would be 4 byte sequences above 10FFFF
+     *   80-BF not in a first byte.  
+     *   
+     *   Eventually, will be a slice of a very large ByteBuffer and we will do our own malloc.
+     *   
+     * 00000000-01111111   00-7F   0-127       Single-byte encoding (compatible with US-ASCII)
+     * 10000000-10111111   80-BF   128-191     Second, third, or fourth byte of a multi-byte sequence
+     * 11000000-11000001   C0-C1   192-193     Overlong encoding: start of 2-byte sequence, but would encode a code point ≤ 127
+     * 11000010-11011111   C2-DF   194-223     Start of 2-byte sequence
+     * 11100000-11101111   E0-EF   224-239     Start of 3-byte sequence
+     * 11110000-11110100   F0-F4   240-244     Start of 4-byte sequence
+     * 11110101-11110111   F5-F7   245-247     Restricted by RFC 3629: start of 4-byte sequence for codepoint above 10FFFF
+     * 11111000-11111011   F8-FB   248-251     Restricted by RFC 3629: start of 5-byte sequence
+     * 11111100-11111101   FC-FD   252-253     Restricted by RFC 3629: start of 6-byte sequence
+     * 11111110-11111111   FE-FF   254-255     Invalid: not defined by original UTF-8 specification
+     *     
+     */
+    
+    public static StringUTF8 alloc(String string)
+    {
+        return null ;
+    }
+    
+    // V1 - object allocation.
+    
+    private VarInteger length ;
+    private ByteBuffer bytes ;
+    private StringUTF8(String string)
+    {
+        // A copy ...
+        byte[] rawbytes = StrUtils.asUTF8bytes(string) ;
+        bytes = ByteBuffer.wrap(rawbytes) ;
+        length = VarInteger.valueOf(rawbytes.length) ;
+    }
+    
+    public String asString() {return StrUtils.fromUTF8bytes(bytes.array()) ; }
+    
+    @Override
+    public String toString() { return asString() ; }
+    
+    
+    static ByteBuffer space1 = ByteBuffer.allocate(1000*1000) ;
+    
+    private static Pair<VarInteger, VarInteger> allocSpace(String string)
+    {
+        return null ;
+    }
+    
+    private static ByteBuffer allocSpace(VarInteger allocSpaceId, VarInteger allocId)
+    {
+        if ( allocSpaceId.value() != 0 )
+            throw new IllegalArgumentException() ;
+        return space1 ;
+    }
+    
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/TestModelCreation.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/TestModelCreation.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/TestModelCreation.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/TestModelCreation.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,29 +16,29 @@
  * limitations under the License.
  */
 
-package dev;
-
-import java.util.HashMap ;
-import java.util.Map ;
-
-import com.hp.hpl.jena.sparql.util.Timer ;
-
-public class TestModelCreation
-{
-    public static void main(String...argv)
-    {
-        //org.openjena.atlas.logging.Log.setLog4j() ;
-        int N = 1000000 ;
-        Object[] objects = new Object[100] ;
-        Timer t = new Timer() ;
-        t.startTimer() ;
-        for ( int i = 0 ; i < N; i++ )
-        {
-            //Model m = ModelFactory.createDefaultModel() ;
-            Map<Object, Object> m = new HashMap<Object, Object>() ;
-            objects[i%100] = m ;
-        }
-        long millis = t.endTimer() ;
-        System.out.printf("Time = %.2fs for %,d creations. Rate = %,.2f objects/s\n", millis/1000.0, N, N*(1000.0/millis)) ;
-    }
+package dev;
+
+import java.util.HashMap ;
+import java.util.Map ;
+
+import com.hp.hpl.jena.sparql.util.Timer ;
+
+public class TestModelCreation
+{
+    public static void main(String...argv)
+    {
+        //org.openjena.atlas.logging.Log.setLog4j() ;
+        int N = 1000000 ;
+        Object[] objects = new Object[100] ;
+        Timer t = new Timer() ;
+        t.startTimer() ;
+        for ( int i = 0 ; i < N; i++ )
+        {
+            //Model m = ModelFactory.createDefaultModel() ;
+            Map<Object, Object> m = new HashMap<Object, Object>() ;
+            objects[i%100] = m ;
+        }
+        long millis = t.endTimer() ;
+        System.out.printf("Time = %.2fs for %,d creations. Rate = %,.2f objects/s\n", millis/1000.0, N, N*(1000.0/millis)) ;
+    }
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/Graph2.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/Graph2.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/Graph2.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/Graph2.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,110 +16,110 @@
  * limitations under the License.
  */
 
-package dev.g2;
-
-import java.util.Iterator ;
-
-import org.openjena.atlas.iterator.Iter ;
-import org.openjena.atlas.iterator.Transform ;
-import org.openjena.atlas.lib.ColumnMap ;
-import org.openjena.atlas.lib.Tuple ;
-
-import com.hp.hpl.jena.graph.Node ;
-import com.hp.hpl.jena.graph.Triple ;
-import com.hp.hpl.jena.graph.TripleMatch ;
-import com.hp.hpl.jena.graph.query.QueryHandler ;
-import com.hp.hpl.jena.shared.PrefixMapping ;
-import com.hp.hpl.jena.shared.impl.PrefixMappingImpl ;
-import com.hp.hpl.jena.sparql.graph.GraphBase2 ;
-import com.hp.hpl.jena.util.iterator.ExtendedIterator ;
-import com.hp.hpl.jena.util.iterator.NiceIterator ;
-
-public class Graph2 extends GraphBase2
-{
-    //TupleDex  
-    TupleDex indexes[] = { new TupleDex(new ColumnMap("SPO", "SPO")) , 
-                           new TupleDex(new ColumnMap("SPO", "POS")) ,
-                           new TupleDex(new ColumnMap("SPO", "OSP")) } ; 
-    @Override
-    protected PrefixMapping createPrefixMapping()
-    {
-        return new PrefixMappingImpl() ;
-    }
-
-    @Override
-    protected ExtendedIterator<Triple> graphBaseFind(TripleMatch m)
-    {
-        Node s = m.getMatchSubject() ;
-        Node p = m.getMatchPredicate() ;
-        Node o = m.getMatchObject() ;
-        
-        // A bit mixed between tuples and S,P,O - solve with Tuple>Triple
-        Tuple<Node> tuple = Tuple.create(s,p,o) ;
-        int indexNumSlots = -1 ;
-        int index = -1 ;
-        TupleDex tupleIndex = null ;
-        
-        for ( int i = 0 ; i < indexes.length ; i++ )
-        {
-            TupleDex idx = indexes[i] ;
-            if ( idx != null )
-            {
-                int w = idx.weight(tuple) ;
-                if ( w > indexNumSlots )
-                {
-                    indexNumSlots = w ;
-                    tupleIndex = idx ;
-                }
-            }
-        }
-        
-        if ( tupleIndex == null )
-            // Scan
-            tupleIndex = indexes[0] ;
-
-        Iterator<Triple> iter = Iter.map(tupleIndex.find(tuple), transform) ;
-        return new MapperIteratorTriples(iter) ;
-    }
-
-    // Convert from Iterator<Triple> to ExtendedIterator
-    static class MapperIteratorTriples extends NiceIterator<Triple>
-    {
-        private final Iterator<Triple> iter ;
-        MapperIteratorTriples(Iterator<Triple> iter) { this.iter = iter ; }
-        @Override public boolean hasNext() { return iter.hasNext() ; } 
-        @Override public Triple next() { return iter.next(); }
-        @Override public void remove() { iter.remove(); }
-    }
-    
-    @Override
-    public QueryHandler queryHandler()
-    {
-        return null ;
-    }
-    
-    @Override
-    public void performAdd( Triple t )
-    {
-        Tuple<Node> tuple = Tuple.create(t.getSubject(), t.getPredicate(), t.getObject()) ;
-        for ( TupleDex index : indexes )
-            index.add(tuple) ;
-    }
-    
-    @Override
-    public void performDelete( Triple t )
-    {
-        Tuple<Node> tuple = Tuple.create(t.getSubject(), t.getPredicate(), t.getObject()) ;
-        for ( TupleDex index : indexes )
-            index.remove(tuple) ;
-    }
-    
-    static Transform<Tuple<Node>, Triple> transform = new Transform<Tuple<Node>, Triple>() {
-
-        @Override
-        public Triple convert(Tuple<Node> tuple)
-        {
-            return new Triple(tuple.get(0), tuple.get(1), tuple.get(2)) ;
-        }} ;
-
+package dev.g2;
+
+import java.util.Iterator ;
+
+import org.openjena.atlas.iterator.Iter ;
+import org.openjena.atlas.iterator.Transform ;
+import org.openjena.atlas.lib.ColumnMap ;
+import org.openjena.atlas.lib.Tuple ;
+
+import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.graph.Triple ;
+import com.hp.hpl.jena.graph.TripleMatch ;
+import com.hp.hpl.jena.graph.query.QueryHandler ;
+import com.hp.hpl.jena.shared.PrefixMapping ;
+import com.hp.hpl.jena.shared.impl.PrefixMappingImpl ;
+import com.hp.hpl.jena.sparql.graph.GraphBase2 ;
+import com.hp.hpl.jena.util.iterator.ExtendedIterator ;
+import com.hp.hpl.jena.util.iterator.NiceIterator ;
+
+public class Graph2 extends GraphBase2
+{
+    //TupleDex  
+    TupleDex indexes[] = { new TupleDex(new ColumnMap("SPO", "SPO")) , 
+                           new TupleDex(new ColumnMap("SPO", "POS")) ,
+                           new TupleDex(new ColumnMap("SPO", "OSP")) } ; 
+    @Override
+    protected PrefixMapping createPrefixMapping()
+    {
+        return new PrefixMappingImpl() ;
+    }
+
+    @Override
+    protected ExtendedIterator<Triple> graphBaseFind(TripleMatch m)
+    {
+        Node s = m.getMatchSubject() ;
+        Node p = m.getMatchPredicate() ;
+        Node o = m.getMatchObject() ;
+        
+        // A bit mixed between tuples and S,P,O - solve with Tuple>Triple
+        Tuple<Node> tuple = Tuple.create(s,p,o) ;
+        int indexNumSlots = -1 ;
+        int index = -1 ;
+        TupleDex tupleIndex = null ;
+        
+        for ( int i = 0 ; i < indexes.length ; i++ )
+        {
+            TupleDex idx = indexes[i] ;
+            if ( idx != null )
+            {
+                int w = idx.weight(tuple) ;
+                if ( w > indexNumSlots )
+                {
+                    indexNumSlots = w ;
+                    tupleIndex = idx ;
+                }
+            }
+        }
+        
+        if ( tupleIndex == null )
+            // Scan
+            tupleIndex = indexes[0] ;
+
+        Iterator<Triple> iter = Iter.map(tupleIndex.find(tuple), transform) ;
+        return new MapperIteratorTriples(iter) ;
+    }
+
+    // Convert from Iterator<Triple> to ExtendedIterator
+    static class MapperIteratorTriples extends NiceIterator<Triple>
+    {
+        private final Iterator<Triple> iter ;
+        MapperIteratorTriples(Iterator<Triple> iter) { this.iter = iter ; }
+        @Override public boolean hasNext() { return iter.hasNext() ; } 
+        @Override public Triple next() { return iter.next(); }
+        @Override public void remove() { iter.remove(); }
+    }
+    
+    @Override
+    public QueryHandler queryHandler()
+    {
+        return null ;
+    }
+    
+    @Override
+    public void performAdd( Triple t )
+    {
+        Tuple<Node> tuple = Tuple.create(t.getSubject(), t.getPredicate(), t.getObject()) ;
+        for ( TupleDex index : indexes )
+            index.add(tuple) ;
+    }
+    
+    @Override
+    public void performDelete( Triple t )
+    {
+        Tuple<Node> tuple = Tuple.create(t.getSubject(), t.getPredicate(), t.getObject()) ;
+        for ( TupleDex index : indexes )
+            index.remove(tuple) ;
+    }
+    
+    static Transform<Tuple<Node>, Triple> transform = new Transform<Tuple<Node>, Triple>() {
+
+        @Override
+        public Triple convert(Tuple<Node> tuple)
+        {
+            return new Triple(tuple.get(0), tuple.get(1), tuple.get(2)) ;
+        }} ;
+
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/Index.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/Index.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/Index.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/Index.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,24 +16,24 @@
  * limitations under the License.
  */
 
-package dev.g2 ;
-
-import java.util.Iterator;
-
-/** A simplified "map" interface */
-public interface Index<K, V>
-{
-    public V get(K key) ;
-
-    public void put(K key, V value) ;
-
-    public void remove(K key) ;
-
-    public int size() ;
-
-    public boolean isEmpty() ;
-
-    //public Collection<V> values() { return map.values() ; }
-    public Iterator<K> keys() ;
-
+package dev.g2 ;
+
+import java.util.Iterator;
+
+/** A simplified "map" interface */
+public interface Index<K, V>
+{
+    public V get(K key) ;
+
+    public void put(K key, V value) ;
+
+    public void remove(K key) ;
+
+    public int size() ;
+
+    public boolean isEmpty() ;
+
+    //public Collection<V> values() { return map.values() ; }
+    public Iterator<K> keys() ;
+
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/IndexImpl.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/IndexImpl.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/IndexImpl.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/IndexImpl.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,37 +16,37 @@
  * limitations under the License.
  */
 
-package dev.g2;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.openjena.atlas.lib.DS;
-
-/** Simplified map */
-public class IndexImpl<K, V> implements Index<K, V> 
-{
-    private Map<K,V> map = DS.map() ;
-    
-    public IndexImpl() {}
-    
-    @Override
-    public V get(K key) { return map.get(key) ; }
-    @Override
-    public void put(K key, V value) { map.put(key, value) ; }
-    
-    @Override
-    public void remove(K key) { map.remove(key) ; }
-    
-    @Override
-    public int size() { return map.size() ; }
-    @Override
-    public boolean isEmpty() { return map.isEmpty() ; }
-    
-    //public Collection<V> values() { return map.values() ; }
-    @Override
-    public Iterator<K> keys() { return map.keySet().iterator() ; }
-    
-    @Override
-    public String toString() { return map.toString() ; }
+package dev.g2;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.openjena.atlas.lib.DS;
+
+/** Simplified map */
+public class IndexImpl<K, V> implements Index<K, V> 
+{
+    private Map<K,V> map = DS.map() ;
+    
+    public IndexImpl() {}
+    
+    @Override
+    public V get(K key) { return map.get(key) ; }
+    @Override
+    public void put(K key, V value) { map.put(key, value) ; }
+    
+    @Override
+    public void remove(K key) { map.remove(key) ; }
+    
+    @Override
+    public int size() { return map.size() ; }
+    @Override
+    public boolean isEmpty() { return map.isEmpty() ; }
+    
+    //public Collection<V> values() { return map.values() ; }
+    @Override
+    public Iterator<K> keys() { return map.keySet().iterator() ; }
+    
+    @Override
+    public String toString() { return map.toString() ; }
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/MultiBunch.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/MultiBunch.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/MultiBunch.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/MultiBunch.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,40 +16,40 @@
  * limitations under the License.
  */
 
-package dev.g2;
-
-import java.util.Iterator;
-
-import org.openjena.atlas.lib.Pair;
-
-/** A storage of (K, Set<V>) - i.e. a multivalued map; only one occurence of each distinct V per K */ 
-public interface MultiBunch<K,V>
-{
-//    /** Lookup a key : iterator preferred */ 
-//    public Collection<V> get(K key) ;
-    
-    public boolean contains(K key, V value) ;
-    
-    /** All keys */
-    public Iterator<K> keys() ;
-    
-    /** All values associated with a key */
-    public Iterator<V> iterator(K key) ;
-    
-    /** Everything */
-    public Iterator<Pair<K,V>> iterator() ;
-
-    /** Add a key/value pair, return true if the bunch was altered */
-    public boolean add(K key, V value) ;
-
-    /** Remove a key/value pair, return true if the bunch was altered */
-    public boolean remove(K key, V value) ;
-
-    /** Remove all key/value pairs */
-    public void clear() ;
-
-    public boolean isEmpty() ;
-    
-    public long size() ;
-
+package dev.g2;
+
+import java.util.Iterator;
+
+import org.openjena.atlas.lib.Pair;
+
+/** A storage of (K, Set<V>) - i.e. a multivalued map; only one occurence of each distinct V per K */ 
+public interface MultiBunch<K,V>
+{
+//    /** Lookup a key : iterator preferred */ 
+//    public Collection<V> get(K key) ;
+    
+    public boolean contains(K key, V value) ;
+    
+    /** All keys */
+    public Iterator<K> keys() ;
+    
+    /** All values associated with a key */
+    public Iterator<V> iterator(K key) ;
+    
+    /** Everything */
+    public Iterator<Pair<K,V>> iterator() ;
+
+    /** Add a key/value pair, return true if the bunch was altered */
+    public boolean add(K key, V value) ;
+
+    /** Remove a key/value pair, return true if the bunch was altered */
+    public boolean remove(K key, V value) ;
+
+    /** Remove all key/value pairs */
+    public void clear() ;
+
+    public boolean isEmpty() ;
+    
+    public long size() ;
+
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/MultiBunchSimple.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/MultiBunchSimple.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/MultiBunchSimple.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/MultiBunchSimple.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,124 +16,124 @@
  * limitations under the License.
  */
 
-package dev.g2;
-
-import org.openjena.atlas.iterator.Iter;
-import org.openjena.atlas.iterator.IteratorConcat;
-import org.openjena.atlas.iterator.NullIterator;
-import org.openjena.atlas.iterator.Transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.openjena.atlas.lib.Pair;
-
-/** TEMPORARY implementation */ 
-public class MultiBunchSimple<K, V> implements MultiBunch<K, V>
-{
-    private Index<K, Collection<V>> index ;
-    //static Iterator<V> zero = new NullIterator<V>() ;
-    
-    public MultiBunchSimple()
-    {
-        clear() ;
-    }
-    
-    @Override
-    public boolean add(K key, V value)
-    {
-        Collection<V> set = index.get(key) ;
-        if ( set == null )
-        {
-            set = new ArrayList<V>() ;
-            index.put(key, set) ;
-        }
-        return set.add(value) ;
-    }
-    
-    @Override
-    public boolean remove(K key, V value)
-    {
-        Collection<V> set = index.get(key) ;
-        if ( set == null )
-            return false ;
-        return set.remove(value) ;
-    }
-
-    @Override
-    public void clear()
-    { index = new IndexImpl<K,  Collection<V>>() ;}
-
-    @Override
-    public boolean contains(K key, V value)
-    {
-        Collection<V> set = index.get(key) ;
-        if ( set == null )
-            return false ;
-        return set.contains(value) ;
-    }
-
-    @Override
-    public boolean isEmpty()
-    {
-        if ( index.isEmpty() ) return true ;
-        for( Iterator<K> iter = index.keys() ; iter.hasNext(); )
-        {
-            K key = iter.next() ;
-            if ( ! index.get(key).isEmpty() )
-                return false ;
-        }
-        return false ;
-    }
-
-    @Override
-    public long size()
-    {
-        long num = 0 ;
-        for( Iterator<K> iter = index.keys() ; iter.hasNext(); )
-        {
-            K key = iter.next() ;
-            num += index.get(key).size() ;
-        }
-        return num ;
-    }
-
-    @Override
-    public Iterator<V> iterator(K key)
-    {
-        Collection<V> set = index.get(key) ;
-        if ( set == null )
-            return new NullIterator<V>() ;
-        return set.iterator() ;
-    }
-
-    @Override
-    public Iterator<Pair<K, V>> iterator()
-    {
-        IteratorConcat<Pair<K,V>> concat = new IteratorConcat<Pair<K,V>>() ;
-        Iterator<K> keys = index.keys() ;
-        for ( ; keys.hasNext(); )
-        {
-            final K key = keys.next() ;
-            Transform<V, Pair<K,V>> t = new Transform<V, Pair<K,V>>(){
-
-                @Override
-                public Pair<K, V> convert(V value)
-                {
-                    return new Pair<K,V>(key, value) ;
-                }} ;
-            concat.add(Iter.map(index.get(key), t)) ;
-        }
-        return concat ;
-    }
-
-    @Override
-    public Iterator<K> keys()
-    {
-        return index.keys() ;
-    }
-    
-    @Override
-    public String toString() { return index.toString() ; }
+package dev.g2;
+
+import org.openjena.atlas.iterator.Iter;
+import org.openjena.atlas.iterator.IteratorConcat;
+import org.openjena.atlas.iterator.NullIterator;
+import org.openjena.atlas.iterator.Transform;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.openjena.atlas.lib.Pair;
+
+/** TEMPORARY implementation */ 
+public class MultiBunchSimple<K, V> implements MultiBunch<K, V>
+{
+    private Index<K, Collection<V>> index ;
+    //static Iterator<V> zero = new NullIterator<V>() ;
+    
+    public MultiBunchSimple()
+    {
+        clear() ;
+    }
+    
+    @Override
+    public boolean add(K key, V value)
+    {
+        Collection<V> set = index.get(key) ;
+        if ( set == null )
+        {
+            set = new ArrayList<V>() ;
+            index.put(key, set) ;
+        }
+        return set.add(value) ;
+    }
+    
+    @Override
+    public boolean remove(K key, V value)
+    {
+        Collection<V> set = index.get(key) ;
+        if ( set == null )
+            return false ;
+        return set.remove(value) ;
+    }
+
+    @Override
+    public void clear()
+    { index = new IndexImpl<K,  Collection<V>>() ;}
+
+    @Override
+    public boolean contains(K key, V value)
+    {
+        Collection<V> set = index.get(key) ;
+        if ( set == null )
+            return false ;
+        return set.contains(value) ;
+    }
+
+    @Override
+    public boolean isEmpty()
+    {
+        if ( index.isEmpty() ) return true ;
+        for( Iterator<K> iter = index.keys() ; iter.hasNext(); )
+        {
+            K key = iter.next() ;
+            if ( ! index.get(key).isEmpty() )
+                return false ;
+        }
+        return false ;
+    }
+
+    @Override
+    public long size()
+    {
+        long num = 0 ;
+        for( Iterator<K> iter = index.keys() ; iter.hasNext(); )
+        {
+            K key = iter.next() ;
+            num += index.get(key).size() ;
+        }
+        return num ;
+    }
+
+    @Override
+    public Iterator<V> iterator(K key)
+    {
+        Collection<V> set = index.get(key) ;
+        if ( set == null )
+            return new NullIterator<V>() ;
+        return set.iterator() ;
+    }
+
+    @Override
+    public Iterator<Pair<K, V>> iterator()
+    {
+        IteratorConcat<Pair<K,V>> concat = new IteratorConcat<Pair<K,V>>() ;
+        Iterator<K> keys = index.keys() ;
+        for ( ; keys.hasNext(); )
+        {
+            final K key = keys.next() ;
+            Transform<V, Pair<K,V>> t = new Transform<V, Pair<K,V>>(){
+
+                @Override
+                public Pair<K, V> convert(V value)
+                {
+                    return new Pair<K,V>(key, value) ;
+                }} ;
+            concat.add(Iter.map(index.get(key), t)) ;
+        }
+        return concat ;
+    }
+
+    @Override
+    public Iterator<K> keys()
+    {
+        return index.keys() ;
+    }
+    
+    @Override
+    public String toString() { return index.toString() ; }
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/TupleDex.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/TupleDex.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/TupleDex.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/TupleDex.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,204 +16,204 @@
  * limitations under the License.
  */
 
-package dev.g2;
-
-import org.openjena.atlas.iterator.*;
-
-import java.util.Iterator;
-
-import org.openjena.atlas.lib.ColumnMap;
-import org.openjena.atlas.lib.Tuple;
-
-import com.hp.hpl.jena.graph.Node;
-
-public class TupleDex 
-{
-    // Currently assumes 3-Tuple.
-    // Later support into N-tuple with a M<=N key 
-    // Reconsider naming.
-    
-    Index<Node, MultiBunch<Node, Node>> index = new IndexImpl<Node, MultiBunch<Node, Node>>() ;
-    ColumnMap colMap ;
-    Transform<Tuple<Node>, Tuple<Node>> unmap ;
-
-    
-    static Iterator<Tuple<Node>> zero = new NullIterator<Tuple<Node>>() ;
-    
-    public TupleDex(ColumnMap cm){ 
-        this.colMap = cm ;
-        this.unmap = new Transform<Tuple<Node>, Tuple<Node>> () {
-            @Override
-            public Tuple<Node> convert(Tuple<Node> item)
-            {
-                return colMap.unmap(item) ;
-            }} ;
-    }
-    
-    public boolean add(Tuple<Node> tuple)
-    {
-        Node n1 = colMap.fetchSlot(0, tuple) ; 
-        Node n2 = colMap.fetchSlot(1, tuple) ;
-        Node n3 = colMap.fetchSlot(2, tuple) ;
-        
-        MultiBunch<Node, Node> bunch = index.get(n1) ;
-        // XXX Adjust the MultiBunch implementation as it grows.
-        if ( bunch == null )
-        {
-            bunch = new MultiBunchSimple<Node, Node>() ;
-            index.put(n1, bunch) ;
-        }
-        return bunch.add(n2, n3) ;
-        
-    }
-    
-    public boolean remove(Tuple<Node> tuple)
-    {
-        Node n1 = colMap.fetchSlot(0, tuple) ; 
-        Node n2 = colMap.fetchSlot(1, tuple) ;
-        Node n3 = colMap.fetchSlot(2, tuple) ;
-    
-        MultiBunch<Node, Node> bunch = index.get(n1) ;
-        if ( bunch == null )
-            return false ;
-        boolean b = bunch.remove(n2, n3) ;
-        // Could adjust the MultiBunch implementation as it shrinks
-        // but if we are doing a lot of removals (e.g. implicit removeAll), then that makes work 
-        if ( bunch.isEmpty() )
-            index.put(n1, null) ;
-        return b ;
-    }
-
-    public Iterator<Tuple<Node>> find(Tuple<Node> tuple)
-    {
-        tuple = colMap.map(tuple) ;
-        Iterator<Tuple<Node>> iter = find(tuple.get(0), tuple.get(1), tuple.get(2)) ;
-        return Iter.map(iter, unmap) ; 
-    }
-    
-    private Iterator<Tuple<Node>> find(final Node x, final Node y, Node z)
-    {
-        if ( x == null )
-        {
-            // X=? (Maybe Y and Z - 4 cases) 
-            Iterator<Node> iter1 = index.keys() ;
-            IteratorConcat<Tuple<Node>> iter = new IteratorConcat<Tuple<Node>>() ;
-            for ( ; iter1.hasNext() ; )
-            {
-                Node node1 = iter1.next() ;
-                MultiBunch<Node, Node> bunch = index.get(node1) ;
-//                if ( bunch == null )
-//                    continue ;  // ???!!!
-                iter.add(find1(node1, bunch, y, z)) ;
-            }
-            return iter ;
-        }
-        
-        MultiBunch<Node, Node> bunch = index.get(x) ;
-        
-        if ( bunch == null )
-            return zero ;
-
-        if ( y != null )
-        {
-            if ( z != null )
-            {
-                // X Y Z - 1 case
-                if ( bunch.contains(y, z) )
-                    return new SingletonIterator<Tuple<Node>>(Tuple.create(x,y,z)) ;
-                else
-                    return zero ;
-            }
-            // X Y ? - 1 case
-            Iterator<Node> zPart = bunch.iterator(y) ;
-            return find2(x, y, zPart) ;
-        }
-        // y is null.
-        // X ? ? or X ? Z - 2 cases 
-        // Total cases: 8
-        
-        // -----
-        return find1(x, bunch, y, z) ;
-    }
-
-    private Iterator<Tuple<Node>> find1(Node x, MultiBunch<Node, Node> bunch, final Node y, final Node z)
-    {
-//        if ( bunch == null )
-//            return zero ;
-        
-        IteratorConcat<Tuple<Node>> iter = new IteratorConcat<Tuple<Node>>() ;
-        
-        Iterator<Node> iter1 = bunch.keys() ;
-        
-        for ( ; iter1.hasNext() ;  )
-        {
-            Node key = iter1.next() ;
-            Iterator<Node> part3 = bunch.iterator(key) ;
-            Iterator<Tuple<Node>> iter2 = find2(x, key, part3) ;
-            iter.add(iter2) ;
-        }
-        if ( y == null && z == null )
-            return iter ;
-        // Some sort of scan.
-        Filter<Tuple<Node>> filter = new Filter<Tuple<Node>>() {
-            @Override
-            public boolean accept(Tuple<Node> tuple)
-            {
-                if ( y != null && !y.equals(tuple.get(1)) ) return false ;
-                if ( z != null && !z.equals(tuple.get(2)) ) return false ;
-                return true ;
-            }} ;
-        return Iter.filter(iter, filter) ; 
-    }
-    
-    private Iterator<Tuple<Node>> find2(final Node x, final Node y, Iterator<Node> part)
-    {
-        Transform<Node, Tuple<Node>> t = new Transform<Node, Tuple<Node>>(){
-            @Override
-            public Tuple<Node> convert(Node item)
-            {
-                return Tuple.create(x, y, item) ;
-            }} ;
-        Iterator<Tuple<Node>> iter2 = Iter.map(part, t) ;
-        return iter2 ;
-    }
-    
-    private static void checkNotNull(Node x)
-    {
-        if ( x == null ) throw new RuntimeException("Null") ;
-    }
-    private static void checkNull(Node x)
-    {
-        if ( x != null ) throw new RuntimeException("Not null: "+x) ;
-    }
-
-    public int weight(Tuple<Node> tuple)
-    {
-//        System.out.println("Index: "+this) ;
-//        System.out.println("Weight: "+tuple) ;
-//        
-//        System.out.println("  "+colMap.fetchSlot(0, tuple)) ;
-//        System.out.println("  "+colMap.fetchSlot(1, tuple)) ;
-//        System.out.println("  "+colMap.fetchSlot(2, tuple)) ;
-//        System.out.println("Mapped: "+colMap.map(tuple)) ;
-//        
-        if ( undef(colMap.fetchSlot(0, tuple)) ) return 0 ;
-        if ( undef(colMap.fetchSlot(1, tuple)) ) return 1 ;
-        if ( undef(colMap.fetchSlot(2, tuple)) ) return 2 ;
-        return 3 ;
-    }
-    
-    private boolean undef(Object x)
-    { return x == null ; }
-
-    @Override
-    public String toString()
-    {
-        return label() ;
-    }
-    
-    public String label()
-    {
-        return colMap.getLabel() ; 
-    }
+package dev.g2;
+
+import org.openjena.atlas.iterator.*;
+
+import java.util.Iterator;
+
+import org.openjena.atlas.lib.ColumnMap;
+import org.openjena.atlas.lib.Tuple;
+
+import com.hp.hpl.jena.graph.Node;
+
+public class TupleDex 
+{
+    // Currently assumes 3-Tuple.
+    // Later support into N-tuple with a M<=N key 
+    // Reconsider naming.
+    
+    Index<Node, MultiBunch<Node, Node>> index = new IndexImpl<Node, MultiBunch<Node, Node>>() ;
+    ColumnMap colMap ;
+    Transform<Tuple<Node>, Tuple<Node>> unmap ;
+
+    
+    static Iterator<Tuple<Node>> zero = new NullIterator<Tuple<Node>>() ;
+    
+    public TupleDex(ColumnMap cm){ 
+        this.colMap = cm ;
+        this.unmap = new Transform<Tuple<Node>, Tuple<Node>> () {
+            @Override
+            public Tuple<Node> convert(Tuple<Node> item)
+            {
+                return colMap.unmap(item) ;
+            }} ;
+    }
+    
+    public boolean add(Tuple<Node> tuple)
+    {
+        Node n1 = colMap.fetchSlot(0, tuple) ; 
+        Node n2 = colMap.fetchSlot(1, tuple) ;
+        Node n3 = colMap.fetchSlot(2, tuple) ;
+        
+        MultiBunch<Node, Node> bunch = index.get(n1) ;
+        // XXX Adjust the MultiBunch implementation as it grows.
+        if ( bunch == null )
+        {
+            bunch = new MultiBunchSimple<Node, Node>() ;
+            index.put(n1, bunch) ;
+        }
+        return bunch.add(n2, n3) ;
+        
+    }
+    
+    public boolean remove(Tuple<Node> tuple)
+    {
+        Node n1 = colMap.fetchSlot(0, tuple) ; 
+        Node n2 = colMap.fetchSlot(1, tuple) ;
+        Node n3 = colMap.fetchSlot(2, tuple) ;
+    
+        MultiBunch<Node, Node> bunch = index.get(n1) ;
+        if ( bunch == null )
+            return false ;
+        boolean b = bunch.remove(n2, n3) ;
+        // Could adjust the MultiBunch implementation as it shrinks
+        // but if we are doing a lot of removals (e.g. implicit removeAll), then that makes work 
+        if ( bunch.isEmpty() )
+            index.put(n1, null) ;
+        return b ;
+    }
+
+    public Iterator<Tuple<Node>> find(Tuple<Node> tuple)
+    {
+        tuple = colMap.map(tuple) ;
+        Iterator<Tuple<Node>> iter = find(tuple.get(0), tuple.get(1), tuple.get(2)) ;
+        return Iter.map(iter, unmap) ; 
+    }
+    
+    private Iterator<Tuple<Node>> find(final Node x, final Node y, Node z)
+    {
+        if ( x == null )
+        {
+            // X=? (Maybe Y and Z - 4 cases) 
+            Iterator<Node> iter1 = index.keys() ;
+            IteratorConcat<Tuple<Node>> iter = new IteratorConcat<Tuple<Node>>() ;
+            for ( ; iter1.hasNext() ; )
+            {
+                Node node1 = iter1.next() ;
+                MultiBunch<Node, Node> bunch = index.get(node1) ;
+//                if ( bunch == null )
+//                    continue ;  // ???!!!
+                iter.add(find1(node1, bunch, y, z)) ;
+            }
+            return iter ;
+        }
+        
+        MultiBunch<Node, Node> bunch = index.get(x) ;
+        
+        if ( bunch == null )
+            return zero ;
+
+        if ( y != null )
+        {
+            if ( z != null )
+            {
+                // X Y Z - 1 case
+                if ( bunch.contains(y, z) )
+                    return new SingletonIterator<Tuple<Node>>(Tuple.create(x,y,z)) ;
+                else
+                    return zero ;
+            }
+            // X Y ? - 1 case
+            Iterator<Node> zPart = bunch.iterator(y) ;
+            return find2(x, y, zPart) ;
+        }
+        // y is null.
+        // X ? ? or X ? Z - 2 cases 
+        // Total cases: 8
+        
+        // -----
+        return find1(x, bunch, y, z) ;
+    }
+
+    private Iterator<Tuple<Node>> find1(Node x, MultiBunch<Node, Node> bunch, final Node y, final Node z)
+    {
+//        if ( bunch == null )
+//            return zero ;
+        
+        IteratorConcat<Tuple<Node>> iter = new IteratorConcat<Tuple<Node>>() ;
+        
+        Iterator<Node> iter1 = bunch.keys() ;
+        
+        for ( ; iter1.hasNext() ;  )
+        {
+            Node key = iter1.next() ;
+            Iterator<Node> part3 = bunch.iterator(key) ;
+            Iterator<Tuple<Node>> iter2 = find2(x, key, part3) ;
+            iter.add(iter2) ;
+        }
+        if ( y == null && z == null )
+            return iter ;
+        // Some sort of scan.
+        Filter<Tuple<Node>> filter = new Filter<Tuple<Node>>() {
+            @Override
+            public boolean accept(Tuple<Node> tuple)
+            {
+                if ( y != null && !y.equals(tuple.get(1)) ) return false ;
+                if ( z != null && !z.equals(tuple.get(2)) ) return false ;
+                return true ;
+            }} ;
+        return Iter.filter(iter, filter) ; 
+    }
+    
+    private Iterator<Tuple<Node>> find2(final Node x, final Node y, Iterator<Node> part)
+    {
+        Transform<Node, Tuple<Node>> t = new Transform<Node, Tuple<Node>>(){
+            @Override
+            public Tuple<Node> convert(Node item)
+            {
+                return Tuple.create(x, y, item) ;
+            }} ;
+        Iterator<Tuple<Node>> iter2 = Iter.map(part, t) ;
+        return iter2 ;
+    }
+    
+    private static void checkNotNull(Node x)
+    {
+        if ( x == null ) throw new RuntimeException("Null") ;
+    }
+    private static void checkNull(Node x)
+    {
+        if ( x != null ) throw new RuntimeException("Not null: "+x) ;
+    }
+
+    public int weight(Tuple<Node> tuple)
+    {
+//        System.out.println("Index: "+this) ;
+//        System.out.println("Weight: "+tuple) ;
+//        
+//        System.out.println("  "+colMap.fetchSlot(0, tuple)) ;
+//        System.out.println("  "+colMap.fetchSlot(1, tuple)) ;
+//        System.out.println("  "+colMap.fetchSlot(2, tuple)) ;
+//        System.out.println("Mapped: "+colMap.map(tuple)) ;
+//        
+        if ( undef(colMap.fetchSlot(0, tuple)) ) return 0 ;
+        if ( undef(colMap.fetchSlot(1, tuple)) ) return 1 ;
+        if ( undef(colMap.fetchSlot(2, tuple)) ) return 2 ;
+        return 3 ;
+    }
+    
+    private boolean undef(Object x)
+    { return x == null ; }
+
+    @Override
+    public String toString()
+    {
+        return label() ;
+    }
+    
+    public String label()
+    {
+        return colMap.getLabel() ; 
+    }
 }

Modified: incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/TupleIndex.java
URL: http://svn.apache.org/viewvc/incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/TupleIndex.java?rev=1198733&r1=1198732&r2=1198733&view=diff
==============================================================================
--- incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/TupleIndex.java (original)
+++ incubator/jena/Scratch/AFS/Dev/trunk/src-dev/dev/g2/TupleIndex.java Mon Nov  7 13:36:30 2011
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,75 +16,75 @@
  * limitations under the License.
  */
 
-package dev.g2;
-
-import org.openjena.atlas.iterator.IteratorConcat;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-
-import org.openjena.atlas.lib.DS;
-
-public class TupleIndex<T> //extends Index<T, Index<T, Collection<T>>>
-{
-    // Top : Hash of T -> (T, T*) 
-    private Index<T, IndexImpl<T, Collection<T>>> map = new IndexImpl<T, IndexImpl<T, Collection<T>>>() ;
-    
-    public TupleIndex() {}
-    
-    public Index<T, Collection<T>> get(T key1) { return map.get(key1) ; }
-    
-    public Collection<T> get(T key1, T key2) { return map.get(key1).get(key2) ; }
-    
-    public Iterator<T> keys() { return map.keys() ; }
-    
-    public void put(T key1, T key2, T value)
-    { 
-        IndexImpl<T, Collection<T>> x = map.get(key1) ;
-        if ( x == null )
-        {
-            x = new IndexImpl<T, Collection<T>>() ;
-            map.put(key1, x) ;
-        }
-        
-        Collection<T> z = x.get(key2) ;
-        if ( z == null )
-        {
-            z = DS.list() ;
-            x.put(key2, z) ;
-        }
-        z.add(value) ;
-    }
-    
-    public void remove(T key1, T key2)
-    {
-        Index<T, Collection<T>> x = map.get(key1) ;
-        if ( x == null )
-            return ;
-        x.remove(key2) ;
-        if ( x.size() == 0 )
-            map.remove(key1) ;
-    }
-    
-    public Iterator<T> flatten()
-    {
-        // Accumulating iterator.
-        IteratorConcat<T> all = new IteratorConcat<T>() ;
-        for ( Iterator<T> iter = map.keys() ; iter.hasNext() ; )
-        {
-            T k1 = iter.next();
-            Index<T, Collection<T>> x =  map.get(k1) ;
-            for (Iterator<T> iter2 = x.keys() ; iter.hasNext() ; )
-            {
-                T k2 = iter2.next();
-                Collection<T> y = x.get(k2) ;
-                all.add(y.iterator()) ;
-            }
-        }
-        return all ;
-    }
-    
-    public int size() { return map.size() ; }
-    public boolean isEmpty() { return map.isEmpty() ; }
+package dev.g2;
+
+import org.openjena.atlas.iterator.IteratorConcat;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+
+import org.openjena.atlas.lib.DS;
+
+public class TupleIndex<T> //extends Index<T, Index<T, Collection<T>>>
+{
+    // Top : Hash of T -> (T, T*) 
+    private Index<T, IndexImpl<T, Collection<T>>> map = new IndexImpl<T, IndexImpl<T, Collection<T>>>() ;
+    
+    public TupleIndex() {}
+    
+    public Index<T, Collection<T>> get(T key1) { return map.get(key1) ; }
+    
+    public Collection<T> get(T key1, T key2) { return map.get(key1).get(key2) ; }
+    
+    public Iterator<T> keys() { return map.keys() ; }
+    
+    public void put(T key1, T key2, T value)
+    { 
+        IndexImpl<T, Collection<T>> x = map.get(key1) ;
+        if ( x == null )
+        {
+            x = new IndexImpl<T, Collection<T>>() ;
+            map.put(key1, x) ;
+        }
+        
+        Collection<T> z = x.get(key2) ;
+        if ( z == null )
+        {
+            z = DS.list() ;
+            x.put(key2, z) ;
+        }
+        z.add(value) ;
+    }
+    
+    public void remove(T key1, T key2)
+    {
+        Index<T, Collection<T>> x = map.get(key1) ;
+        if ( x == null )
+            return ;
+        x.remove(key2) ;
+        if ( x.size() == 0 )
+            map.remove(key1) ;
+    }
+    
+    public Iterator<T> flatten()
+    {
+        // Accumulating iterator.
+        IteratorConcat<T> all = new IteratorConcat<T>() ;
+        for ( Iterator<T> iter = map.keys() ; iter.hasNext() ; )
+        {
+            T k1 = iter.next();
+            Index<T, Collection<T>> x =  map.get(k1) ;
+            for (Iterator<T> iter2 = x.keys() ; iter.hasNext() ; )
+            {
+                T k2 = iter2.next();
+                Collection<T> y = x.get(k2) ;
+                all.add(y.iterator()) ;
+            }
+        }
+        return all ;
+    }
+    
+    public int size() { return map.size() ; }
+    public boolean isEmpty() { return map.isEmpty() ; }
 }