set *set_intersect(set *s1, set *s2) { set_iter itr; char *str; set *s = set_init((set_size(s1) + set_size(s2)) / 2); for(set_iter_init(s1, &itr); (str = set_iterate(s1, &itr)) != NULL; ) { if(set_ismember(s2, str)) set_add(s, str); } for(set_iter_init(s2, &itr); (str = set_iterate(s2, &itr)) != NULL; ) { if(set_ismember(s1, str)) set_add(s, str); } return s; }
set *set_xor(set *s1, set *s2) { set_iter itr; set *new_set = set_init(set_size(s1) + set_size(s2) / 2); char *elm; for(set_iter_init(s1, &itr); (elm = set_iterate(s1, &itr)) != NULL; ) { if(!set_ismember(s2, elm)) set_add(new_set, elm); } for(set_iter_init(s2, &itr); (elm = set_iterate(s2, &itr)) != NULL; ) { if(!set_ismember(s1, elm)) set_add(new_set, elm); } return new_set; }
/* * db_col_ismember() - This function can be used to determine if a particular * value is found within a collection. * return : * 0 = the value was not found within the collection * >0 = the value was found within the collection * <0 = an error was detected. * col(in): collection * value(in): value to search for */ int db_col_ismember (DB_COLLECTION * col, DB_VALUE * value) { int member; CHECK_CONNECT_MINUSONE (); CHECK_1ARG_MINUSONE (col); member = set_ismember (col, value) ? 1 : 0; return member; }
int set_subset(set *s1, set *s2) { set_iter itr; char *elm; for(set_iter_init(s2, &itr); (elm = set_iterate(s2, &itr)) != NULL; ) { if(!set_ismember(s1, elm)) return 0; } return 1; }
/* * db_set_ismember() - This function checks to see if a value is found in a set * return : non-zero if the value is in the set * set(in): set descriptor * value(in): value to test */ int db_set_ismember (DB_SET * set, DB_VALUE * value) { int retval; CHECK_CONNECT_FALSE (); CHECK_1ARG_FALSE (set); /* allow all types */ retval = (set_ismember (set, value)) ? 1 : 0; return (retval); }