Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > comp.lang.java.programmer > #5654

Re: Passing a Method Name to a Method, Redux

From blmblm@myrealbox.com <blmblm.myrealbox@gmail.com>
Newsgroups comp.lang.java.programmer
Subject Re: Passing a Method Name to a Method, Redux
Date 2011-06-24 19:19 +0000
Organization None
Message-ID <96k6atFt60U2@mid.individual.net> (permalink)
References <fpg7079ca2dtgipdphr8rm234kgmkd1t3l@4ax.com> <iu0pbg$26n$1@dont-email.me> <1lu707p0cpr9vhrpv51d7hmst6bt1qdbcv@4ax.com> <iu129n$d0q$1@dont-email.me>

Show all headers | View raw


In article <iu129n$d0q$1@dont-email.me>, markspace  <-@.> wrote:
> On 6/23/2011 7:48 PM, Gene Wirchenko wrote:
> > On Thu, 23 Jun 2011 18:30:21 -0700, markspace<-@.>  wrote:

[ snip ]

> BTW I refactored your test that you were copy-and-pasting around into 
> one method.  Using techniques I mentioned in my first post to you on 
> this subject.
> 
>      private static void time( TestCase r ) {
>          long StartTime = System.nanoTime();
>          for( int i = 1; i <= nRepetitions; i++ ) {
>             r.parse();
>          }
>          long EndTime = System.nanoTime();
>          long Duration = EndTime - StartTime;
>          System.out.println( " Duration=" + (Duration/1e9) );
>      }

Gene --

Below is my revision, along similar lines to what markspace suggests
above but a complete program program based on your code.  I tried not
to make gratuitous additional changes, but I admit that I did move the
declaration of the loop counter into the "for" construct because, well,
*one* gratuitous change to make the program look less Java-unidiomatic?
(Also I admit I ran the whole program through vim's "reindent", but
that should change only whitespace.)

Non-whitespace changes marked "// (blmblm)".


import java.util.*;



public class TimingTesting2
{

    // (blmblm) added
    interface Searcher {
        boolean search(char CurrChar);
    }

    static String cParseString=
        "//identifier//IDENTIFIER//a_b_c abc1234b5%$__dbl;one;two;three;END";

    static String IdentChars=
        "0123456789"+
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+
        "_"+
        "abcdefghijklmnopqrstuvwxyz";     // sorted order!

    static SortedSet<Character> IdentCharsSet=new TreeSet<Character>();

    static int nRepetitions=1000000;



    static boolean SequentialSearch
        (
         char CurrChar
        )
        {
            boolean fFound=false;
            for (int i=0; i<IdentChars.length() && !fFound; i++)
                fFound=IdentChars.charAt(i)==CurrChar;
            return fFound;
        }



    static boolean BinarySearch
        (
         char CurrChar
        )
        {
            int xLow=0;
            int xHigh=IdentChars.length()-1;
            int xTry;
            boolean fFound=false;
            while (xLow<=xHigh)
            {
                xTry=(xLow+xHigh)/2;
                if (CurrChar==IdentChars.charAt(xTry))
                    return true;
                if (CurrChar<IdentChars.charAt(xTry))
                    xHigh=xTry-1;
                else
                    xLow=xTry+1;
            }
            return false;
        }



    static boolean TreesetSearch
        (
         char CurrChar
        )
        {
            return IdentCharsSet.contains(CurrChar);
        }


    // (blmblm) merge three separate Parse routines
    static void Parse(Searcher searcher)
    {
        int xScan=0;
        boolean fBuildingIdent=false;
        boolean fInIdentChars;
        String cIdent="";     // fussy init
        while (xScan<cParseString.length())
        {
            char CurrChar=cParseString.charAt(xScan);
            fInIdentChars=SequentialSearch(CurrChar);
            if (searcher.search(CurrChar))     // (blmblm)
                if (fBuildingIdent)
                    cIdent+=CurrChar;
                else
                {
                    fBuildingIdent=true;
                    cIdent=""+CurrChar;
                }
            else
                if (fBuildingIdent)
                {
                    fBuildingIdent=false;
                    if (nRepetitions==1)
                        System.out.println(cIdent);
                }
                else
                {}
            xScan++;
        }
        if (fBuildingIdent)
            if (nRepetitions==1)
                System.out.println(cIdent);
    }


    // (blmblm) factor out common code, as suggested by markspace
    static void time(Searcher searcher) {
        long StartTime;
        long EndTime;
        long Duration;

        StartTime=System.nanoTime();
        // (blmblm) gratuitous change (declare loop counter within "for")
        for (int i=1; i<=nRepetitions; i++)
            Parse(searcher);
        EndTime=System.nanoTime();
        Duration=EndTime-StartTime;
        System.out.println(" Duration="+Duration);
    }


