1 /* =============================================================================
5 * =============================================================================
7 * Copyright (C) Stanford University, 2006. All Rights Reserved.
10 * =============================================================================
12 * For the license of bayes/sort.h and bayes/sort.c, please see the header
15 * ------------------------------------------------------------------------
17 * For the license of kmeans, please see kmeans/LICENSE.kmeans
19 * ------------------------------------------------------------------------
21 * For the license of ssca2, please see ssca2/COPYRIGHT
23 * ------------------------------------------------------------------------
25 * For the license of lib/mt19937ar.c and lib/mt19937ar.h, please see the
26 * header of the files.
28 * ------------------------------------------------------------------------
30 * For the license of lib/rbtree.h and lib/rbtree.c, please see
31 * lib/LEGALNOTICE.rbtree and lib/LICENSE.rbtree
33 * ------------------------------------------------------------------------
35 * Unless otherwise noted, the following license applies to STAMP files:
37 * Copyright (c) 2007, Stanford University
38 * All rights reserved.
40 * Redistribution and use in source and binary forms, with or without
41 * modification, are permitted provided that the following conditions are
44 * * Redistributions of source code must retain the above copyright
45 * notice, this list of conditions and the following disclaimer.
47 * * Redistributions in binary form must reproduce the above copyright
48 * notice, this list of conditions and the following disclaimer in
49 * the documentation and/or other materials provided with the
52 * * Neither the name of Stanford University nor the names of its
53 * contributors may be used to endorse or promote products derived
54 * from this software without specific prior written permission.
56 * THIS SOFTWARE IS PROVIDED BY STANFORD UNIVERSITY ``AS IS'' AND ANY
57 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
58 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
59 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE
60 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
61 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
62 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
63 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
64 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
65 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
66 * THE POSSIBILITY OF SUCH DAMAGE.
68 * =============================================================================
72 typedef struct router_solve_arg {
75 list_t* pathVectorListPtr;
84 public class Solve_Arg {
87 List_t pathVectorListPtr;
100 private class Point {
107 public Point(int x,int y, int z,int value, Momentum_t m) {
116 Point MOVE_POSX = new Point(1,0,0,0,MOMENTUM_POSX);
117 Point MOVE_POSY = new Point(0,1,0,0,MOMENTUM_POSY);
118 Point MOVE_POSZ = new Point(0,0,1,0,MOMENTUM_POSZ);
119 Point MOVE_NEGX = new Point(-1,0,0,0,MOMENTUM_NEGX);
120 Point MOVE_NEGY = new Point(0,-1,0,0,MOMENTUM_NEGY);
121 Point MOVE_NEGZ = new Point(0,0,-1,0,MOMENTUM_NEGZ);
124 /* =============================================================================
126 * =============================================================================
127 * router_t* router_alloc (long xCost, long yCost, long zCost, long bendCost);
129 public static Router alloc(int xCost,int yCost,int zCost,int bendCost)
131 Router routerPtr = new Router();
133 if(routerPtr != null) {
134 routerPtr.xCost = xCost;
135 routerPtr.yCost = yCost;
136 routerPtr.zCost = zCost;
137 routerPtr.bendCost = bendCost;
146 /* =============================================================================
148 * =============================================================================
149 * void router_free (router_t* routerPtr);
151 public static void free(Router routerPtr)
158 /* ============================================================================
160 * ============================================================================
162 private void traceToNeighbor(Grid myGridPtr,
169 int x = currPtr.x + movePtr.x;
170 int y = currPtr.y + movePtr.y;
171 int z = currPtr.z + movePtr.z;
173 if (myGridPtr.isPointValid(x,y,z) &&
174 !myGridPtr.isPointEmpty(x,y,z) &&
175 !myGridPtr.isPointFull(x,y,z))
177 int value = myGridPtr.getPoint(x,y,z);
180 if (useMomentum && (currPtr.momentum != movePtr.momentum)) {
183 if ((value + b) <= nextPtr.value) { /* '=' favors neighbors over current */
187 nextPtr.value = value;
188 nextPtr.momentum = movePtr.momentum;
194 /* =============================================================================
196 * =============================================================================
197 * void router_solve (void* argPtr);
199 public void solve(Object argPtr)
207 /* =============================================================================
211 * =============================================================================