#include <stdio.h>#include <stdlib.h>#include <assert.h>#include "common.h"#include "lctypes.h"#include "lin-city.h"#include "transport.h"#include "power.h"#include "stats.h"Go to the source code of this file.
Functions | |
| void | do_track (int x, int y) |
| void | do_rail (int x, int y) |
| void | do_road (int x, int y) |
| void | general_transport (Map_Point_Info *minfo, int *pol, int max_waste, int *waste_count) |
|
||||||||||||
|
Definition at line 37 of file transport.c. 00038 {
00039 static int wb_count = 0;
00040 int *pol = &MP_POL(x,y);
00041 Map_Point_Info *minfo = &MP_INFO(x,y);
00042 transport_cost += 3;
00043 if (total_time % DAYS_PER_RAIL_POLLUTION == 0)
00044 *pol += RAIL_POLLUTION;
00045 if ((total_time & RAIL_GOODS_USED_MASK) == 0 && minfo->int_4 > 0) {
00046 --minfo->int_4;
00047 ++minfo->int_7;
00048 }
00049 if ((total_time & RAIL_STEEL_USED_MASK) == 0 && minfo->int_6 > 0) {
00050 --minfo->int_6;
00051 ++minfo->int_7;
00052 }
00053 general_transport (minfo, pol, MAX_WASTE_ON_RAIL, &wb_count);
00054 }
|
|
||||||||||||
|
Definition at line 57 of file transport.c. 00058 {
00059 static int wb_count = 0;
00060 int *pol = &MP_POL(x,y);
00061 Map_Point_Info *minfo = &MP_INFO(x,y);
00062 ++transport_cost;
00063 if (total_time % DAYS_PER_ROAD_POLLUTION == 0)
00064 *pol += ROAD_POLLUTION;
00065 if ((total_time & ROAD_GOODS_USED_MASK) == 0 && minfo->int_4 > 0) {
00066 --minfo->int_4;
00067 ++minfo->int_7;
00068 }
00069 general_transport (minfo, pol, MAX_WASTE_ON_ROAD, &wb_count);
00070 }
|
|
||||||||||||
|
Definition at line 29 of file transport.c. 00030 {
00031 static int wb_count = 0;
00032 general_transport (&MP_INFO(x,y), &MP_POL(x,y),
00033 MAX_WASTE_ON_TRACK, &wb_count);
00034 }
|
|
||||||||||||||||||||
|
Definition at line 73 of file transport.c. 00075 {
00076 int tot, av, *base, xm1, xp1, ym1, yp1;
00077
00078 /* 30. Oct 1996:
00079 * we'll use a loop with pointers here instead of doin' each
00080 * operation by hand. this reduces code complexity and should
00081 * lead to a higher cache hit ratio - theoretically
00082 * (ThMO)
00083 *
00084 * 12. Dec 1996:
00085 * as this is a heavy used routine, another speedup improvement is
00086 * needed. we'll now use 1 pointer, which will be incremented and
00087 * 1 .. 4 constant indices, which replaces the old pointer-pure
00088 * version.
00089 * advantages: elimination of unnecessary pointer increments.
00090 * Note: this *only* works, if the related addresses use one and the
00091 * same address space - which is naturally for 2-dimensional
00092 * arrays.
00093 * (ThMO)
00094 */
00095
00096 base = &minfo->int_1;
00097 switch (minfo->flags & 0x0F)
00098 {
00099 case 0:
00100 return;
00101
00102 case 1: /* inlined t_av_l() -- (ThMO) */
00103 xm1 = &minfo[-WORLD_SIDE_LEN].int_1 - base;
00104 do {
00105 tot = *base + base[xm1];
00106 av = tot / 2;
00107 base[xm1] = av;
00108 *base++ = av + tot % 2;
00109 } while (base <= &minfo->int_7);
00110 break;
00111
00112 case 2: /* inlined t_av_u() -- (ThMO) */
00113 ym1 = &minfo[-1].int_1 - base;
00114 do {
00115 tot = *base + base[ym1];
00116 av = tot / 2;
00117 base[ym1] = av;
00118 *base++ = av + tot % 2;
00119 } while (base <= &minfo->int_7);
00120 break;
00121
00122 case 3: /* inlined t_av_lu() -- (ThMO) */
00123 xm1 = &minfo[-WORLD_SIDE_LEN].int_1 - base;
00124 ym1 = &minfo[-1].int_1 - base;
00125 do {
00126 tot = *base + base[xm1] + base[ym1];
00127 av = tot / 3;
00128 base[xm1] = base[ym1] = av;
00129 *base++ = av + tot % 3;
00130 } while (base <= &minfo->int_7);
00131 break;
00132
00133 case 4: /* inlined t_av_r() -- (ThMO) */
00134 xp1 = &minfo[WORLD_SIDE_LEN].int_1 - base;
00135 do {
00136 tot = *base + base[xp1];
00137 av = tot / 2;
00138 base[xp1] = av;
00139 *base++ = av + tot % 2;
00140 } while (base <= &minfo->int_7);
00141 break;
00142
00143 case 5: /* inlined t_av_lr() -- (ThMO) */
00144 xm1 = &minfo[-WORLD_SIDE_LEN].int_1 - base;
00145 xp1 = &minfo[WORLD_SIDE_LEN].int_1 - base;
00146 do {
00147 tot = *base + base[xm1] + base[xp1];
00148 av = tot / 3;
00149 base[xm1] = base[xp1] = av;
00150 *base++ = av + tot % 3;
00151 } while (base <= &minfo->int_7);
00152 break;
00153
00154 case 6: /* inline t_av_ur() -- (ThMO) */
00155 ym1 = &minfo[-1].int_1 - base;
00156 xp1 = &minfo[WORLD_SIDE_LEN].int_1 - base;
00157 do {
00158 tot = *base + base[ym1] + base[xp1];
00159 av = tot / 3;
00160 base[ym1] = base[xp1] = av;
00161 *base++ = av + tot % 3;
00162 } while (base <= &minfo->int_7);
00163 break;
00164
00165 case 7: /* inlined t_av_lur() -- (ThMO) */
00166 xm1 = &minfo[-WORLD_SIDE_LEN].int_1 - base;
00167 ym1 = &minfo[-1].int_1 - base;
00168 xp1 = &minfo[WORLD_SIDE_LEN].int_1 - base;
00169 do {
00170 tot = *base + base[xm1] + base[ym1] + base[xp1];
00171 av = tot / 4;
00172 base[xm1] = base[ym1] = base[xp1] = av;
00173 *base++ = av + tot % 4;
00174 } while (base <= &minfo->int_7);
00175 break;
00176
00177 case 8: /* inlined t_av_d() -- (ThMO) */
00178 yp1 = &minfo[1].int_1 - base;
00179 do {
00180 tot = *base + base[yp1];
00181 av = tot / 2;
00182 base[yp1] = av;
00183 *base++ = av + tot % 2;
00184 } while (base <= &minfo->int_7);
00185 break;
00186
00187 case 9: /* inlined t_av_ld() -- (ThMO) */
00188 xm1 = &minfo[-WORLD_SIDE_LEN].int_1 - base;
00189 yp1 = &minfo[1].int_1 - base;
00190 do {
00191 tot = *base + base[xm1] + base[yp1];
00192 av = tot / 3;
00193 base[xm1] = base[yp1] = av;
00194 *base++ = av + tot % 3;
00195 } while (base <= &minfo->int_7);
00196 break;
00197
00198 case 10: /* inlined t_av_ud() -- (ThMO) */
00199 ym1 = &minfo[-1].int_1 - base;
00200 yp1 = &minfo[1].int_1 - base;
00201 do {
00202 tot = *base + base[ym1] + base[yp1];
00203 av = tot / 3;
00204 base[ym1] = base[yp1] = av;
00205 *base++ = av + tot % 3;
00206 } while (base <= &minfo->int_7);
00207 break;
00208
00209 case 11: /* inlined t_av_lud() -- (ThMO) */
00210 xm1 = &minfo[-WORLD_SIDE_LEN].int_1 - base;
00211 ym1 = &minfo[-1].int_1 - base;
00212 yp1 = &minfo[1].int_1 - base;
00213 do {
00214 tot = *base + base[xm1] + base[ym1] + base[yp1];
00215 av = tot / 4;
00216 base[xm1] = base[ym1] = base[yp1] = av;
00217 *base++ = av + tot % 4;
00218 } while (base <= &minfo->int_7);
00219 break;
00220
00221 case 12: /* inlined t_av_rd() -- (ThMO) */
00222 xp1 = &minfo[WORLD_SIDE_LEN].int_1 - base;
00223 yp1 = &minfo[1].int_1 - base;
00224 do {
00225 tot = *base + base[xp1] + base[yp1];
00226 av = tot / 3;
00227 base[xp1] = base[yp1] = av;
00228 *base++ = av + tot % 3;
00229 } while (base <= &minfo->int_7);
00230 break;
00231
00232 case 13: /* inlined t_av_lrd() -- (ThMO) */
00233 xm1 = &minfo[-WORLD_SIDE_LEN].int_1 - base;
00234 xp1 = &minfo[WORLD_SIDE_LEN].int_1 - base;
00235 yp1 = &minfo[1].int_1 - base;
00236 do {
00237 tot = *base + base[xm1] + base[xp1] + base[yp1];
00238 av = tot / 4;
00239 base[xm1] = base[xp1] = base[yp1] = av;
00240 *base++ = av + tot % 4;
00241 } while (base <= &minfo->int_7);
00242 break;
00243
00244 case 14: /* inlined t_av_urd() -- (ThMO) */
00245 ym1 = &minfo[-1].int_1 - base;
00246 xp1 = &minfo[WORLD_SIDE_LEN].int_1 - base;
00247 yp1 = &minfo[1].int_1 - base;
00248 do {
00249 tot = *base + base[ym1] + base[xp1] + base[yp1];
00250 av = tot / 4;
00251 base[ym1] = base[xp1] = base[yp1] = av;
00252 *base++ = av + tot % 4;
00253 } while (base <= &minfo->int_7);
00254 break;
00255
00256 case 15: /* inlined t_av_lurd() -- (ThMO) */
00257 xm1 = &minfo[-WORLD_SIDE_LEN].int_1 - base;
00258 ym1 = &minfo[-1].int_1 - base;
00259 xp1 = &minfo[WORLD_SIDE_LEN].int_1 - base;
00260 yp1 = &minfo[1].int_1 - base;
00261 do {
00262 tot = *base + base[xm1] + base[ym1] + base[xp1] + base[yp1];
00263 av = tot / 5;
00264 base[xm1] = base[ym1] = base[xp1] = base[yp1] = av;
00265 *base++ = av + tot % 5;
00266 } while (base <= &minfo->int_7);
00267 break;
00268 }
00269 if (*--base >= max_waste) {
00270 *base -= WASTE_BURN_ON_TRANSPORT;
00271 ++*pol;
00272 if (*waste_count > TRANSPORT_BURN_WASTE_COUNT) {
00273 *waste_count = 0;
00274 } else {
00275 ++ * waste_count;
00276 }
00277 }
00278 }
|
1.3.9.1