pspp-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [warnings 5/7] Fix some constness problems that led to warnings.


From: Ben Pfaff
Subject: Re: [warnings 5/7] Fix some constness problems that led to warnings.
Date: Sat, 18 Sep 2010 06:48:46 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)

OK, I've dropped this one for now.

John Darrington <address@hidden> writes:

> Do you mind if we leave this one for now?  These warnings are a 
> reminder to me that there are some ownership semantics which need
> to be formalised between covariance/categoricals and the the
> procedures which use then.  I'm intending to do this at the same
> time as implementing interactions.
>
> Right now, the oneway command is leaking memory.  These warnings
> remind me to fix it.
>
> On Fri, Sep 17, 2010 at 09:36:30PM -0700, Ben Pfaff wrote:
>      ---
>       src/language/stats/oneway.c     |    5 +++--
>       src/language/stats/regression.q |    4 ++--
>       src/math/categoricals.c         |   26 ++++++++++++++------------
>       src/math/categoricals.h         |    4 ++--
>       src/math/covariance.c           |   30 +++++++++++++-----------------
>       src/math/covariance.h           |    6 +++---
>       6 files changed, 37 insertions(+), 38 deletions(-)
>      
>      diff --git a/src/language/stats/oneway.c b/src/language/stats/oneway.c
>      index aa8a255..9a69500 100644
>      --- a/src/language/stats/oneway.c
>      +++ b/src/language/stats/oneway.c
>      @@ -418,7 +418,8 @@ run_oneway (const struct oneway_spec *cmd,
>                                                              cmd->wv, 
> cmd->exclude, 
>                                                              makeit,
>                                                              updateit,
>      -                                                       cmd->vars[v], 
> ws.dd_total[v]);
>      +                                                       CONST_CAST 
> (struct variable *, cmd->vars[v]),
>      +                                                       ws.dd_total[v]);
>       
>             ws.vws[v].cov = covariance_2pass_create (1, &cmd->vars[v],
>                                                      cats, 
>      @@ -580,7 +581,7 @@ run_oneway (const struct oneway_spec *cmd,
>         
>         for (v = 0; v < cmd->n_vars; ++v)
>           {
>      -      struct categoricals *cats = covariance_get_categoricals 
> (ws.vws[v].cov);
>      +      const struct categoricals *cats = covariance_get_categoricals 
> (ws.vws[v].cov);
>       
>             categoricals_done (cats);
>             
>      diff --git a/src/language/stats/regression.q 
> b/src/language/stats/regression.q
>      index 8f9979a..668804d 100644
>      --- a/src/language/stats/regression.q
>      +++ b/src/language/stats/regression.q
>      @@ -1,5 +1,5 @@
>       /* PSPP - a program for statistical analysis.
>      -   Copyright (C) 2005, 2009 Free Software Foundation, Inc.
>      +   Copyright (C) 2005, 2009, 2010 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
>      @@ -810,10 +810,10 @@ fill_covariance (gsl_matrix *cov, struct 
> covariance *all_cov,
>         size_t dep_subscript;
>         size_t *rows;
>         const gsl_matrix *ssizes;
>      -  const gsl_matrix *cm;
>         const gsl_matrix *mean_matrix;
>         const gsl_matrix *ssize_matrix;
>         double result = 0.0;
>      +  gsl_matrix *cm;
>         
>         cm = covariance_calculate_unnormalized (all_cov);
>         rows = xnmalloc (cov->size1 - 1, sizeof (*rows));
>      diff --git a/src/math/categoricals.c b/src/math/categoricals.c
>      index c8b337e..29c1e0f 100644
>      --- a/src/math/categoricals.c
>      +++ b/src/math/categoricals.c
>      @@ -1,5 +1,5 @@
>       /* PSPP - a program for statistical analysis.
>      -   Copyright (C) 2009 Free Software Foundation, Inc.
>      +   Copyright (C) 2009, 2010 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,20 @@
>       
>       #include <config.h>
>       
>      -#include <stdio.h>
>      +#include "math/categoricals.h"
>       
>      -#include "categoricals.h"
>      +#include <stdio.h>
>       
>      -#include <gl/xalloc.h>
>      -#include <data/variable.h>
>      -#include <data/case.h>
>      -#include <data/value.h>
>      -#include <libpspp/hmap.h>
>      -#include <libpspp/pool.h>
>      -#include <libpspp/array.h>
>      +#include "data/case.h"
>      +#include "data/value.h"
>      +#include "data/variable.h"
>      +#include "libpspp/array.h"
>      +#include "libpspp/cast.h"
>      +#include "libpspp/hmap.h"
>      +#include "libpspp/pool.h"
>      +#include "libpspp/str.h"
>       
>      -#include <libpspp/str.h>
>      +#include "gl/xalloc.h"
>       
>       struct value_node
>       {
>      @@ -311,7 +312,7 @@ categoricals_total (const struct categoricals *cat)
>       /* This function must be called *before* any call to 
> categoricals_get_*_by subscript an
>        *after* all calls to categoricals_update */
>       void
>      -categoricals_done (struct categoricals *cat)
>      +categoricals_done (const struct categoricals *cat_)
>       {
>         /* Implementation Note: Whilst this function is O(n) in 
> cat->n_cats_total, in most
>            uses it will be more efficient that using a tree based structure, 
> since it
>      @@ -319,6 +320,7 @@ categoricals_done (struct categoricals *cat)
>       
>            1 call of O(n) + 10^9 calls of O(1) is better than 10^9 calls of 
> O(log n).
>         */
>      +  struct categoricals *cat = CONST_CAST (struct categoricals *, cat_);
>         int v;
>         int idx = 0;
>         cat->reverse_variable_map = pool_calloc (cat->pool,
>      diff --git a/src/math/categoricals.h b/src/math/categoricals.h
>      index 09ced7d..85fcc1a 100644
>      --- a/src/math/categoricals.h
>      +++ b/src/math/categoricals.h
>      @@ -1,5 +1,5 @@
>       /* PSPP - a program for statistical analysis.
>      -   Copyright (C) 2009 Free Software Foundation, Inc.
>      +   Copyright (C) 2009, 2010 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
>      @@ -61,7 +61,7 @@ size_t categoricals_total (const struct categoricals 
> *cat);
>       */
>       size_t categoricals_get_n_variables (const struct categoricals *cat);
>       
>      -void categoricals_done (struct categoricals *cat);
>      +void categoricals_done (const struct categoricals *);
>       
>       const struct variable * categoricals_get_variable_by_subscript (const 
> struct categoricals *cat, int subscript);
>       
>      diff --git a/src/math/covariance.c b/src/math/covariance.c
>      index aa7f417..cf486de 100644
>      --- a/src/math/covariance.c
>      +++ b/src/math/covariance.c
>      @@ -1,5 +1,5 @@
>       /* PSPP - a program for statistical analysis.
>      -   Copyright (C) 2009 Free Software Foundation, Inc.
>      +   Copyright (C) 2009, 2010 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
>      @@ -529,7 +529,7 @@ cm_to_gsl (struct covariance *cov)
>       }
>       
>       
>      -static const gsl_matrix *
>      +static gsl_matrix *
>       covariance_calculate_double_pass (struct covariance *cov)
>       {
>         size_t i, j;
>      @@ -553,7 +553,7 @@ covariance_calculate_double_pass (struct covariance 
> *cov)
>         return  cm_to_gsl (cov);
>       }
>       
>      -static const gsl_matrix *
>      +static gsl_matrix *
>       covariance_calculate_single_pass (struct covariance *cov)
>       {
>         size_t i, j;
>      @@ -598,12 +598,10 @@ covariance_calculate_single_pass (struct 
> covariance *cov)
>       }
>       
>       
>      -/* 
>      -   Return a pointer to gsl_matrix containing the pairwise covariances.
>      -   The matrix remains owned by the COV object, and must not be freed.
>      -   Call this function only after all data have been accumulated.
>      -*/
>      -const gsl_matrix *
>      +/* Return a pointer to a newly allocated gsl_matrix containing the 
> pairwise
>      +   covariances.  The caller takes ownership of the returned matrix.  
> Call this
>      +   function only after all data have been accumulated. */
>      +gsl_matrix *
>       covariance_calculate (struct covariance *cov)
>       {
>         if ( cov->state <= 0 )
>      @@ -625,7 +623,7 @@ covariance_calculate (struct covariance *cov)
>       /*
>         Covariance computed without dividing by the sample size.
>        */
>      -static const gsl_matrix *
>      +static gsl_matrix *
>       covariance_calculate_double_pass_unnormalized (struct covariance *cov)
>       {
>         size_t i, j;
>      @@ -647,7 +645,7 @@ covariance_calculate_double_pass_unnormalized 
> (struct covariance *cov)
>         return  cm_to_gsl (cov);
>       }
>       
>      -static const gsl_matrix *
>      +static gsl_matrix *
>       covariance_calculate_single_pass_unnormalized (struct covariance *cov)
>       {
>         size_t i, j;
>      @@ -679,12 +677,10 @@ covariance_calculate_single_pass_unnormalized 
> (struct covariance *cov)
>       }
>       
>       
>      -/* 
>      -   Return a pointer to gsl_matrix containing the pairwise covariances.
>      -   The matrix remains owned by the COV object, and must not be freed.
>      -   Call this function only after all data have been accumulated.
>      -*/
>      -const gsl_matrix *
>      +/* Return a pointer to a newly allocated gsl_matrix containing the 
> pairwise
>      +   covariances.  The caller takes ownership of the returned matrix.  
> Call this
>      +   function only after all data have been accumulated. */
>      +gsl_matrix *
>       covariance_calculate_unnormalized (struct covariance *cov)
>       {
>         if ( cov->state <= 0 )
>      diff --git a/src/math/covariance.h b/src/math/covariance.h
>      index cb83e15..3605ba8 100644
>      --- a/src/math/covariance.h
>      +++ b/src/math/covariance.h
>      @@ -1,5 +1,5 @@
>       /* PSPP - a program for statistical analysis.
>      -   Copyright (C) 2009 Free Software Foundation, Inc.
>      +   Copyright (C) 2009, 2010 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
>      @@ -40,8 +40,8 @@ void covariance_accumulate (struct covariance *, const 
> struct ccase *);
>       void covariance_accumulate_pass1 (struct covariance *, const struct 
> ccase *);
>       void covariance_accumulate_pass2 (struct covariance *, const struct 
> ccase *);
>       
>      -const gsl_matrix * covariance_calculate (struct covariance *cov);
>      -const gsl_matrix * covariance_calculate_unnormalized (struct covariance 
> *);
>      +gsl_matrix *covariance_calculate (struct covariance *cov);
>      +gsl_matrix * covariance_calculate_unnormalized (struct covariance *);
>       
>       void covariance_destroy (struct covariance *cov);
>       
>      -- 
>      1.7.1
>      
>      
>      _______________________________________________
>      pspp-dev mailing list
>      address@hidden
>      http://lists.gnu.org/mailman/listinfo/pspp-dev

-- 
Ben Pfaff 
http://benpfaff.org



reply via email to

[Prev in Thread] Current Thread [Next in Thread]