652f9ae270cb64d3f6bc8908e42c5c6f9c448fe8
[pspp-builds.git] / src / data / sys-file-private.c
1 /* PSPP - computes sample statistics.
2    Copyright (C) 2006 Free Software Foundation, Inc.
3
4    This program is free software; you can redistribute it and/or
5    modify it under the terms of the GNU General Public License as
6    published by the Free Software Foundation; either version 2 of the
7    License, or (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful, but
10    WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17    02110-1301, USA. */
18
19 #include <config.h>
20 #include "sys-file-private.h"
21
22 #include <data/value.h>
23 #include <libpspp/assertion.h>
24
25 /* Return the number of bytes used when writing case_data for a variable
26    of WIDTH */
27 int
28 sfm_width_to_bytes (int width)
29 {
30   assert (width >= 0);
31
32   if (width == 0)
33     return MAX_SHORT_STRING;
34   else if (width < MIN_VERY_LONG_STRING)
35     return ROUND_UP (width, MAX_SHORT_STRING);
36   else
37     {
38       int chunks = width / EFFECTIVE_LONG_STRING_LENGTH ;
39       int remainder = width % EFFECTIVE_LONG_STRING_LENGTH ;
40       int bytes = remainder + (chunks * MIN_VERY_LONG_STRING);
41       return ROUND_UP (bytes, MAX_SHORT_STRING);
42     }
43 }
44
45