Re: Array property of custom object

Mihai Dobrescu <[email protected]>
Newsgroups gmane.comp.mozilla.devel.jseng
Message-ID <[email protected]>
On Tuesday, May 3, 2016 at 10:25:53 AM UTC+3, Mihai Dobrescu wrote:
> On Tuesday, May 3, 2016 at 5:01:42 AM UTC+3, Boris Zbarsky wrote:
> > On 5/2/16 4:30 PM, Mihai Dobrescu wrote:
> > > I need to e able to replace array elements, probably I will need to add/remove elements too
> > 
> > OK. I have a hard time reconciling adding elements that with your claim 
> > that your backing storage is a constant-sized array, but I assume you 
> > know what you're doing.
> > 
> > > Aren't all the JS objects containing private data proxies (the one with the JSCLASS_HAS_PRIVATE flag)?
> > 
> > Not at all.
> > 
> > -Boris
> 
> ...well, I did not say js::proxies.
> 
> I could try to post a sample of my approach for a property getter to be passed to the JS_PSGS macro (extremely simplified as it is template based solution):
> 
> template<typename jsType, typename jsPropertyType, typename jsPropertyType::PrivateType PrivateType::*Property>
>     static bool GetProperty(JSContext *cx, unsigned argc, JS::Value *vp)
>     {
>         JS::CallArgs args = CallArgsFromVp(argc, vp);
> 
>         PrivateType* data = (PrivateType*)(JS_GetPrivate(&args.thisv().toObject()));
> 
>         if (!data)
>             return false; // whatever...
> 
>         JSObject *obj = JS_NewObject(cx, &jsDataClass<jsPropertyType>::fClass);
> 
>         JS_SetPrivate(obj, new jsPropertyType::PrivateType(data->*Property));
> 
>         args.rval().setObject(*obj);
> 
>         return true;
>     }
> 
> where jsPropertyType is a wrapper for the property's type. jsType is the property owner wrapper object. All of these have a PrivateType typedef for the wrapped C type. It should be pretty clear for a person with SpiderMonkey knowledge. 
> 
> It is my approach I could find for embedding API's types.
> 
> I could ask also, how do you know should be done? For any of these, simple and array properties. If you do it from scratch, what is your approach?

And I have to apologize for forgetting to say what is my issue: considering this approach, I fail to find a way to pass the index of the array element to access for some operation.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.