~ubuntu-branches/ubuntu/precise/jcsp/precise

« back to all changes in this revision

Viewing changes to src/jcsp-demos/hamming/PrimeMultiples2.java

  • Committer: Bazaar Package Importer
  • Author(s): Miguel Landaeta
  • Date: 2010-06-20 18:12:26 UTC
  • Revision ID: james.westby@ubuntu.com-20100620181226-8yg8d9rjjjiuy7oz
Tags: upstream-1.1-rc4
ImportĀ upstreamĀ versionĀ 1.1-rc4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
    //////////////////////////////////////////////////////////////////////
 
2
    //                                                                  //
 
3
    //  JCSP ("CSP for Java") Libraries                                 //
 
4
    //  Copyright (C) 1996-2008 Peter Welch and Paul Austin.            //
 
5
    //                2001-2004 Quickstone Technologies Limited.        //
 
6
    //                                                                  //
 
7
    //  This library is free software; you can redistribute it and/or   //
 
8
    //  modify it under the terms of the GNU Lesser General Public      //
 
9
    //  License as published by the Free Software Foundation; either    //
 
10
    //  version 2.1 of the License, or (at your option) any later       //
 
11
    //  version.                                                        //
 
12
    //                                                                  //
 
13
    //  This library is distributed in the hope that it will be         //
 
14
    //  useful, but WITHOUT ANY WARRANTY; without even the implied      //
 
15
    //  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR         //
 
16
    //  PURPOSE. See the GNU Lesser General Public License for more     //
 
17
    //  details.                                                        //
 
18
    //                                                                  //
 
19
    //  You should have received a copy of the GNU Lesser General       //
 
20
    //  Public License along with this library; if not, write to the    //
 
21
    //  Free Software Foundation, Inc., 59 Temple Place, Suite 330,     //
 
22
    //  Boston, MA 02111-1307, USA.                                     //
 
23
    //                                                                  //
 
24
    //  Author contact: P.H.Welch@kent.ac.uk                             //
 
25
    //                                                                  //
 
26
    //                                                                  //
 
27
    //////////////////////////////////////////////////////////////////////
 
28
 
 
29
 
 
30
import org.jcsp.lang.*;
 
31
import org.jcsp.util.ints.*;
 
32
import org.jcsp.plugNplay.ints.*;
 
33
 
 
34
/**
 
35
 * @author P.H. Welch
 
36
 */
 
37
public final class PrimeMultiples2 implements CSProcess {
 
38
 
 
39
  private final ChannelOutputInt trap;
 
40
 
 
41
  private final int[] primes;
 
42
  private final int minPrimes = 2;
 
43
 
 
44
  private final int howMany;
 
45
 
 
46
  public PrimeMultiples2 (final int[] primes, final int howMany,
 
47
                          final ChannelOutputInt trap) {
 
48
    // assume these are distinct primes (and at least minPrimes of them)
 
49
    this.primes = primes;
 
50
    if (howMany < minPrimes) {
 
51
      this.howMany = minPrimes;
 
52
    } else if (howMany > primes.length) {
 
53
      this.howMany = primes.length;
 
54
    } else {
 
55
      this.howMany = howMany;
 
56
    }
 
57
    this.trap = trap;
 
58
  }
 
59
 
 
60
  public void run () {
 
61
 
 
62
    final One2OneChannelInt[] a = Channel.one2oneIntArray (howMany + 1);
 
63
    final One2OneChannelInt[] b = Channel.one2oneIntArray (howMany, new InfiniteBufferInt ());
 
64
    final One2OneChannelInt c = Channel.one2oneInt ();
 
65
    final One2OneChannelInt d = Channel.one2oneInt ();
 
66
    final One2OneChannelInt e = Channel.one2oneInt ();
 
67
 
 
68
    final CSProcess[] Multipliers = new CSProcess[howMany];
 
69
    for (int i = 0; i < howMany; i++) {
 
70
      Multipliers[i] = new MultInt (primes[i], a[i].in (), b[i].out ());
 
71
    }
 
72
 
 
73
    new Parallel (
 
74
      new CSProcess[] {
 
75
        new Parallel (Multipliers),
 
76
        new MergeInt (Channel.getInputArray (b), c.out ()),
 
77
        new PrefixInt (1, c.in (), d.out ()),
 
78
        new DeltaInt (d.in (), Channel.getOutputArray (a)),
 
79
        new TrapNegative (a[howMany].in (), e.out (), trap),
 
80
        new PrinterInt (e.in (), "", " ")
 
81
      }
 
82
    ).run ();
 
83
  }
 
84
 
 
85
}