[genius] Thu Jul 14 17:26:00 2011 Jiri (George) Lebl <jirka 5z com>
- From: George Lebl <jirka src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [genius] Thu Jul 14 17:26:00 2011 Jiri (George) Lebl <jirka 5z com>
- Date: Fri, 15 Jul 2011 00:26:13 +0000 (UTC)
commit 5b038be5ebaa5f88ab0cdb64fa20e7587761db64
Author: Jiri (George) Lebl <jirka 5z com>
Date: Thu Jul 14 17:26:06 2011 -0700
Thu Jul 14 17:26:00 2011 Jiri (George) Lebl <jirka 5z com>
* src/eval.c: minor optimizations
ChangeLog | 4 ++
src/eval.c | 110 ++++++++++++++++++++++++++++++++----------------------------
2 files changed, 63 insertions(+), 51 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index c9baa58..ad35572 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Thu Jul 14 17:26:00 2011 Jiri (George) Lebl <jirka 5z com>
+
+ * src/eval.c: minor optimizations
+
Thu Jul 14 16:34:40 2011 Jiri (George) Lebl <jirka 5z com>
* lib/linear_algebra/misc.gel: Optimize SortVector (use quicksort
diff --git a/src/eval.c b/src/eval.c
index c404213..bd0b9a1 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -5259,7 +5259,7 @@ iter_get_matrix_index_vector (GelETree *index, int maxsize, int *vlen)
for (i = 0; i < reglen; i++) {
GelETree *it = gel_matrixw_vindex (index->mat.matrix, i);
reg[i] = iter_get_ui_index (it) - 1;
- if (reg[i] < 0) {
+ if G_UNLIKELY (reg[i] < 0) {
g_free (reg);
return NULL;
} else if G_UNLIKELY (reg[i] >= maxsize) {
@@ -5276,7 +5276,7 @@ static inline int
iter_get_matrix_index_num (GelETree *index, int maxsize)
{
int i = iter_get_ui_index (index) - 1;
- if (i < 0) {
+ if G_UNLIKELY (i < 0) {
return -1;
} else if G_UNLIKELY (i >= maxsize) {
gel_errorout (_("Matrix index out of range"));
@@ -5290,14 +5290,14 @@ iter_get_index_region (GelETree *index, int maxsize, int **reg, int *l)
{
if (index->type == GEL_VALUE_NODE) {
int i = iter_get_matrix_index_num (index, maxsize);
- if (i < 0)
+ if G_UNLIKELY (i < 0)
return FALSE;
*reg = g_new (int, 1);
(*reg)[0] = i;
*l = 1;
} else /* GEL_MATRIX_NODE */ {
*reg = iter_get_matrix_index_vector (index, maxsize, l);
- if (*reg == NULL)
+ if G_UNLIKELY (*reg == NULL)
return FALSE;
}
return TRUE;
@@ -5536,17 +5536,21 @@ iter_equalsop(GelETree *n)
int x, y;
x = iter_get_matrix_index_num (index2, INT_MAX);
- if (x < 0)
+ if G_UNLIKELY (x < 0)
return;
y = iter_get_matrix_index_num (index1, INT_MAX);
- if (y < 0)
+ if G_UNLIKELY (y < 0)
return;
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL)
+ if G_UNLIKELY (mat == NULL)
return;
- gel_matrixw_set_element (mat, x, y, gel_copynode (r));
+ if (r->type == GEL_VALUE_NODE &&
+ mpw_exact_zero_p (r->val.value))
+ gel_matrixw_set_element (mat, x, y, NULL);
+ else
+ gel_matrixw_set_element (mat, x, y, gel_copynode (r));
} else if ((index1->type == GEL_VALUE_NODE ||
index1->type == GEL_MATRIX_NODE) &&
(index2->type == GEL_VALUE_NODE ||
@@ -5570,7 +5574,7 @@ iter_equalsop(GelETree *n)
}
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL) {
+ if G_UNLIKELY (mat == NULL) {
g_free (regx);
g_free (regy);
return;
@@ -5595,24 +5599,28 @@ iter_equalsop(GelETree *n)
int i;
i = iter_get_matrix_index_num (index, INT_MAX);
- if (i < 0)
+ if G_UNLIKELY (i < 0)
return;
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL)
+ if G_UNLIKELY (mat == NULL)
return;
- gel_matrixw_set_velement (mat, i, gel_copynode (r));
+ if (r->type == GEL_VALUE_NODE &&
+ mpw_exact_zero_p (r->val.value))
+ gel_matrixw_set_velement (mat, i, NULL);
+ else
+ gel_matrixw_set_velement (mat, i, gel_copynode (r));
} else if (index->type == GEL_MATRIX_NODE) {
int *reg;
int len;
- if ( ! iter_get_index_region (index, INT_MAX,
- ®, &len))
+ if G_UNLIKELY( ! iter_get_index_region (index, INT_MAX,
+ ®, &len))
return;
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL) {
+ if G_UNLIKELY (mat == NULL) {
g_free (reg);
return;
}
@@ -5638,7 +5646,7 @@ iter_equalsop(GelETree *n)
int i;
if (l->op.oper == GEL_E_GET_COL_REGION) {
- if ( ! iter_get_index_region (index, INT_MAX, ®x, &lx))
+ if G_UNLIKELY ( ! iter_get_index_region (index, INT_MAX, ®x, &lx))
return;
if G_UNLIKELY (r->type == GEL_MATRIX_NODE &&
gel_matrixw_width (r->mat.matrix) != lx) {
@@ -5647,7 +5655,7 @@ iter_equalsop(GelETree *n)
return;
}
} else {
- if ( ! iter_get_index_region (index, INT_MAX, ®y, &ly))
+ if G_UNLIKELY ( ! iter_get_index_region (index, INT_MAX, ®y, &ly))
return;
if G_UNLIKELY (r->type == GEL_MATRIX_NODE &&
gel_matrixw_height (r->mat.matrix) != ly) {
@@ -5658,7 +5666,7 @@ iter_equalsop(GelETree *n)
}
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL) {
+ if G_UNLIKELY (mat == NULL) {
g_free (regx);
g_free (regy);
return;
@@ -5819,14 +5827,14 @@ iter_incrementop (GelETree *n)
int x, y;
x = iter_get_matrix_index_num (index2, INT_MAX);
- if (x < 0)
+ if G_UNLIKELY (x < 0)
return;
y = iter_get_matrix_index_num (index1, INT_MAX);
- if (y < 0)
+ if G_UNLIKELY (y < 0)
return;
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL)
+ if G_UNLIKELY (mat == NULL)
return;
gel_matrixw_incr_element (mat, x, y, by);
@@ -5844,7 +5852,7 @@ iter_incrementop (GelETree *n)
return;
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL) {
+ if G_UNLIKELY (mat == NULL) {
g_free (regx);
g_free (regy);
return;
@@ -5866,11 +5874,11 @@ iter_incrementop (GelETree *n)
int i;
i = iter_get_matrix_index_num (index, INT_MAX);
- if (i < 0)
+ if G_UNLIKELY (i < 0)
return;
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL)
+ if G_UNLIKELY (mat == NULL)
return;
gel_matrixw_incr_velement (mat, i, by);
@@ -5878,12 +5886,12 @@ iter_incrementop (GelETree *n)
int *reg;
int len;
- if ( ! iter_get_index_region (index, INT_MAX,
+ if G_UNLIKELY ( ! iter_get_index_region (index, INT_MAX,
®, &len))
return;
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL) {
+ if G_UNLIKELY (mat == NULL) {
g_free (reg);
return;
}
@@ -5906,15 +5914,15 @@ iter_incrementop (GelETree *n)
int i;
if (l->op.oper == GEL_E_GET_COL_REGION) {
- if ( ! iter_get_index_region (index, INT_MAX, ®x, &lx))
+ if G_UNLIKELY ( ! iter_get_index_region (index, INT_MAX, ®x, &lx))
return;
} else {
- if ( ! iter_get_index_region (index, INT_MAX, ®y, &ly))
+ if G_UNLIKELY ( ! iter_get_index_region (index, INT_MAX, ®y, &ly))
return;
}
mat = iter_get_matrix_p (l->op.args, NULL);
- if (mat == NULL) {
+ if G_UNLIKELY (mat == NULL) {
g_free (regx);
g_free (regy);
return;
@@ -5954,9 +5962,9 @@ do_swapwithop (GelETree *l, GelETree *r)
if (l->type == GEL_IDENTIFIER_NODE ||
l->op.oper == GEL_E_DEREFERENCE) {
GelEFunc *lf = get_functoset (l);
- if (lf == NULL)
+ if G_UNLIKELY (lf == NULL)
return;
- if (lf->type != GEL_VARIABLE_FUNC) {
+ if G_UNLIKELY (lf->type != GEL_VARIABLE_FUNC) {
gel_errorout (_("Can only swap user variables"));
return;
}
@@ -5965,7 +5973,7 @@ do_swapwithop (GelETree *l, GelETree *r)
GelEFunc *rf = get_functoset (r);
GelETree *tmp;
- if (rf->type != GEL_VARIABLE_FUNC) {
+ if G_UNLIKELY (rf->type != GEL_VARIABLE_FUNC) {
gel_errorout (_("Can only swap user variables"));
return;
}
@@ -5984,14 +5992,14 @@ do_swapwithop (GelETree *l, GelETree *r)
GelETree *t, *tmp;
x = iter_get_matrix_index_num (index2, INT_MAX);
- if (x < 0)
+ if G_UNLIKELY (x < 0)
return;
y = iter_get_matrix_index_num (index1, INT_MAX);
- if (y < 0)
+ if G_UNLIKELY (y < 0)
return;
mat = iter_get_matrix_p (r->op.args, NULL);
- if (mat == NULL)
+ if G_UNLIKELY (mat == NULL)
return;
gel_matrixw_set_at_least_size (mat, x+1, y+1);
@@ -6018,11 +6026,11 @@ do_swapwithop (GelETree *l, GelETree *r)
GelETree *t, *tmp;
i = iter_get_matrix_index_num (index, INT_MAX);
- if (i < 0)
+ if G_UNLIKELY (i < 0)
return;
mat = iter_get_matrix_p (r->op.args, NULL);
- if (mat == NULL)
+ if G_UNLIKELY (mat == NULL)
return;
@@ -6052,11 +6060,11 @@ do_swapwithop (GelETree *l, GelETree *r)
}
matl = iter_get_matrix_p (l->op.args, NULL);
- if (matl == NULL)
+ if G_UNLIKELY (matl == NULL)
return;
matr = iter_get_matrix_p (r->op.args, NULL);
- if (matr == NULL)
+ if G_UNLIKELY (matr == NULL)
return;
if (l->op.oper == GEL_E_GET_ELEMENT) {
@@ -6066,10 +6074,10 @@ do_swapwithop (GelETree *l, GelETree *r)
if (index1->type == GEL_VALUE_NODE &&
index2->type == GEL_VALUE_NODE) {
lx = iter_get_matrix_index_num (index2, INT_MAX);
- if (lx < 0)
+ if G_UNLIKELY (lx < 0)
return;
ly = iter_get_matrix_index_num (index1, INT_MAX);
- if (ly < 0)
+ if G_UNLIKELY (ly < 0)
return;
} else {
gel_errorout (_("Cannot swap matrix regions"));
@@ -6083,7 +6091,7 @@ do_swapwithop (GelETree *l, GelETree *r)
int i;
i = iter_get_matrix_index_num (index, INT_MAX);
- if (i < 0)
+ if G_UNLIKELY (i < 0)
return;
GEL_MATRIXW_VINDEX_TO_INDEX (matl, i, lx, ly);
@@ -6100,10 +6108,10 @@ do_swapwithop (GelETree *l, GelETree *r)
if (index1->type == GEL_VALUE_NODE &&
index2->type == GEL_VALUE_NODE) {
rx = iter_get_matrix_index_num (index2, INT_MAX);
- if (rx < 0)
+ if G_UNLIKELY (rx < 0)
return;
ry = iter_get_matrix_index_num (index1, INT_MAX);
- if (ry < 0)
+ if G_UNLIKELY (ry < 0)
return;
} else {
gel_errorout (_("Cannot swap matrix regions"));
@@ -6117,7 +6125,7 @@ do_swapwithop (GelETree *l, GelETree *r)
int i;
i = iter_get_matrix_index_num (index, INT_MAX);
- if (i < 0)
+ if G_UNLIKELY (i < 0)
return;
GEL_MATRIXW_VINDEX_TO_INDEX (matl, i, rx, ry);
@@ -6295,7 +6303,7 @@ iter_get_velement (GelETree *n)
if (index->type == GEL_VALUE_NODE) {
GelETree *t;
int i = iter_get_matrix_index_num (index, gel_matrixw_elements (m->mat.matrix));
- if (i < 0)
+ if G_UNLIKELY (i < 0)
return;
t = gel_copynode (gel_matrixw_vindex (m->mat.matrix, i));
replacenode (n, t);
@@ -6307,7 +6315,7 @@ iter_get_velement (GelETree *n)
int reglen;
reg = iter_get_matrix_index_vector (index, matsize, ®len);
- if (reg == NULL)
+ if G_UNLIKELY (reg == NULL)
return;
vec = gel_matrixw_get_vregion (m->mat.matrix, reg, reglen);
@@ -6359,10 +6367,10 @@ iter_get_element (GelETree *n)
GelETree *t;
x = iter_get_matrix_index_num (index2, gel_matrixw_width (m->mat.matrix));
- if (x < 0)
+ if G_UNLIKELY (x < 0)
return;
y = iter_get_matrix_index_num (index1, gel_matrixw_height (m->mat.matrix));
- if (y < 0)
+ if G_UNLIKELY (y < 0)
return;
/* make sure we don't free the args just yet */
@@ -6439,14 +6447,14 @@ iter_get_region (GelETree *n, gboolean col)
maxy = gel_matrixw_height (m->mat.matrix);
if (col) {
- if ( ! iter_get_index_region (index, maxx, ®x, &lx))
+ if G_UNLIKELY ( ! iter_get_index_region (index, maxx, ®x, &lx))
return;
regy = g_new (int, maxy);
for (i = 0; i < maxy; i++)
regy[i] = i;
ly = maxy;
} else {
- if ( ! iter_get_index_region (index, maxy, ®y, &ly))
+ if G_UNLIKELY ( ! iter_get_index_region (index, maxy, ®y, &ly))
return;
regx = g_new (int, maxx);
for (i = 0; i < maxx; i++)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]