コード例 #1
0
ファイル: EventTypeSeq.cpp プロジェクト: binary42/OCI
void
TAO_Notify_EventTypeSeq::intersection (const TAO_Notify_EventTypeSeq& rhs, const TAO_Notify_EventTypeSeq& lhs)
{
    // linear search.
    TAO_Notify_EventTypeSeq::CONST_ITERATOR rhs_iter (rhs);
    TAO_Notify_EventType* rhs_event_type;

    TAO_Notify_EventTypeSeq::CONST_ITERATOR lhs_iter (lhs);
    TAO_Notify_EventType* lhs_event_type;

    for (rhs_iter.first (); rhs_iter.next (rhs_event_type); rhs_iter.advance ())
    {
        for (lhs_iter.first (); lhs_iter.next (lhs_event_type); lhs_iter.advance ())
        {
            if (*rhs_event_type == *lhs_event_type) // if both are same add to this object.
                this->insert (*rhs_event_type);
        }
    }
}
コード例 #2
0
ファイル: ts.ts.opp.hpp プロジェクト: Ecthilisyk/tslib_wip
  const std::vector<bool> apply_boolean_opp(const TSeries<TDATE,TDATA1,TSDIM,TSDATABACKEND,DatePolicy>& lhs,
					    const TSeries<TDATE,TDATA2,TSDIM,TSDATABACKEND,DatePolicy>& rhs,
					    opptype opp) {

    typedef typename Promotion<TDATA1,TDATA2>::ResultT ResultT;
    std::vector<bool> ans;

    if(lhs.ncol() != rhs.ncol())
      return ans;

    // find date intersection
    RangeSpecifier<TDATE,TSDIM> range(lhs.getDates(), rhs.getDates(), lhs.nrow(), rhs.nrow() );

    if(!range.getSize())
      return ans;

    // allocate new answer
    ans.reserve(range.getSize()*lhs.ncol());

    std::vector<bool>::iterator ans_data = ans.begin();
    TDATA1* lhs_data = lhs.getData();
    TDATA2* rhs_data = rhs.getData();

    for(TSDIM col = 0; col < lhs.ncol(); col++) {

      RangeIterator<const TDATA1*, const TSDIM*> lhs_iter(lhs_data, range.getArg1());
      RangeIterator<const TDATA2*, const TSDIM*> rhs_iter(rhs_data, range.getArg2());

      for(TSDIM i = 0; i < range.getSize(); i++) {
      	ans_data[i] = opp( static_cast<ResultT>(*lhs_iter++), static_cast<ResultT>(*rhs_iter++));
      }

      // increment column
      ans_data += range.getSize();
      lhs_data += lhs.nrow();
      rhs_data += rhs.nrow();
    }

    return ans;
  }
コード例 #3
0
ファイル: ts.ts.opp.hpp プロジェクト: Ecthilisyk/tslib_wip
  const TSeries<TDATE, typename Promotion<TDATA1,TDATA2>::ResultT,TSDIM,TSDATABACKEND,DatePolicy> apply_opp(const TSeries<TDATE,TDATA1,TSDIM,TSDATABACKEND,DatePolicy>& lhs,
													    const TSeries<TDATE,TDATA2,TSDIM,TSDATABACKEND,DatePolicy>& rhs,
													    opptype opp) {

    typedef typename Promotion<TDATA1,TDATA2>::ResultT ResultT;

    if(lhs.ncol() != rhs.ncol())
      return TSeries<TDATE,ResultT,TSDIM,TSDATABACKEND,DatePolicy>();

    // find date intersection
    RangeSpecifier<TDATE,TSDIM> range(lhs.getDates(), rhs.getDates(), lhs.nrow(), rhs.nrow() );

    if(!range.getSize())
      return TSeries<TDATE,ResultT,TSDIM,TSDATABACKEND,DatePolicy>();

    // allocate new answer
    TSeries<TDATE,ResultT,TSDIM,TSDATABACKEND,DatePolicy> ans(range.getSize(),lhs.ncol());

    // copy over dates
    std::copy(range.getDates(),range.getDates()+range.getSize(),ans.getDates());

    // set new colnames
    std::vector<std::string> lhs_cnames = lhs.getColnames();
    std::vector<std::string> rhs_cnames = rhs.getColnames();
    std::vector<std::string> ans_cnames;

    if(lhs_cnames==rhs_cnames) {
      ans_cnames = lhs_cnames;
    } else {
      // loop through and combine colnames from lhs and rhs
      if(lhs_cnames.size() && rhs_cnames.size()) {
        for(size_t i = 0; i < lhs_cnames.size(); i++) {
          ans_cnames.push_back( lhs_cnames[i] + rhs_cnames[i] );
        }
      } else {
        ans_cnames = lhs_cnames.size() ? lhs_cnames : rhs_cnames;
      }
    }

    ans.setColnames(ans_cnames);

    ResultT* ans_data = ans.getData();
    TDATA1* lhs_data = lhs.getData();
    TDATA2* rhs_data = rhs.getData();

    for(TSDIM col = 0; col < lhs.ncol(); col++) {

      RangeIterator<const TDATA1*, const TSDIM*> lhs_iter(lhs_data, range.getArg1());
      RangeIterator<const TDATA2*, const TSDIM*> rhs_iter(rhs_data, range.getArg2());
      for(TSDIM i = 0; i < range.getSize(); i++) {
      	ans_data[i] = opp( static_cast<ResultT>(*lhs_iter++), static_cast<ResultT>(*rhs_iter++));
      }

      // increment column
      ans_data+= ans.nrow();
      lhs_data+= lhs.nrow();
      rhs_data+= rhs.nrow();
    }

    return ans;
  }