    public static void main(String[] args)
    {
        System.out.println("Timing Testing of Character Searching");
        System.out.println();

        // Initialise Set.
        // (blmblm) gratuitous change (declare loop counter within "for")
        for (int i=0; i<IdentChars.length(); i++)
            IdentCharsSet.add(IdentChars.charAt(i));

        // Character Sequential
        System.out.print("Character Sequential Search");
        // (blmblm) use common-code method
        time(new Searcher() {
            public boolean search(char CurrChar) {
                return SequentialSearch(CurrChar);
            }
        });

        // Character Binary Search
        System.out.print("Character Binary Search    ");
        // (blmblm) use common-code method
        time(new Searcher() {
            public boolean search(char CurrChar) {
                return BinarySearch(CurrChar);
            }
        });

        // Character Treeset
        System.out.print("Character Treeset Search   ");
        // (blmblm) use common-code method
        time(new Searcher() {
            public boolean search(char CurrChar) {
                return TreesetSearch(CurrChar);
            }
        });
    }

}

-- 
B. L. Massingill
ObDisclaimer:  I don't speak for my employers; they return the favor.

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-23 16:03 -0700
  Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-23 16:26 -0700
    Re: Passing a Method Name to a Method, Redux blmblm@myrealbox.com <blmblm.myrealbox@gmail.com> - 2011-06-27 21:41 +0000
  Re: Passing a Method Name to a Method, Redux markspace <-@.> - 2011-06-23 17:24 -0700
    Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-23 19:46 -0700
      Re: Passing a Method Name to a Method, Redux blmblm@myrealbox.com <blmblm.myrealbox@gmail.com> - 2011-07-04 03:26 +0000
        Re: Passing a Method Name to a Method, Redux lewbloch <lewbloch@gmail.com> - 2011-07-04 03:41 -0700
          Re: Passing a Method Name to a Method, Redux blmblm@myrealbox.com <blmblm.myrealbox@gmail.com> - 2011-07-05 19:07 +0000
  Re: Passing a Method Name to a Method, Redux markspace <-@.> - 2011-06-23 17:34 -0700
    Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-23 19:42 -0700
  Re: Passing a Method Name to a Method, Redux markspace <-@.> - 2011-06-23 18:30 -0700
    Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-23 19:48 -0700
      Re: Passing a Method Name to a Method, Redux markspace <-@.> - 2011-06-23 21:02 -0700
        Re: Passing a Method Name to a Method, Redux lewbloch <lewbloch@gmail.com> - 2011-06-24 08:38 -0700
          Re: Passing a Method Name to a Method, Redux markspace <-@.> - 2011-06-24 09:04 -0700
            Re: Passing a Method Name to a Method, Redux Lew <noone@lewscanon.com> - 2011-06-26 13:43 -0400
              Re: Passing a Method Name to a Method, Redux Lew <noone@lewscanon.com> - 2011-06-26 14:31 -0400
        Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-24 11:45 -0700
          Re: Passing a Method Name to a Method, Redux markspace <-@.> - 2011-06-24 12:19 -0700
            Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-26 20:39 -0700
              Re: Passing a Method Name to a Method, Redux markspace <-@.> - 2011-06-26 23:33 -0700
                Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-27 13:53 -0700
                Re: Passing a Method Name to a Method, Redux markspace <-@.> - 2011-06-27 18:03 -0700
                Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-28 11:41 -0700
        Re: Passing a Method Name to a Method, Redux blmblm@myrealbox.com <blmblm.myrealbox@gmail.com> - 2011-06-24 19:19 +0000
  Re: Passing a Method Name to a Method, Redux Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-06-23 19:36 -0700
    Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-24 11:50 -0700
      Re: Passing a Method Name to a Method, Redux Jeff Higgins <jeff@invalid.invalid> - 2011-06-24 17:25 -0400
        Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-26 20:42 -0700
          Re: Passing a Method Name to a Method, Redux markspace <-@.> - 2011-06-26 23:27 -0700
          Re: Passing a Method Name to a Method, Redux Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-06-27 03:04 -0400
            Re: Passing a Method Name to a Method, Redux Gene Wirchenko <genew@ocis.net> - 2011-06-27 13:12 -0700
              Re: Passing a Method Name to a Method, Redux Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-06-27 13:36 -0700
      Re: Passing a Method Name to a Method, Redux Joshua Cranmer <Pidgeot18@verizon.invalid> - 2011-06-24 15:50 -0700

csiph-web