Exemple #1
0
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);
}
Exemple #2
0
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);
}