Jump to content
  • Advertisement
Sign in to follow this  
Oscar1

Help with Copy Constructor and Object handle as argument

This topic is 1957 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I am trying to do a copy constructor on asOBJ_REF class. Seems the asBEHAVE_CONSTRUCT does not apply to asOBJ_REF classes.

 

Any ideas?

 

I settled so far for 

 

RegisterObjectMethod("image", "void Copy(const image &in)", asMETHOD(CByteImage,Copy), asCALL_THISCALL); assert( r >= 0 );

 

However my image class asBEHAVE_FACTORY is all object  handles, but I seems not to be able to make the Copy accept the object handles as argument.

 

so I can go 

 

img2.Copy(img); 

and it is fine

 

the 

img2.Copy(@img);

 

would throw compile error.

 

I tried

RegisterObjectMethod("image", "void Copy(const image @&in)", asMETHOD(CByteImage,Copy), asCALL_THISCALL); assert( r >= 0 );

 

and while it is accepted, the runtime runs into what seems an endless loop (well it does returns after 7 sec which is probably some protection in the angelscript), so I don't think this is how I am supposed to do it.

 

Any help & ideas?

 

BTW, speeds are pretty awesome. I use it for image processing (the looping through the pixels is the main toll) and the scripted version vs native code is about 10-12x slower. So if native version would be 35ms,, the scripted version would be for example 450 ms. I think that is pretty amazing.

Edited by Oscar1

Share this post


Link to post
Share on other sites
Advertisement

For asOBJ_REF you'll use the asBEHAVE_FACTORY instead of asBEHAVE_CONSTRUCT. The copy constructor should thus be registered as a asBEHAVE_FACTORY function that takes as input the reference to the object that should be copied, e.g.

 

engine->RegisterObjectBehaviour("image", asBEHAVE_FACTORY, "image @f(const image &in)", asFUNCTION(ImageCopyFactory), asCALL_CDECL);

 

Did you mean that the engine appeared to enter an infinite loop when you tried to compile a script with img.Copy(@img) and you had registered the function as Copy(const image @&in)? While there is no reason to register the method with this signature (it matches Copy(const image **) in C++), it definitely shouldn't cause a problem. I'll need to look into that, as it would appear to be a bug. That it returned after 7 seconds is probably that the library ran out of memory, as there is no built-in timeout in the library.

 

If you like the speed of AngelScript, you'll need to try it with the JIT compiler from BlindMind once you've gotten everything up an running. You're likely to see a very good boost in performance with that.

Edited by Andreas Jonsson

Share this post


Link to post
Share on other sites

Andreas, the compile worked ok with my Copy(const image @&in), the runtime went into an loop when executing it. I didn't debug it as I knew I was probably doing something I shouldn't.

 

I tried the copyconstructor and it works, but as any other reference input it doesn't accept @ tag which maybe makes the syntax confusing or maybe not... there is something about the object handle syntax I am not 100% comfortable. 

Edited by Oscar1

Share this post


Link to post
Share on other sites

When you prefix an expression with the @ symbol, it means that you want to operate on the address of the object, rather than the object itself. That's why the compiler doesn't accept an expression like this:

 

image a;
image b(@a);  // You wanted to make a copy of the object, but you're telling the compiler copy the address instead

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!