On Friday 05 of October 2012, Michael Stahl wrote:
On 04/10/12 15:29, Lubos Lunak wrote:
On Wednesday 03 of October 2012, Michael Stahl wrote:
hmm i am not really familiar with "D" and just believed the first
sentence on its string documentation page :)
so let's read more of it...
Let's not. What D or any other random language does is not necessarily
relevant here.
There already is OUString::operator+=, so what exactly is your definition
of mutable if you think OUString is mutable despite this (and, moreover,
why does that definition matter)?
And if you think that OUString is immutable and the operator+= is some
kind of mistake that should not be there, then what is the difference
between operator= and operator+= given that, as far as the outside world
is concerned, they do almost the same, except for operator+= modifying
its own internal copy of _rtl_uString that's not accessible from outside
at the time?
OUString & operator+=( const OUString & str ) SAL_THROW(())
{
rtl_uString_newConcat( &pData, pData, str.pData );
return *this;
}
it allocates a new string buffer, and does not mutate the OUString's
exising buffer.
Exactly. So does that with your interpretation mean that this makes OUString
mutable or immutable? And all the followup questions.
I do not see any problem with OUString::operator+= that
OUString::operator= would not already have. And since the consensus seems
to be that operator= is needed (and indeed OUString would be awfully
cumbersome without it), then operator+= can be there as well. And, by
extension, a number of other modifying functions.
it seems you are missing the distinction between changing which buffer
the OUString points to, and mutating elements of the buffer that an
existing OUString points to, which are separate concerns, as has already
been discussed in this thread:
No, I'm perfectly aware of the distiction, just like I'm aware of the fact
that it's irrelevant to the original question, which is what you seem to be
missing.
Noel asked why it is not possible to mutate OUString in-place (just like it's
possible e.g. with std::string::insert() ). But it is possible to mutate
OUString in place, as shown by OUString::operator+= . In this view it doesn't
matter how it's implemented internally. There can be OUString::insert() ,
working rather similarly to OUString::operator+=. It may internally detach
from a shared implementation detail and modify a copy of it, but that doesn't
conceptually matter, because OUString::operator+= and all the hypothetical
similarly working modifying methods like OUString::insert() make OUString
mutable from the usage point of view, because they modify what the developer
using it perceives as the string.
And if you still disagree with this, then you really need to explain what you
actually mean with 'immutable OUString'. And if you see a good reason why
e.g. OUString::insert() could not be added, feel free to throw that in too (I
don't count "Java/D don't do that" alone as a good reason without further
elaborating).
--
Lubos Lunak
l.lunak@suse.cz
Context
- Re: OUString is mutable? (continued)
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.