Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Plain Text by 123412341234 ( 12 years ago )
typedef pair<KeyVector, StatVector> AggregatedRecord;

struct RecordTraits {
 static bool less(const AggregatedRecord& record1, const AggregatedRecord& record2)
 {
  return record1.first < record2.first;
 }
 static void merge(AggregatedRecord& dest, const AggregatedRecord& source)
 {
  for (size_t i = 0, imax = dest.second.size(); i < imax; ++i)
   dest.second[i].addBlock(source.second[i]);
 }
};

template<typename Input1, typename Input2, typename Output>
void mergeRecordSets(Input1& input1, Input2& input2, Output& output)
{
 AggregatedRecord mergeRecord;
 while (!input1.atEnd()) {
  if (input2.atEnd()) {
   do {
    output.write(input1.record());
    input1.moveNext();
   } while(!input1.atEnd());
   return;
  }
  if (RecordTraits::less(input2.record(), input1.record())) {
   output.write(input2.record());
   input2.moveNext();
  } else {
   if (RecordTraits::less(input1.record(), input2.record())) {
    output.write(input1.record());
   } else {
    mergeRecord = input2.record();
    RecordTraits::merge(mergeRecord, input1.record());
    output.write(mergeRecord);
    input2.moveNext();
   }
   input1.moveNext();
  }
 }
 while (!input2.atEnd()) {
  output.write(input2.record());
  input2.moveNext();
 }
}

 

Revise this Paste

Children: 72242
Your Name: Code Language: