X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fcase.c;h=bb6f7c0a8e05c735f9b17cd0aab309993e4d7a21;hb=81579d9e9f994fb2908f50af41c3eb033d216e58;hp=dc4029268ebf981bc10d96ecccf7c88eb53dd71a;hpb=bd17d2af982332ee1791998361b1ac6731fe14fa;p=pspp-builds.git diff --git a/src/data/case.c b/src/data/case.c index dc402926..bb6f7c0a 100644 --- a/src/data/case.c +++ b/src/data/case.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc. + Copyright (C) 2004, 2007, 2009, 2010, 2011 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 @@ -16,19 +16,27 @@ #include -#include +#include "data/case.h" #include #include #include -#include -#include -#include -#include +#include "data/value.h" +#include "data/variable.h" +#include "libpspp/assertion.h" +#include "libpspp/str.h" -#include "minmax.h" -#include "xalloc.h" +#include "gl/minmax.h" +#include "gl/xalloc.h" + +/* Set this flag to 1 to copy cases instead of ref counting them. + This is sometimes helpful in debugging situations. */ +#define DEBUG_CASEREFS 0 + +#if DEBUG_CASEREFS +#warning "Caseref debug enabled. CASES ARE NOT BEING SHARED!!" +#endif static size_t case_size (const struct caseproto *); static bool variable_matches_case (const struct ccase *, @@ -80,6 +88,19 @@ case_clone (const struct ccase *c) return case_unshare (case_ref (c)); } +/* Increments case C's reference count and returns C. Afterward, + case C is shared among its reference count holders. */ +struct ccase * +case_ref (const struct ccase *c_) +{ + struct ccase *c = CONST_CAST (struct ccase *, c_); + c->ref_cnt++; +#if DEBUG_CASEREFS + c = case_unshare__ (c); +#endif + return c; +} + /* Returns an estimate of the number of bytes of memory that would be consumed in creating a case based on PROTO. The estimate includes typical overhead from malloc() in addition