コード例 #4
0
  inline
  const TSeries<TDATE,ReturnType,TSDIM,TSDATABACKEND,DatePolicy> window_function(const TSeries<TDATE,TDATA,TSDIM,TSDATABACKEND,DatePolicy>& lhs,
                                                                                 const TSeries<TDATE,TDATA,TSDIM,TSDATABACKEND,DatePolicy>& rhs,
                                                                                 const size_t window) {
    TSDIM lhs_ncol = lhs.ncol();
    TSDIM rhs_ncol = rhs.ncol();

    if(lhs_ncol != rhs_ncol && lhs_ncol != 1 && rhs_ncol != 1)
      return TSeries<TDATE,ReturnType,TSDIM,TSDATABACKEND,DatePolicy>();

    // find date intersection
    RangeSpecifier<TDATE,TSDIM> range(lhs.getDates(), rhs.getDates(), lhs.nrow(), rhs.nrow() );

    if(!range.getSize())
      return TSeries<TDATE,ReturnType,TSDIM,TSDATABACKEND,DatePolicy>();

    TSDIM ans_ncol = (lhs_ncol > rhs_ncol) ? lhs_ncol : rhs_ncol;

    // allocate new answer
    TSDIM ans_nrow = range.getSize() - (window - 1);
    if(ans_nrow <= 0)
      return TSeries<TDATE,ReturnType,TSDIM,TSDATABACKEND,DatePolicy>();

    TSeries<TDATE,ReturnType,TSDIM,TSDATABACKEND,DatePolicy> ans(ans_nrow, ans_ncol);

    // copy over dates
    std::copy(range.getDates() + (window - 1), range.getDates()+range.getSize(), ans.getDates());

    // set new colnames
    std::vector<std::string> lhs_cnames = lhs.getColnames();
    std::vector<std::string> rhs_cnames = rhs.getColnames();
    std::vector<std::string> ans_cnames;


    // FIXME: this will take some work to get correct
    if(lhs_cnames==rhs_cnames) {
      ans_cnames = lhs_cnames;
    } else {
      ans_cnames = lhs_cnames.size() ? lhs_cnames : rhs_cnames;
    }

    ans.setColnames(ans_cnames);

    ReturnType* ans_data = ans.getData();
    TDATA* lhs_data = lhs.getData();
    TDATA* rhs_data = rhs.getData();

    for(TSDIM col = 0; col < lhs.ncol(); col++) {

      RangeIterator<const TDATA*, const TSDIM*> lhs_iter(lhs_data, range.getArg1());
      RangeIterator<const TDATA*, const TSDIM*> rhs_iter(rhs_data, range.getArg2());

      windowIntersectionApply<ReturnType,F>::apply(ans_data, lhs_iter, rhs_iter, range.getSize(), window);

      // increment column
      ans_data+= ans.nrow();
      lhs_data+= lhs.nrow();
      rhs_data+= rhs.nrow();
    }
    return ans;
  }