/* REFERENCE: Keogh et al., Derivative Dynamic Time Warping. ADAPTATION: derivative of the 1st and last point calculated from 2 adj. points (instead of 3) EXAMPLE: seq = [s0,s1,s2], der = [d0,d1,d2] d0 = s1-s0 d1 = ((s1-s0)+((s2-s0)/2))/2 d2 = s2-s1 */ void TExamplesDistance_DTW::getDerivatives(vector<float> &seq, vector<float> &der) const { vector<float>::const_iterator sbegin(seq.begin()), send(seq.end()), sip(sbegin), si(sbegin), sin(sbegin+1); der.clear(); if ( send - sbegin > 2 ) { // d0 = s1-s0 der.push_back( (*sin)-(*si) ); si++; sin++; // d1, ... for(; sin != send; sip++, si++, sin++) { der.push_back( ((*si)-(*sip)+((*sin)-(*sip))/2)/2 ); } sip++; si++; // d2 der.push_back( (*si)-(*sip) ); } else { // 2 time points if ( sin < send ) { int diff = (*sin)-(*si); der.push_back(diff); der.push_back(diff); } // single time point -> NaN else { der.push_back(numeric_limits<float>::signaling_NaN()); } } }
long irc::portparser::GetToken() { if (in_range > 0) { in_range++; if (in_range <= range_end) { if (!Overlaps(in_range)) { return in_range; } else { while (((Overlaps(in_range)) && (in_range <= range_end))) in_range++; if (in_range <= range_end) return in_range; } } else in_range = 0; } std::string x; sep.GetToken(x); if (x.empty()) return 0; while (Overlaps(atoi(x.c_str()))) { if (!sep.GetToken(x)) return 0; } std::string::size_type dash = x.rfind('-'); if (dash != std::string::npos) { std::string sbegin(x, 0, dash); range_begin = atoi(sbegin.c_str()); range_end = atoi(x.c_str()+dash+1); if ((range_begin > 0) && (range_end > 0) && (range_begin < 65536) && (range_end < 65536) && (range_begin < range_end)) { in_range = range_begin; return in_range; } else { /* Assume its just the one port */ return atoi(sbegin.c_str()); } } else { return atoi(x.c_str()); } }
main () { struct s_list *ptr = NULL; struct data d; d.i = 10; d.c = 'a'; sbegin (&ptr, &d); }