home *** CD-ROM | disk | FTP | other *** search
/ Chip Special: HTML & Java / Chip-Special_1997-01_HTML-a-Java.bin / javasdk / sdk-java.exe / SDKJava.cab / Samples / native / SieveDemo / SieveDemo.java < prev   
Encoding:
Java Source  |  1996-10-10  |  2.7 KB  |  106 lines

  1. //----------------------------------------------------------------------------
  2. //
  3. //----------------------------------------------------------------------------
  4. import java.awt.*;
  5. import java.applet.Applet;
  6.  
  7. //----------------------------------------------------------------------------
  8. public class SieveDemo extends Applet
  9. {
  10.     byte[] mabFlags = new byte[32768*2];
  11.     int mhBar = 10;
  12.     int mhGap = 2;
  13.     int mwGap = 2;
  14.     int mx;
  15.     int my;
  16.     int mhBarMax;
  17.     Rectangle mrect;
  18.     int mc;
  19.     int mhText;
  20.     int mwTextMax;
  21.     long mTTotal;
  22.     long mtLast;
  23.     
  24.     public void init()
  25.     {
  26.         mrect = bounds();
  27.         Graphics g = getGraphics();
  28.         if (g != null)
  29.         {
  30.             FontMetrics fm = g.getFontMetrics();
  31.             mhText = fm.getHeight();
  32.             mwTextMax = fm.stringWidth("9999")+mwGap;
  33.             g.dispose();
  34.         }
  35.  
  36.         mhBarMax = Math.max(mhText, mhBar) + mhGap;
  37.         mtLast = System.currentTimeMillis();
  38.         
  39.         repaint();
  40.     }
  41.  
  42.     public void update(Graphics g)
  43.     {
  44.         // Calc bar.
  45.         Sieve.CountPrimes(mabFlags);
  46.         long t = System.currentTimeMillis()-mtLast;
  47.         mtLast = System.currentTimeMillis();
  48.         mTTotal += t;        
  49.  
  50.         // Scroll if needed.    
  51.         if (my + mhBarMax > mrect.height)
  52.         {            
  53.             g.copyArea(0, mhBarMax, mrect.width, mrect.height-mhBarMax, 0, -mhBarMax);
  54.             my -= mhBarMax;
  55.         }   
  56.  
  57.         DrawBar(g, (int)t);
  58.  
  59.         // Update the position.
  60.         mc++;
  61.         my += mhBarMax;
  62.  
  63.         // Average on status bar.
  64.         showStatus("Average: " + mTTotal/mc);
  65.         
  66.         // Do it again.
  67.         repaint();
  68.     }
  69.  
  70.     void DrawBar(Graphics g, int t)
  71.     {
  72.         int w = (int)((mrect.width-mwTextMax)*(1000-t))/1000;
  73.         g.setColor(Color.lightGray);
  74.         g.fillRect(mx, my, mrect.width, mhBarMax);
  75.         g.setColor(Color.black);
  76.         g.drawString(Integer.toString(mc), mx, mhText+my+((mhBarMax-mhText)/2)-1);
  77.         g.setColor(Color.blue);
  78.         g.fillRect(mx+mwTextMax, my+((mhBarMax-mhBar)/2), w, mhBar);
  79.     }
  80. }
  81.  
  82. //----------------------------------------------------------------------------
  83. class Sieve
  84. {
  85.     static int CountPrimes(byte[] abFlags)
  86.     {
  87.         int count = 0;
  88.  
  89.         for (int i = 0; i < abFlags.length; i++)
  90.             abFlags[i] = 1;
  91.  
  92.         for (int i = 2; i < abFlags.length; i++)
  93.         {
  94.             if (abFlags[i] != 0)
  95.             {
  96.                 for (int k = i + i; k < abFlags.length; k += i)
  97.                     abFlags[k] = 0;
  98.  
  99.                 count++;
  100.             }
  101.         }
  102.  
  103.         return count;
  104.     }
  105. }
  106.