chiark
/
gitweb
/
~yarrgweb
/
ypp-sc-tools.web-live.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0145dc7
)
WIP routesearch; fix IslandTradeEnd memory management
author
Ian Jackson
<ian@liberator.(none)>
Sat, 3 Oct 2009 08:54:20 +0000
(09:54 +0100)
committer
Ian Jackson
<ian@liberator.(none)>
Sat, 3 Oct 2009 08:54:20 +0000
(09:54 +0100)
yarrg/rsvalue.c
patch
|
blob
|
history
diff --git
a/yarrg/rsvalue.c
b/yarrg/rsvalue.c
index f046c99a896c56ee753a9430144ebd99b6fe7857..da7dbaf232bca44c85d733f5cd8830215a044f1f 100644
(file)
--- a/
yarrg/rsvalue.c
+++ b/
yarrg/rsvalue.c
@@
-40,12
+40,14
@@
typedef struct IslandTradeEnd {
int qty;
unsigned long generation;
int rownum;
int qty;
unsigned long generation;
int rownum;
-} IslandTradeEnd
, *IslandDirnTradeEnds
;
+} IslandTradeEnd;
typedef struct {
typedef struct {
- int islandid;
- IslandDirnTradeEnds collect, deliver;
-} IslandTradeEnds;
+ IslandTradeEnd *src, *dst;
+} IslandTradeEndHeads;
+
+IslandTradeEndHeads *itradeends;
+ /* itradeends[islandid].{src,dst}->commodid etc. */
static LPX *lp;
static unsigned long generation;
static LPX *lp;
static unsigned long generation;
@@
-61,7
+63,7
@@
static void add_constraint(int row, double coefficient) {
constraint_coeffs[nconstraint_rows]= coefficient;
}
constraint_coeffs[nconstraint_rows]= coefficient;
}
-static void avail_c(const Trade *t, Island
DirnTradeEnds
*trades,
+static void avail_c(const Trade *t, Island
TradeEnd *
*trades,
int price, const char *srcdst,
int islandid, sqlite3_stmt *ss_ite) {
/* find row number of trade availability constraint */
int price, const char *srcdst,
int islandid, sqlite3_stmt *ss_ite) {
/* find row number of trade availability constraint */
@@
-211,25
+213,6
@@
double value_route(int nislands, const int *islands) {
assert(nislands >= 1);
assert(++generation);
assert(nislands >= 1);
assert(++generation);
- int nites=0;
- IslandTradeEnds ites[nislands], *iteps[nislands];
-
- for (s=0; s<nislands; s++) {
- IslandTradeEnds *ite;
- int si= islands[s];
- int i;
- for (i=0, ite=ites; i<nites; i++, ite++)
- if (ite->islandid==si)
- goto found;
- /* not found, add new */
- assert(ite == &ites[nites]);
- ite->islandid= si;
- ite->collect= ite->deliver= 0;
- nites++;
- found:
- iteps[s]= ite;
- }
-
assert(!lp);
lp= lpx_create_prob();
lpx_set_obj_dir(lp, LPX_MAX);
assert(!lp);
lp= lpx_create_prob();
lpx_set_obj_dir(lp, LPX_MAX);
@@
-288,8
+271,8
@@
double value_route(int nislands, const int *islands) {
nconstraint_rows=0;
nconstraint_rows=0;
- avail_c(t, &it
eps[s]->collect, t->src_price,
"src", si, ss_ite_sell);
- avail_c(t, &it
eps[d]->deliver, t->dst_price,
"dst", di, ss_ite_buy);
+ avail_c(t, &it
radeends[s].src, t->src_price,
"src", si, ss_ite_sell);
+ avail_c(t, &it
radeends[d].dst, t->dst_price,
"dst", di, ss_ite_buy);
int leg;
for (leg=s; leg<d; leg++) {
int leg;
for (leg=s; leg<d; leg++) {
@@
-354,6
+337,8
@@
void setup_value(void) {
for (i=0; i<commodstablesz; i++)
commodstable[i].mass= commodstable[i].volu= -1;
for (i=0; i<commodstablesz; i++)
commodstable[i].mass= commodstable[i].volu= -1;
+ itradeends= mcalloc(sizeof(*itradeends) * islandtablesz);
+
SQL_PREPARE(sst,
"SELECT commodid,unitmass,unitvolume FROM commods");
while (SQL_STEP(sst)) {
SQL_PREPARE(sst,
"SELECT commodid,unitmass,unitvolume FROM commods");
while (SQL_STEP(sst)) {