Hi,

On 06/04/2012 08:40 PM, Pepijn Noltes wrote:
Hi All,

On Mon, Jun 4, 2012 at 3:01 PM, Alexander Broekhuis
<[email protected]>  wrote:
Hi,

I'm working on extracting the OSGi API's from Celix to the Native-OSGi
project. Celix uses a utils library through which Lists and Maps are
provided.

How do we want to solve this in the API? Following the OSGi API, often a
simple array is used (Celix uses an ArrayList in those cases). But the Java
Collection/Dictionary etc are also used.

A simple/portable solution would be to use arrays with an additional return
parameter for places where a collection/list is used. For example:

int bundleContext_getBundles(bundle_context_t context, bundle bundles[],
int *entries);

A similar solution can be used for Dictionaries as well, a simple key/value
struct can be used.

How do we want to solve this? I don't know of any standard C library, and
what about C++?
C++ has C++ Standard Library (STD), which contains arrays, queues,
maps, etc and is - if i am correct - part of the C++ standard.
Because C does not have this, I think the purposed solution is a good one.
I agree with Pepijn here that imposing a (very small) set of utility functions/structs on the API is acceptable. I would personally always favour ease of use (concerning the API) over strictly sticking to "pure C". If there exists a small C library which we could embed or from which we could extract relevant structures for the API, then go for it.

Even for the C++ API, there are some places where I would like to introduce custom data structures to make the life of the API user easier and/or more type-safe.

Best,
Sascha


An other option is to make the needed C collections part of the OSGi
API. Which has the advantages that we can use linked arrays, hash
maps, etc. The drawback is that we impose a API for something which is
clearly not part of OSGi.

Greetings,
Pepijn

Reply via email to