summaryrefslogtreecommitdiff
path: root/cesar/lib
diff options
context:
space:
mode:
authormercadie2010-06-08 13:07:59 +0000
committermercadie2010-06-08 13:07:59 +0000
commit9ebe1fd643e6da466171aa0b939c1d3128263a8b (patch)
treeeb1381306d17cfbc1f2814c1f274630656d78f88 /cesar/lib
parentf7ea3977e37c7abd74bfe6cf7abf7ee95e6eb163 (diff)
cesar/cp/{msg, sta/action}: add result field to VS_GET_STATS, closes #1003
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@7183 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/lib')
-rw-r--r--cesar/lib/src/stats.c232
-rw-r--r--cesar/lib/stats.h8
2 files changed, 125 insertions, 115 deletions
diff --git a/cesar/lib/src/stats.c b/cesar/lib/src/stats.c
index f376739f1e..6d49408ccf 100644
--- a/cesar/lib/src/stats.c
+++ b/cesar/lib/src/stats.c
@@ -340,139 +340,141 @@ lib_stats_uninit (void)
lib_stats.init = false;
}
+u8
+lib_stats_get_nb_pages (lib_stats_level_t level)
+{
+ dbg_assert (level < LIB_STATS_TOTAL);
+
+ return lib_stats.book[level].nb_pages;
+}
+
void
lib_stats_get_page (bitstream_t *bitstream, u8 page,
lib_stats_level_t level)
{
dbg_assert (level < LIB_STATS_TOTAL);
+ dbg_assert (page < lib_stats.book[level].nb_pages);
lib_stats_page_t *target_page; /* point to the page to get */
lib_stats_stat_t *target_stat; /* point to the stat to write to the
bitstream */
- /* First of all send the page number */
- bitstream_write (bitstream, lib_stats.book[level].nb_pages, 8);
-
- /* Check if the page requested exists */
- if (page < lib_stats.book[level].nb_pages)
+ /* Init target_page and target_stat */
+ target_page = lib_stats.book[level].first_page;
+ while (page--)
{
- /* Init target_page and target_stat */
- target_page = lib_stats.book[level].first_page;
- while (page--)
- {
- target_page = target_page->next_page;
- }
- target_stat = target_page->first_stat;
+ target_page = target_page->next_page;
+ }
+ target_stat = target_page->first_stat;
- while (target_stat)
+ while (target_stat)
+ {
+ /* Skip write only statistics. */
+ if (target_stat->mode != LIB_STATS_ACCESS_WRITE_ONLY)
{
- /* Skip write only statistics. */
- if (target_stat->mode != LIB_STATS_ACCESS_WRITE_ONLY)
+ /* nb quartets to send depends on type */
+ int nb_quartets = 2 * target_stat->type;
+ /* Write value's name to bitstream */
+ bitstream_write_buf (bitstream, (const u8 *)
+ target_stat->name, strlen
+ (target_stat->name));
+ bitstream_write (bitstream, ':', 8);
+
+ /* Get value depending on it's type */
+ switch (target_stat->type)
{
- /* nb quartets to send depends on type */
- int nb_quartets = 2 * target_stat->type;
- /* Write value's name to bitstream */
- bitstream_write_buf (bitstream, (const u8 *)
- target_stat->name, strlen
- (target_stat->name));
- bitstream_write (bitstream, ':', 8);
-
- /* Get value depending on it's type */
- switch (target_stat->type)
+ case LIB_STATS_1_BYTE:
{
- case LIB_STATS_1_BYTE:
- {
- u8 stat_value;
-
- if (target_stat->value)
- stat_value = *(u8 *) (target_stat->value);
- else
- stat_value =
- *(u8 *) (target_stat->callback_read ());
-
- /* Write value to bitstream starting with MSB */
- while (nb_quartets)
- bitstream_write (
- bitstream,
- quartet2ascii ((u8) (stat_value
- >> (--nb_quartets * 4))),
- 8);
- }
- break;
-
- case LIB_STATS_2_BYTE:
- {
- u16 stat_value;
-
- if (target_stat->value)
- stat_value = *(u16 *) (target_stat->value);
- else
- stat_value =
- *(u16 *) (target_stat->callback_read ());
-
- /* Write value to bitstream starting with MSB */
- while (nb_quartets)
- bitstream_write (
- bitstream,
- quartet2ascii ((u8) (stat_value
- >> (--nb_quartets * 4))),
- 8);
- }
- break;
-
- case LIB_STATS_4_BYTE:
- {
- u32 stat_value;
-
- if (target_stat->value)
- stat_value = *(u32 *) (target_stat->value);
- else
- stat_value =
- *(u32 *) (target_stat->callback_read ());
-
- /* Write value to bitstream starting with MSB */
- while (nb_quartets)
- bitstream_write (
- bitstream,
- quartet2ascii ((u8) (stat_value
- >> (--nb_quartets * 4))),
- 8);
- }
- break;
-
- case LIB_STATS_8_BYTE:
- {
- u64 stat_value;
-
- if (target_stat->value)
- stat_value = *(u64 *) (target_stat->value);
- else
- stat_value =
- *(u64 *) (target_stat->callback_read ());
-
- /* Write value to bitstream starting with MSB */
- while (nb_quartets)
- bitstream_write (
- bitstream,
- quartet2ascii ((u8) (stat_value
- >> (--nb_quartets * 4))),
- 8);
- }
- break;
-
-
- default:
- bitstream_write_buf (bitstream, (u8 *) "wrong_type",
- strlen ("wrong_type"));
- break;
+ u8 stat_value;
+
+ if (target_stat->value)
+ stat_value = *(u8 *) (target_stat->value);
+ else
+ stat_value =
+ *(u8 *) (target_stat->callback_read ());
+
+ /* Write value to bitstream starting with MSB */
+ while (nb_quartets)
+ bitstream_write (
+ bitstream,
+ quartet2ascii ((u8) (stat_value
+ >> (--nb_quartets * 4))),
+ 8);
}
- /* Inter-stat space if it's not the last one */
- if (target_stat->next_stat)
- bitstream_write (bitstream, ' ', 8);
+ break;
+
+ case LIB_STATS_2_BYTE:
+ {
+ u16 stat_value;
+
+ if (target_stat->value)
+ stat_value = *(u16 *) (target_stat->value);
+ else
+ stat_value =
+ *(u16 *) (target_stat->callback_read ());
+
+ /* Write value to bitstream starting with MSB */
+ while (nb_quartets)
+ bitstream_write (
+ bitstream,
+ quartet2ascii ((u8) (stat_value
+ >> (--nb_quartets * 4))),
+ 8);
+ }
+ break;
+
+ case LIB_STATS_4_BYTE:
+ {
+ u32 stat_value;
+
+ if (target_stat->value)
+ stat_value = *(u32 *) (target_stat->value);
+ else
+ stat_value =
+ *(u32 *) (target_stat->callback_read ());
+
+ /* Write value to bitstream starting with MSB */
+ while (nb_quartets)
+ bitstream_write (
+ bitstream,
+ quartet2ascii ((u8) (stat_value
+ >> (--nb_quartets * 4))),
+ 8);
+ }
+ break;
+
+ case LIB_STATS_8_BYTE:
+ {
+ u64 stat_value;
+
+ if (target_stat->value)
+ stat_value = *(u64 *) (target_stat->value);
+ else
+ stat_value =
+ *(u64 *) (target_stat->callback_read ());
+
+ /* Write value to bitstream starting with MSB */
+ while (nb_quartets)
+ bitstream_write (
+ bitstream,
+ quartet2ascii ((u8) (stat_value
+ >> (--nb_quartets * 4))),
+ 8);
+ }
+ break;
+
+
+ default:
+ bitstream_write_buf (bitstream, (u8 *) "wrong_type",
+ strlen ("wrong_type"));
+ break;
}
- /* Point to next stat */
- target_stat = target_stat->next_stat;
+ /* Inter-stat space if it's not the last one */
+ if (target_stat->next_stat)
+ bitstream_write (bitstream, ' ', 8);
}
+ /* Point to next stat */
+ target_stat = target_stat->next_stat;
}
/* end of string */
diff --git a/cesar/lib/stats.h b/cesar/lib/stats.h
index 3e5c9dc194..07c848e6c2 100644
--- a/cesar/lib/stats.h
+++ b/cesar/lib/stats.h
@@ -95,6 +95,14 @@ void
lib_stats_uninit (void);
/**
+ * Return the number of pages available.
+ * \param level statistics level requested
+ * \return the number of pages available for the requested level
+ */
+u8
+lib_stats_get_nb_pages (lib_stats_level_t level);
+
+/**
* Write one page of stats to the bitstream.
* \param bitstream bitstream where to write the page
* \param page page number requested (starting from 0)