Age | Commit message (Collapse) | Author | Files | Lines |
|
This patch includes following functionality:
1) Fixed the invalid handling of the pointers in the collection
when last element is removed from the collection.
2) Added unit test to verify the fix.
3) Modified the three unit test to be verbose on demand.
4) Switched the main of the unit test to use array of functions
rather than big if statement.
|
|
This patch adds ability to create a reference to the top
level collection.
Previously one could get reference only to collection
inside other collection. With this change it becomes
possible to have two pointers to the same top level
collection from multiple places.
COLLECTION Adding comment.
COLLECTION: Some tracing
|
|
|
|
This is a feature that helps ELAPI.
It makes lookup of the fields that need
to be resolved for every event a bit faster.
The idea is to be able to put a 'pin'
into a specific place while iterating
the collection and make this place a new
"wrap around" place for the collection.
This means that next time you
iterate this collection you will start
iterating from the next item and
the item you got before pin will be last
in your iteration cycle.
Here is the example:
Assume you have two collections that you need
to compare and perform some action on collection
1 based on the presense of the item in collection 2.
Collection1 = A, B, C, D, E. F
Collection2 = A, C, F
The usual approach is to try A from collection 1
against A, B, C from collection 2. "A" will be found
right away. But to find "F" it has to be compared
to "A" and "C" first. The fact that the collections
are to some extent ordered can in some cases
help to reduce the number of comparisons.
If we found "C" in the list we can put a "pin"
into the collection there causing the iterator
to warp at this "pin" point. Since "D" and "E"
are not in the second collection we will have
to make same amount of comparisons in traditional
or "pinned" case to not find them.
To find "F" in pinned case there will be just one
comparison.
Traditional case = 1 + 3 + 2 + 3 + 3 + 3 = 15
Pinned case = 1 + 3 + 1 + 3 + 3 + 1 = 12
It is a 20% comparison reduction.
|
|
Needed item comparison functions and realized
that the easiest way to test them would be using
sorting. Since there already been a ticket #73
to do that I added function to sort collection
based on different properties of the item.
COLLECTION Fixing issues with comparisons
COLLECTION Adding do-while to macro
|
|
The hashing logic was internal to the collection item.
But if someone wants to effectively deal with
the items and compare the property to a string
he should compare hashes first. But it was not possible
without the provided functions. As a result some
of the ELAPI modules had to take advantage of
knowledge of the item structure. This is bad.
So this patch lays foundation for refactoring
of the ELAPI code that was using internals of the item
directly (file_util.c mostly).
Also patch adds a unit test that was required for
testing new functionality and for ticket #83
|
|
This patch adds better options for
copying collections in flat mode.
It allows caller of the interface
to control prefixing of the fields
when one collection is appended to another.
It also avoids creating prefixes when the
collection is simply copied in flat mode.
Also for ELAPI I realized that the most efficient
way to deal with the "resolved" event
(event where all templeted values are actually replaced
with the real values) is to add a callback
capability to a copy collection function
so that the callback can be used to modify
the data (resolve it) while the copy operation
is in progress. This approach eliminates the need
for separate set of lookups after the event
is already copied.
|
|
This patch addresses several issues:
a) Adds capability to add or copy the collections
in flattened mode but construct names of attributes
in dotted notation. For example when you append collection
"sub" with items "foo" and "bar" previously you
could add them as "foo" and "bar" not you can
flatten them and the names will be "sub.foo"
and "sub.bar" this allows better processing of the
attributes in the elapi message.
b) Removes old implemntation of the
copy collection function.
c) Removes the col_set_timestamp,
this functionality has been moved to ELAPI
long ago.
d) Updates collection unit test.
e) Updates elapi to use new functionality
f) Updates elapi unit test
Have run under valgrind with no problems.
|
|
I started to cleanup the unit tests from the type cust around NULL and
found several problems that I had to address:
1) The choice of the "." as a search separator
turned out to be a poor choice.
The problem was that the file name has "."
and INI was relaying on files to be used as
property names.
I corrected that part in the INI but after discussion
with Simo we decided to switch from "." to "!"
as special symbol anyways.
2) Found that the property rename was not
reinitializing the hash. Corrected.
Added ticket to add unit tests around it (#83).
|
|
Addressing ticket #71.
The searches were not taking advantage of the hashes,
now they are.
|
|
The remove functions extract and remove
items, they act differently from the way
the delete_property function works.
The new functions allow deletion with
the disposition while the delete_property
only deletes specified property.
The delete_property function is left as is
since there are some use cases when it is
more efficient to use it rather than new
remove_item_xxx ones.
|
|
During a review of the previous patch the two issues
were found:
a) The col_iterator_up function was not implemented properly
so it got reworked. New implementation changes
the way error condition is handled. Comments were updated accordingly.
b) There was a mising check for validity of the argument in
the col_insert_into_current function. Check was added.
c) Unit test modified to reflect the change in functionality.
|
|
The collection is hearachical. The flattening
of the collection was not implemented before
both for traversal and copying. This patch
introduces functionality to traverse or
iterate through collection as flat set
and also copy collection into another flattening
it and automatically resolving conflicts.
Also imptoved tracability and fixed memory leak
in unbind iterator code.
|
|
Fix consts and function declarations
|
|
Patch prepends prefix "col_" to all
functions related to collection.
This caused some formatiing issues
so the alignement was addressed too.
|
|
Adds a unit test for deletion and re-adding
of the elements to collection.
Small syntactical fix in "stack".
|
|
This patch adds formatting changes to
better follow the style guidelines in
the collection unit test.
No logical changes to the code.
I was planning to do it for a while
per Simo's comment when he accepted
the core of the collection code but
indicated that the unit test should be
cleaned later.
Later has come.
|
|
Add was always insterting at the end of the collection.
With this change one can control where the item is
inserted and deal with the duplicates too.
Also one now can extract items from collection
using absolute and relative disposition.
Using more advanced hashing function.
|
|
The read_line() function used an internal buffer allocated on stack
as temporary storage for a line read from file, then returned it.
read_line() now gets a buffer from the caller.
Fixed memory leaks in INI and Collection found by valgrind.
|
|
|
|
|