XPIDL arrays versus nsI(Mutable)Array: Best Practices?

Alex Vincent <[email protected]> Wed, 26 Jul 2006 02:05:00 -0700
Newsgroups gmane.comp.mozilla.documentation
Message-ID <[email protected]>
Today I wrote a patch for implementing nsIRegExpService (bug 106590), 
and it occured to me that this would be a good example to write for my 
XPCOM Cheat Sheet.  (Not to mention for implementing the pattern 
attribute for Web Forms 2.0.)

But later, I started thinking about how C++ code is going to access the 
members of the returned array, and my head started spinning.

Then I ran into the nsIArray and nsIMutableArray interfaces, which look 
somewhat simpler (I understand XPCOM somewhat better), but seem to 
involve a bit more code.

I wandered around and gathered a few references on XPIDL-style arrays:
http://www.mozilla.org/scriptable/faq.html#i11
* http://lxr.mozilla.org/seamonkey/source/js/src/xpconnect/tests/ 
components/xpctest_array.cpp)
* http://lxr.mozilla.org/seamonkey/source/js/src/xpconnect/tests/js/old/ 
xpctest_array.js
http://weblogs.mozillazine.org/weirdal/archives/008213.html
* http://lxr.mozilla.org/seamonkey/source/xpfe/components/extensions/ 
src/nsExtensionManager.js
* http://lxr.mozilla.org/seamonkey/source/xpcom/components/nsIClassInfo.idl
http://lxr.mozilla.org/seamonkey/search?string=PRUnichar+***

I also gathered a few on nsIArray and nsIMutableArray:
http://developer.mozilla.org/en/docs/XPCOM:Arrays
* http://lxr.mozilla.org/seamonkey/source/xpcom/ds/nsIArray.idl
* http://lxr.mozilla.org/seamonkey/source/xpcom/ds/nsIMutableArray.idl
http://lxr.mozilla.org/seamonkey/source/toolkit/components/filepicker/ 
content/filepicker.js#554
http://lxr.mozilla.org/seamonkey/source/toolkit/components/passwordmgr/ 
base/nsPasswordManager.cpp#467

These two models are very different, and I must ask which I should use, 
and when?

The answer to this question will matter a great deal to me, and affect 
both the Cheat Sheet and future patches I submit for reviews and checkin 
to mozilla.org trunk.

Alex Vincent