void Marshaller::marshal(Object* obj) { if(obj == Qnil) { stream << "n" << endl; } else if(obj == Qtrue) { stream << "t" << endl; } else if(obj == Qfalse) { stream << "f" << endl; } else if(obj->fixnum_p()) { set_int(obj); } else if(obj->symbol_p()) { set_symbol((Symbol*)obj); } else if(kind_of<Bignum>(obj)) { set_bignum(as<Bignum>(obj)); } else if(kind_of<String>(obj)) { set_string(as<String>(obj)); } else if(kind_of<SendSite>(obj)) { set_sendsite(as<SendSite>(obj)); } else if(kind_of<Array>(obj)) { set_array(as<Array>(obj)); } else if(kind_of<Tuple>(obj)) { set_tuple(as<Tuple>(obj)); } else if(kind_of<Float>(obj)) { set_float(as<Float>(obj)); } else if(kind_of<InstructionSequence>(obj)) { set_iseq(as<InstructionSequence>(obj)); } else if(kind_of<CompiledMethod>(obj)) { set_cmethod(as<CompiledMethod>(obj)); } else { Exception::type_error(state, "unknown object"); } }
std::tuple<aku_Status, size_t> SeriesOrderAggregateMaterializer::read(u8 *dest, size_t dest_size) { aku_Status status = AKU_ENO_DATA; size_t ressz = 0; // current size size_t accsz = 0; // accumulated size size_t sample_size = get_tuple_size(tuple_); size_t size = dest_size / sample_size; std::vector<aku_Timestamp> destts_vec(size, 0); std::vector<AggregationResult> destval_vec(size, INIT_AGGRES); std::vector<aku_ParamId> outids(size, 0); aku_Timestamp* destts = destts_vec.data(); AggregationResult* destval = destval_vec.data(); while(pos_ < iters_.size()) { aku_ParamId curr = ids_[pos_]; std::tie(status, ressz) = iters_[pos_]->read(destts, destval, size); for (size_t i = accsz; i < accsz+ressz; i++) { outids[i] = curr; } destts += ressz; destval += ressz; size -= ressz; accsz += ressz; if (size == 0) { break; } pos_++; if (status == AKU_ENO_DATA) { // this iterator is done, continue with next continue; } if (status != AKU_SUCCESS) { // Stop iteration on error! break; } } // Convert vectors to series of samples for (size_t i = 0; i < accsz; i++) { double* tup; aku_Sample* sample; std::tie(sample, tup) = cast(dest); dest += sample_size; sample->payload.type = AKU_PAYLOAD_TUPLE|aku_PData::REGULLAR; sample->payload.size = static_cast<u16>(sample_size); sample->paramid = outids[i]; sample->timestamp = destts_vec[i]; sample->payload.float64 = get_flags(tuple_); set_tuple(tup, tuple_, destval_vec[i]); } return std::make_tuple(status, accsz*sample_size); }