axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kenneth Chiu <ch...@cs.indiana.edu>
Subject Re: writing C++ methods that passes and/or returns arrays
Date Wed, 30 Jul 2003 05:10:48 GMT
On Wed, 30 Jul 2003 susantha@opensource.lk wrote:
> On Tue, 29 Jul 2003 21:08:35 -0500 (EST), Kenneth Chiu wrote
> > On Tue, 29 Jul 2003 susantha@opensource.lk wrote:
> >
> > > Hi all,
> > >
> > > Passing arrays as parameters to a method
> > > ----------------------------------------
> > > Doing this C++ differs from Java. Usually in C++ we pass the size of the
> > > array in another parameter so that inside the method it know the size of
> the
> > > array.
> > >
> > > In Java this is not a problem because an Array itself is a class that has
> the
> > > size. So a method in java,
> > >           int EchoIntArray(int []) corresponds to int EchoArray(int [],
> int)
> > > in C++.
> > >
> > > Suppose some one needs to write a web service for this method and the
> method
> > > signature that the WSDL describes corresponds to the method signature in
> Java
> > > exactly but not the C++ one.
> > >
> > > So how should a C++ developer implement his service corresponding to the
> > > WSDL ?
> > >
> > > This way that we (Axis C++) asks the C++ web service developer should be
> > > decided in order to improve Wrapper Class Generator (WCG) to handle
> passing
> > > and returning arrays from methods.
> > >
> > > I find that we can give 2 solutions,
> > >
> > > 1. Introduce Axis C++ own Array class. So the method signature becomes
> > >          int EchoIntArray(AxisArray a)
> > >
> > > 2. Ask the C++ developer to specify the meaning of other parameters by
> using
> > > a predefined Axis C++ macro. Then the method signature becomes,
> > >          int EchoIntArray(int [], ARRAYINSIZE int);
> > >
> > > Which is the best option to choose. IMO I like second.
> > >
> > > Also if you find any other solution please discuss.
> > >
> > > Comments on this is very much appreciated.
> >
>
> > I suggest 1, or use std::array, simply because number 2
> > seems error-prone.  Also, if you encapsulate the array in an
> > object, you can add range checking.  You can
> > #ifdef-out the range-checking in the release build.
>
> I am not aware of an array class in STL. you must be refering to std::list.

Sorry, I meant std::vector (there is std::valarray, but it's
probably not appropriate).

> Anyway we hope to allow passing most of STL types as parameters as it is.
> When we allow this anyone can pass a std::list or std::map (etc) to a method
> as parameters. Only thing is we have to improve the Wrapper Class Generator
> (WCG) to use Axis implimented Serializers and Deserializers for each of those
> STL types.
>
> I too like if we can ask C++ web service developers to use std::list instead
> of an array. If so we (the WCG) can just forget about handling arrays.
>
> But usually its unlikely that a C++ developer use a std::list when he wants
> to pass an array of integers (list<int> instead of int[]) but array of
> complex types (say list<Address> instead of Address[]) is OK.

I think it depends.  If I'm convinced through profiling that
performance is an issue, I would just use a very thin wrapper:

    template <typename T>
    class Array {

	public:

	    explicit Array(int size) : m_data(new T[size]), m_size(size) {}

	    ~Array() {
		delete [] m_data;
	    }

	    T& operator[](size_t i) {
		#ifdef AXIS_DEBUG
		    // Or consider throwing.
		    assert(i < m_size);
		#endif
		return m_data[i];
	    }

	    // Probably want a const version too.

	private:

	    T *m_data;
	    int m_size;
    };

I try to avoid passing naked, dynamically-sized arrays.

If I'm not concerned about performance, then I just use
std::vector.

> Also we can use both 1 & 2 methods.
> May be 2 for simple types as int char etc and 1 for complex types ????
>
> Susantha.
>
> >
> > Whether to write your own or use std::array depends on a lot
> > of factors.
>
>
> --
> Lanka Software Foundation (http://www.opensource.lk)
> Promoting Open-Source Development in Sri Lanka

Mime
View raw message