bool DebugInfo::SendAsyncLog(std::list<RandomEntry>::iterator first_a, std::list<RandomEntry>::iterator first_b, std::list<RandomEntry> &a, std::list<RandomEntry> &b, unsigned identical) { if (!SendString("AsyncLog")) { return(false); } // calculate size unsigned len = 4; unsigned cnt = 0; std::list<RandomEntry>::iterator it_a = first_a; std::list<RandomEntry>::iterator it_b = first_b; // if there were any identical lines, include only the last one if (identical) { len += 4 + 4 + 4 + it_a->src_name.length() + 1 + 4 + 4 + 4; ++cnt; ++it_a; ++it_b; } while ((it_a != a.end()) && (it_b != b.end())) { len += 4 + 4 + 4 + it_a->src_name.length() + 1 + 4 + 4 + 4; len += 4 + 4 + 4 + it_a->src_name.length() + 1 + 4 + 4 + 4; cnt += 2; ++it_a; ++it_b; } if (!SendUnsigned(len)) return(false); if (!SendUnsigned(identical)) return(false); if (!SendUnsigned(cnt)) return(false); it_a = first_a; it_b = first_b; // if there were any identical lines, include only the last one if (identical) { if (!SendUnsigned(it_a->counter)) return(false); if (!SendSigned(it_a->max)) return(false); if (!SendSigned(it_a->value)) return(false); if (!SendString(it_a->src_name)) return(false); if (!SendUnsigned(it_a->src_line)) return(false); if (!SendUnsigned(it_a->obj_id)) return(false); ++it_a; ++it_b; } while ((it_a != a.end()) && (it_b != b.end())) { if (!SendUnsigned(it_a->counter)) return(false); if (!SendSigned(it_a->max)) return(false); if (!SendSigned(it_a->value)) return(false); if (!SendString(it_a->src_name)) return(false); if (!SendUnsigned(it_a->src_line)) return(false); if (!SendUnsigned(it_a->obj_id)) return(false); if (!SendUnsigned(it_b->counter)) return(false); if (!SendSigned(it_b->max)) return(false); if (!SendSigned(it_b->value)) return(false); if (!SendString(it_b->src_name)) return(false); if (!SendUnsigned(it_b->src_line)) return(false); if (!SendUnsigned(it_b->obj_id)) return(false); ++it_a; ++it_b; } return(true); }
bool DebugInfo::SendAsyncLog(std::vector<RandomEntry>::const_iterator first_a, std::vector<RandomEntry>::const_iterator first_b, const std::vector<RandomEntry> &a, const std::vector<RandomEntry> &b, unsigned identical) { if (!SendString("AsyncLog")) { return(false); } // calculate size unsigned len = 4; unsigned cnt = 0; std::vector<RandomEntry>::const_iterator it_a = first_a; std::vector<RandomEntry>::const_iterator it_b = first_b; // if there were any identical lines, include only the last one if (identical) { // sizes of: counter, max, rngState // string = length Bytes + 1 NULL terminator + 4B length // srcLine, objId len += 4 + 4 + 4 + it_a->src_name.length() + 1 + 4 + 4 + 4; ++cnt; ++it_a; ++it_b; } while ((it_a != a.end()) && (it_b != b.end())) { len += 4 + 4 + 4 + it_a->src_name.length() + 1 + 4 + 4 + 4; len += 4 + 4 + 4 + it_b->src_name.length() + 1 + 4 + 4 + 4; cnt += 2; ++it_a; ++it_b; } if (!SendUnsigned(len)) return(false); if (!SendUnsigned(identical)) return(false); if (!SendUnsigned(cnt)) return(false); it_a = first_a; it_b = first_b; // if there were any identical lines, send only one each for(unsigned i = 0; i< identical; i++) { if (!SendUnsigned(it_a->counter)) return(false); if (!SendSigned(it_a->max)) return(false); if (!SendSigned(it_a->rngState)) return(false); if (!SendString(it_a->src_name)) return(false); if (!SendUnsigned(it_a->src_line)) return(false); if (!SendUnsigned(it_a->obj_id)) return(false); ++it_a; ++it_b; } while ((it_a != a.end()) && (it_b != b.end())) { if (!SendUnsigned(it_a->counter)) return(false); if (!SendSigned(it_a->max)) return(false); if (!SendSigned(it_a->rngState)) return(false); if (!SendString(it_a->src_name)) return(false); if (!SendUnsigned(it_a->src_line)) return(false); if (!SendUnsigned(it_a->obj_id)) return(false); if (!SendUnsigned(it_b->counter)) return(false); if (!SendSigned(it_b->max)) return(false); if (!SendSigned(it_b->rngState)) return(false); if (!SendString(it_b->src_name)) return(false); if (!SendUnsigned(it_b->src_line)) return(false); if (!SendUnsigned(it_b->obj_id)) return(false); ++it_a; ++it_b; } return(true); }