//
// aegis - project change supervisor
// Copyright (C) 2000, 2002-2008 Peter Miller
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// .
//
#include // for assert
#include
#include
#include
#include
batch_result_list_ty *
batch_result_list_new(void)
{
trace(("batch_result_list_new\n"));
batch_result_list_ty *p;
p = (batch_result_list_ty *)mem_alloc(sizeof(batch_result_list_ty));
p->length = 0;
p->length_max = 0;
p->item = 0;
p->pass_count = 0;
p->skip_count = 0;
p->no_result_count = 0;
p->fail_count = 0;
p->elapsed = 0;
return p;
}
void
batch_result_list_delete(batch_result_list_ty *p)
{
trace(("batch_result_list_delete\n"));
size_t j;
for (j = 0; j < p->length; ++j)
{
str_free(p->item[j].file_name);
if (p->item[j].architecture)
str_free(p->item[j].architecture);
}
delete [] p->item;
p->length = 0;
p->length_max = 0;
p->item = 0;
mem_free(p);
}
void
batch_result_list_append(batch_result_list_ty *p, string_ty *file_name,
int exit_status, string_ty *architecture, double elapsed)
{
trace(("batch_result_list_append(p = %08lX, file_name = %s, "
"exit_status = %d, architecture = %s, elapsed = %g)\n{\n", (long)p,
nstring(file_name).quote_c().c_str(), exit_status,
nstring(architecture).quote_c().c_str(), elapsed));
if (p->length >= p->length_max)
{
size_t new_length_max = p->length_max * 2 + 4;
batch_result_ty *new_item = new batch_result_ty [new_length_max];
for (size_t j = 0; j < p->length; ++j)
new_item[j] = p->item[j];
delete [] p->item;
p->item = new_item;
p->length_max = new_length_max;
}
batch_result_ty *brp = p->item + p->length++;
assert(file_name);
brp->file_name = str_copy(file_name);
brp->exit_status = exit_status;
brp->architecture = architecture ? str_copy(architecture) : 0;
brp->elapsed = elapsed;
trace(("}\n"));
}
void
batch_result_list_append_list(batch_result_list_ty *p,
const batch_result_list_ty *p2)
{
for (size_t j = 0; j < p2->length; ++j)
{
const batch_result_ty *brp2 = p2->item + j;
batch_result_list_append
(
p,
brp2->file_name,
brp2->exit_status,
brp2->architecture,
brp2->elapsed
);
}
p->pass_count += p2->pass_count;
p->skip_count += p2->skip_count;
p->no_result_count += p2->no_result_count;
p->fail_count += p2->fail_count;
p->elapsed += p2->elapsed;
}
bool
batch_result_list_member(batch_result_list_ty *p, string_ty *file_name,
string_ty *architecture)
{
assert(p);
if (!p)
return false;
for (size_t j = 0; j < p->length; ++j)
{
batch_result_ty *brp = p->item +j;
assert(brp->file_name);
if (!brp->file_name)
continue;
if
(
str_equal(file_name, brp->file_name)
&&
(
architecture
?
(
brp->architecture
&&
str_equal(architecture, brp->architecture)
)
:
(0 == brp->architecture)
)
)
return true;
}
return false;
}