X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftable-select.c;h=5bbc8caa1eb948bec775c2d27ff652696356487f;hb=1d0b435ea6ca932d3e1c446db402ec41b9024ccd;hp=00d0ee99318434ff1d357577105e0199541fadc9;hpb=14877636310b84dc7d501c95e6e4feeb3186d6a9;p=pspp diff --git a/src/output/table-select.c b/src/output/table-select.c index 00d0ee9931..5bbc8caa1e 100644 --- a/src/output/table-select.c +++ b/src/output/table-select.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2009, 2010, 2011, 2014 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -94,24 +94,30 @@ table_select_slice (struct table *subtable, enum table_axis axis, { struct table *table; int rect[TABLE_N_AXES][2]; + bool h0, h1; - if (add_headers) + h0 = add_headers && subtable->h[axis][0] > 0; + if (h0 && z0 == subtable->h[axis][0]) { - if (z0 == subtable->h[axis][0] - && z1 == subtable->n[axis] - subtable->h[axis][1]) - return subtable; - - if (subtable->h[axis][0]) - table_ref (subtable); - if (subtable->h[axis][1]) - table_ref (subtable); + z0 = 0; + h0 = false; } - else + + h1 = add_headers && subtable->h[axis][1] > 0; + if (h1 && z1 == subtable->n[axis] - subtable->h[axis][1]) { - if (z0 == 0 && z1 == subtable->n[axis]) - return subtable; + z1 = subtable->n[axis]; + h1 = false; } + if (z0 == 0 && z1 == subtable->n[axis]) + return subtable; + + if (h0) + table_ref (subtable); + if (h1) + table_ref (subtable); + rect[TABLE_HORZ][0] = 0; rect[TABLE_VERT][0] = 0; rect[TABLE_HORZ][1] = subtable->n[TABLE_HORZ]; @@ -120,22 +126,18 @@ table_select_slice (struct table *subtable, enum table_axis axis, rect[axis][1] = z1; table = table_select (subtable, rect); - if (add_headers) - { - if (subtable->h[axis][0]) - table = table_paste ( - table_select_slice (subtable, axis, 0, subtable->h[axis][0], - false), - table, axis); - - if (subtable->h[axis][1]) - table = table_paste ( - table, - table_select_slice (subtable, axis, - subtable->n[axis] - subtable->h[axis][1], - subtable->n[axis], false), - axis); - } + if (h0) + table = table_paste ( + table_select_slice (subtable, axis, 0, subtable->h[axis][0], false), + table, axis); + + if (h1) + table = table_paste ( + table, + table_select_slice (subtable, axis, + subtable->n[axis] - subtable->h[axis][1], + subtable->n[axis], false), + axis); return table; }