[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bug-recutils] [PATCH 04/18] src: use specified number of records or
From: |
Jose E. Marchesi |
Subject: |
Re: [bug-recutils] [PATCH 04/18] src: use specified number of records or comments in lazy rsets. |
Date: |
Thu, 09 Aug 2012 23:23:09 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.92 (gnu/linux) |
Hi Michał.
This is the patchset introducing the rec_rset_set_num_records and
rec_rset_set_num_comments and the SIZE_MAX issue that I was referring in
a previous email. What are those facilities used for?
>From 83c90c314ca80aab64076109369572f784bfdc28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Mas=C5=82owski?= <address@hidden>
Date: Fri, 6 Jul 2012 16:18:55 +0200
Subject: [PATCH 04/18] src: use specified number of records or comments in
lazy rsets.
These numbers will be stored in index files to not need to parse the
whole rset to access them.
---
ChangeLog | 15 +++++++++++++++
src/rec-rset.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++------
src/rec.h | 11 +++++++++++
3 files changed, 76 insertions(+), 6 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 4566ec5..0891381 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2012-07-06 Michał Masłowski <address@hidden>
+
+ src: use specified number of records or comments in lazy rsets.
+ * src/rec-rset.c (struct rec_rset_s): New fields num_records and
+ num_comments.
+ (rec_rset_dup): Copy num_records and num_comments.
+ (rec_rset_num_elements): Use num_records and num_comments.
+ (rec_rset_num_records): Use num_records.
+ (rec_rset_num_comments): Use num_comments.
+ (rec_rset_set_num_records): New function.
+ (rec_rset_set_num_comments): Likewise.
+ (rec_rset_init): Initialize num_records and num_comments.
+ * src/rec.h: Add prototypes for rec_rset_set_num_records and
+ rec_rset_set_num_comments.
+
2012-07-03 Michał Masłowski <address@hidden>
src: reset parser's EOF state on seek.
diff --git a/src/rec-rset.c b/src/rec-rset.c
index 75d8fad..65ec044 100644
--- a/src/rec-rset.c
+++ b/src/rec-rset.c
@@ -102,6 +102,11 @@ struct rec_rset_s
int record_type;
int comment_type;
rec_mset_t mset;
+
+ /* Numbers of records and comments to use instead of the real ones
+ if these are less than SIZE_MAX. */
+ size_t num_records;
+ size_t num_comments;
};
/* Static functions implemented below. */
@@ -280,6 +285,8 @@ rec_rset_dup (rec_rset_t rset)
/* XXX: make copies of the following structures. */
new->type_reg = NULL;
new->field_props = NULL;
+ new->num_records = rset->num_records;
+ new->num_comments = rset->num_comments;
if (rset->order_by_fields)
{
@@ -323,9 +330,16 @@ rec_rset_mset_raw (rec_rset_t rset)
size_t
rec_rset_num_elems (rec_rset_t rset)
{
- if (!rec_rset_finish_parsing (rset))
+ if (rset->parser)
{
- return 0;
+ if (rset->num_records != SIZE_MAX && rset->num_comments != SIZE_MAX)
+ {
+ return rset->num_records + rset->num_comments;
+ }
+ else if (!rec_rset_finish_parsing (rset))
+ {
+ return 0;
+ }
}
return rec_mset_count (rset->mset, MSET_ANY);
}
@@ -333,9 +347,16 @@ rec_rset_num_elems (rec_rset_t rset)
size_t
rec_rset_num_records (rec_rset_t rset)
{
- if (!rec_rset_finish_parsing (rset))
+ if (rset->parser)
{
- return 0;
+ if (rset->num_records != SIZE_MAX)
+ {
+ return rset->num_records;
+ }
+ else if (!rec_rset_finish_parsing (rset))
+ {
+ return 0;
+ }
}
return rec_mset_count (rset->mset, rset->record_type);
}
@@ -343,13 +364,32 @@ rec_rset_num_records (rec_rset_t rset)
size_t
rec_rset_num_comments (rec_rset_t rset)
{
- if (!rec_rset_finish_parsing (rset))
+ if (rset->parser)
{
- return 0;
+ if (rset->num_comments != SIZE_MAX)
+ {
+ return rset->num_comments;
+ }
+ else if (!rec_rset_finish_parsing (rset))
+ {
+ return 0;
+ }
}
return rec_mset_count (rset->mset, rset->comment_type);
}
+void
+rec_rset_set_num_records (rec_rset_t rset, size_t num)
+{
+ rset->num_records = num;
+}
+
+void
+rec_rset_set_num_comments (rec_rset_t rset, size_t num)
+{
+ rset->num_comments = num;
+}
+
rec_record_t
rec_rset_descriptor (rec_rset_t rset)
{
@@ -966,6 +1006,10 @@ rec_rset_init (rec_rset_t rset)
initialized with real values. */
memset (rset, 0 /* NULL */, sizeof (struct rec_rset_s));
+
+ /* Require getting the real values. */
+ rset->num_records = SIZE_MAX;
+ rset->num_comments = SIZE_MAX;
}
static void
diff --git a/src/rec.h b/src/rec.h
index be56829..e112e87 100644
--- a/src/rec.h
+++ b/src/rec.h
@@ -1092,6 +1092,17 @@ size_t rec_rset_num_records (rec_rset_t rset);
size_t rec_rset_num_comments (rec_rset_t rset);
+/* Set the number of records for rec_rset_num_records to return if the
+ rset will be lazily parsed. Fully parsed or with this value set to
+ SIZE_MAX rsets will use their real size. */
+
+void rec_rset_set_num_records (rec_rset_t rset, size_t num);
+
+/* Set the number of comments to use in lazy rsets. Like
+ rec_rset_set_num_records. */
+
+void rec_rset_set_num_comments (rec_rset_t rset, size_t num);
+
/***************** Record descriptor management ******************/
/* Return the record descriptor of a given record set. NULL is
--
1.7.10
--
Jose E. Marchesi http://www.jemarch.net
GNU Project http://www.gnu.org
- Re: [bug-recutils] [PATCH 04/18] src: use specified number of records or comments in lazy rsets.,
Jose E. Marchesi <=