/[pspp]/pspp/src/vars-atr.c
ViewVC logotype

Diff of /pspp/src/vars-atr.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.25 by blp, Sun Jul 31 21:42:46 2005 UTC revision 1.26 by blp, Sun Aug 7 04:39:28 2005 UTC
# Line 141  discard_variables (void) Line 141  discard_variables (void)
141    
142    pgm_state = STATE_INIT;    pgm_state = STATE_INIT;
143  }  }
   
 /* Return nonzero only if X is a user-missing value for numeric  
    variable V. */  
 inline int  
 is_num_user_missing (double x, const struct variable *v)  
 {  
   switch (v->miss_type)  
     {  
     case MISSING_NONE:  
       return 0;  
     case MISSING_1:  
       return x == v->missing[0].f;  
     case MISSING_2:  
       return x == v->missing[0].f || x == v->missing[1].f;  
     case MISSING_3:  
       return (x == v->missing[0].f || x == v->missing[1].f  
               || x == v->missing[2].f);  
     case MISSING_RANGE:  
       return x >= v->missing[0].f && x <= v->missing[1].f;  
     case MISSING_LOW:  
       return x <= v->missing[0].f;  
     case MISSING_HIGH:  
       return x >= v->missing[0].f;  
     case MISSING_RANGE_1:  
       return ((x >= v->missing[0].f && x <= v->missing[1].f)  
               || x == v->missing[2].f);  
     case MISSING_LOW_1:  
       return x <= v->missing[0].f || x == v->missing[1].f;  
     case MISSING_HIGH_1:  
       return x >= v->missing[0].f || x == v->missing[1].f;  
     default:  
       assert (0);  
     }  
   abort ();  
 }  
   
 /* Return nonzero only if string S is a user-missing variable for  
    string variable V. */  
 inline int  
 is_str_user_missing (const unsigned char s[], const struct variable *v)  
 {  
   /* FIXME: should these be memcmp()? */  
   switch (v->miss_type)  
     {  
     case MISSING_NONE:  
       return 0;  
     case MISSING_1:  
       return !strncmp (s, v->missing[0].s, v->width);  
     case MISSING_2:  
       return (!strncmp (s, v->missing[0].s, v->width)  
               || !strncmp (s, v->missing[1].s, v->width));  
     case MISSING_3:  
       return (!strncmp (s, v->missing[0].s, v->width)  
               || !strncmp (s, v->missing[1].s, v->width)  
               || !strncmp (s, v->missing[2].s, v->width));  
     default:  
       assert (0);  
     }  
   abort ();  
 }  
   
 /* Return nonzero only if value VAL is system-missing for variable  
    V. */  
 int  
 is_system_missing (const union value *val, const struct variable *v)  
 {  
   return v->type == NUMERIC && val->f == SYSMIS;  
 }  
   
 /* Return nonzero only if value VAL is system- or user-missing for  
    variable V. */  
 int  
 is_missing (const union value *val, const struct variable *v)  
 {  
   switch (v->type)  
     {  
     case NUMERIC:  
       if (val->f == SYSMIS)  
         return 1;  
       return is_num_user_missing (val->f, v);  
     case ALPHA:  
       return is_str_user_missing (val->s, v);  
     default:  
       assert (0);  
     }  
   abort ();  
 }  
   
 /* Return nonzero only if value VAL is user-missing for variable V. */  
 int  
 is_user_missing (const union value *val, const struct variable *v)  
 {  
   switch (v->type)  
     {  
     case NUMERIC:  
       return is_num_user_missing (val->f, v);  
     case ALPHA:  
       return is_str_user_missing (val->s, v);  
     default:  
       assert (0);  
     }  
   abort ();  
 }  
144    
145  /* Returns true if NAME is an acceptable name for a variable,  /* Returns true if NAME is an acceptable name for a variable,
146     false otherwise.  If ISSUE_ERROR is true, issues an     false otherwise.  If ISSUE_ERROR is true, issues an

Legend:
Removed from v.1.25  
changed lines
  Added in v.1.26

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26