void apply(Result & result) { //BOOST_GEOMETRY_ASSERT( first != last ); if ( m_exit_detected /*m_previous_operation == overlay::operation_union*/ ) { update_exit(result); m_exit_detected = false; } if ( m_enter_detected /*m_previous_operation == overlay::operation_intersection*/ ) { update_enter(result); m_enter_detected = false; } }
void month_update_exit(u_long tstamp) { HNODEPTR nptr; int i; for (i=0;i<MAXHASH;i++) { nptr=sm_htab[i]; while (nptr!=NULL) { if (nptr->flag!=OBJ_GRP) { if ((tstamp-nptr->tstamp)>=visit_timeout) update_exit(nptr->lasturl); } nptr=nptr->next; } } }
int put_hnode( char *str, /* Hostname */ int type, /* obj type */ u_long count, /* hit count */ u_long file, /* File flag */ double xfer, /* xfer size */ u_long *ctr, /* counter */ u_long visit, /* visits */ u_long tstamp,/* timestamp */ char *lasturl, /* lasturl */ HNODEPTR *htab) /* ptr>next */ { HNODEPTR cptr,nptr; /* check if hashed */ if ( (cptr = htab[hash(str)]) == NULL) { /* not hashed */ if ( (nptr=new_hnode(str)) != NULL) { nptr->flag = type; nptr->count = count; nptr->files = file; nptr->xfer = xfer; nptr->next = NULL; htab[hash(str)] = nptr; if (type!=OBJ_GRP) (*ctr)++; if (visit) { nptr->visit=(visit-1); nptr->lasturl=find_url(lasturl); nptr->tstamp=tstamp; return 0; } else { if (ispage(log_rec.url)) { if (htab==sm_htab) update_entry(log_rec.url); nptr->lasturl=find_url(log_rec.url); nptr->tstamp=tstamp; nptr->visit=1; } } } } else { /* hashed */ while (cptr != NULL) { if (strcmp(cptr->string,str)==0) { if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP))) { /* found... bump counter */ cptr->count+=count; cptr->files+=file; cptr->xfer +=xfer; if (ispage(log_rec.url)) { if ((tstamp-cptr->tstamp)>=visit_timeout) { cptr->visit++; if (htab==sm_htab) { update_exit(cptr->lasturl); update_entry(log_rec.url); } } cptr->lasturl=find_url(log_rec.url); cptr->tstamp=tstamp; } return 0; } } cptr = cptr->next; } /* not found... */ if ( (nptr = new_hnode(str)) != NULL) { nptr->flag = type; nptr->count = count; nptr->files = file; nptr->xfer = xfer; nptr->next = htab[hash(str)]; htab[hash(str)]=nptr; if (type!=OBJ_GRP) (*ctr)++; if (visit) { nptr->visit = (visit-1); nptr->lasturl=find_url(lasturl); nptr->tstamp= tstamp; return 0; } else { if (ispage(log_rec.url)) { if (htab==sm_htab) update_entry(log_rec.url); nptr->lasturl=find_url(log_rec.url); nptr->tstamp= tstamp; nptr->visit=1; } } } } if (nptr!=NULL) { /* set object type */ if (type==OBJ_GRP) nptr->flag=OBJ_GRP; /* is it a grouping? */ else { /* check if it's a hidden object */ if ((hide_sites)||(isinlist(hidden_sites,nptr->string)!=NULL)) nptr->flag=OBJ_HIDE; } } return nptr==NULL; }
void apply(Result & result, TurnIt it) { //BOOST_GEOMETRY_ASSERT( it != last ); overlay::operation_type const op = it->operations[op_id].operation; if ( op != overlay::operation_union && op != overlay::operation_intersection && op != overlay::operation_blocked && op != overlay::operation_continue ) { return; } segment_identifier const& seg_id = it->operations[op_id].seg_id; //segment_identifier const& other_id = it->operations[other_op_id].seg_id; const bool first_in_range = m_seg_watcher.update(seg_id); if ( m_previous_turn_ptr ) { if ( m_exit_detected /*m_previous_operation == overlay::operation_union*/ ) { // real exit point - may be multiple if ( first_in_range || ! turn_on_the_same_ip<op_id>(*m_previous_turn_ptr, *it) ) { update_exit(result); m_exit_detected = false; } // fake exit point, reset state else if ( op != overlay::operation_union ) { m_exit_detected = false; } } /*else*/ if ( m_enter_detected /*m_previous_operation == overlay::operation_intersection*/ ) { // real entry point if ( first_in_range || ! turn_on_the_same_ip<op_id>(*m_previous_turn_ptr, *it) ) { update_enter(result); m_enter_detected = false; } // fake entry point, reset state else if ( op != overlay::operation_intersection ) { m_enter_detected = false; } } } if ( op == overlay::operation_union ) { // already set in interrupt policy //update<boundary, boundary, '0', transpose_result>(m_result); // ignore u/u //if ( it->operations[other_op_id].operation != overlay::operation_union ) { m_exit_detected = true; } } else if ( op == overlay::operation_intersection ) { // ignore i/i if ( it->operations[other_op_id].operation != overlay::operation_intersection ) { // already set in interrupt policy //update<interior, interior, '2', transpose_result>(result); //update<boundary, boundary, '0', transpose_result>(result); m_enter_detected = true; } } else if ( op == overlay::operation_blocked ) { // already set in interrupt policy } else // if ( op == overlay::operation_continue ) { // already set in interrupt policy } // store ref to previously analysed (valid) turn m_previous_turn_ptr = geofeatures_boost::addressof(*it); // and previously analysed (valid) operation m_previous_operation = op; }