On Thursday 30 of June 2011, Caolán McNamara wrote:
> On Thu, 2011-06-30 at 13:46 +0200, Lubos Lunak wrote:
> > O[U]StringBuffer don't have any other range
> > function, but O[U]String uses start+len for such cases (copy, replaceAt),
> > so this seems inconsistent.
>
> hmm, yeah, that's true. java doesn't have a replaceAt sort of thing, nor
> a "copy" method, though its ctors have a startindex +  length option
> while it has a "substring" which does take [startindex, endindex)
>
> Do we have a preference ?, I'm easy either way.

 Since nobody seems to have a preference, I'd like to point out that also 
std::string uses start+len (even though there one could expect start,end to 
match the iterator variants) and Qt uses start+len. IMO we should not try to 
be consistent with Java just because the idea for the class comes from Java.

 Ok to push the attached patch? Also, am I correct that you haven't used these 
anywhere yet?

-- 
 Lubos Lunak
 l.lu...@suse.cz
diff --git a/sal/inc/rtl/strbuf.h b/sal/inc/rtl/strbuf.h
index 1c076cf..9543b9a 100644
--- a/sal/inc/rtl/strbuf.h
+++ b/sal/inc/rtl/strbuf.h
@@ -116,19 +116,16 @@ void SAL_CALL rtl_stringbuffer_insert( /*inout*/rtl_String ** This,
     Removes the characters in a substring of this sequence.
 
     The substring begins at the specified <code>start</code> and
-    extends to the character at index <code>end - 1</code> or to
-    the end of the sequence if no such character exists. If
-    <code>start</code> is equal to <code>end</code>, no changes
-    are made.
+    is <code>len</code> characters long.
 
-    start must be >= 0 && <= This->length && <= end
+    start must be >= 0 && <= This->length
 
     @param 	start      	The beginning index, inclusive
-    @param	end    		The ending index, exclusive
+    @param	len    		The substring length
  */
 void SAL_CALL rtl_stringbuffer_remove( /*inout*/rtl_String ** This,
                                        sal_Int32 start,
-                                       sal_Int32 end );
+                                       sal_Int32 len );
 
 #ifdef __cplusplus
 }
diff --git a/sal/inc/rtl/strbuf.hxx b/sal/inc/rtl/strbuf.hxx
index 7e52b21..3a26c1b 100644
--- a/sal/inc/rtl/strbuf.hxx
+++ b/sal/inc/rtl/strbuf.hxx
@@ -675,25 +675,17 @@ public:
         Removes the characters in a substring of this sequence.
 
         The substring begins at the specified <code>start</code> and
-        extends to the character at index <code>end - 1</code> or to
-        the end of the sequence if no such character exists. If
-        <code>start</code> is equal to <code>end</code>, no changes
-        are made.
+        is <code>len</code> characters long.
 
         start must be >= 0 && <= getLength() && <= end
 
-        As is usual for the rtl string classes, this is based
-        on an analogous Java StringBuffer member. In this
-        case <code>delete</code>, but because that's a reserved
-        keyword in C++, this is named <code>remove</code>.
-
-        @param  start      	The beginning index, inclusive
-        @param  end    		The ending index, exclusive
+        @param 	start      	The beginning index, inclusive
+        @param	len    		The substring length
         @return this string buffer.
      */
-    OStringBuffer & remove( sal_Int32 start, sal_Int32 end )
+    OStringBuffer & remove( sal_Int32 start, sal_Int32 len )
     {
-        rtl_stringbuffer_remove( &pData, start, end );
+        rtl_stringbuffer_remove( &pData, start, len );
         return *this;
     }
 
diff --git a/sal/inc/rtl/ustrbuf.h b/sal/inc/rtl/ustrbuf.h
index d2d2ed4..260db4f 100644
--- a/sal/inc/rtl/ustrbuf.h
+++ b/sal/inc/rtl/ustrbuf.h
@@ -163,19 +163,16 @@ void SAL_CALL rtl_uStringbuffer_insert_ascii(   /*inout*/rtl_uString ** This,
     Removes the characters in a substring of this sequence.
 
     The substring begins at the specified <code>start</code> and
-    extends to the character at index <code>end - 1</code> or to
-    the end of the sequence if no such character exists. If
-    <code>start</code> is equal to <code>end</code>, no changes
-    are made.
+    is <code>len</code> characters long.
 
-    start must be >= 0 && <= This->length && <= end
+    start must be >= 0 && <= This->length
 
     @param 	start      	The beginning index, inclusive
-    @param	end    		The ending index, exclusive
+    @param	len    		The substring length
  */
 void SAL_CALL rtl_uStringbuffer_remove( /*inout*/rtl_uString ** This,
                                        sal_Int32 start,
-                                       sal_Int32 end );
+                                       sal_Int32 len );
 
 #ifdef __cplusplus
 }
diff --git a/sal/inc/rtl/ustrbuf.hxx b/sal/inc/rtl/ustrbuf.hxx
index d48c5c7..7569597 100644
--- a/sal/inc/rtl/ustrbuf.hxx
+++ b/sal/inc/rtl/ustrbuf.hxx
@@ -742,25 +742,17 @@ public:
         Removes the characters in a substring of this sequence.
 
         The substring begins at the specified <code>start</code> and
-        extends to the character at index <code>end - 1</code> or to
-        the end of the sequence if no such character exists. If
-        <code>start</code> is equal to <code>end</code>, no changes
-        are made.
+        is <code>len</code> characters long.
 
-        start must be >= 0 && <= getLength() && <= end
+        start must be >= 0 && <= This->length
 
-        As is usual for the rtl string classes, this is based
-        on an analogous Java StringBuffer member. In this
-        case <code>delete</code>, but because that's a reserved
-        keyword in C++, this is named <code>remove</code>.
-
-        @param  start      	The beginning index, inclusive
-        @param  end    		The ending index, exclusive
+        @param 	start      	The beginning index, inclusive
+        @param	len    		The substring length
         @return this string buffer.
      */
-    OUStringBuffer & remove( sal_Int32 start, sal_Int32 end )
+    OUStringBuffer & remove( sal_Int32 start, sal_Int32 len )
     {
-        rtl_uStringbuffer_remove( &pData, start, end );
+        rtl_uStringbuffer_remove( &pData, start, len );
         return *this;
     }
 
diff --git a/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
index 2307dab..036a2c3 100644
--- a/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
+++ b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
@@ -340,7 +340,7 @@ namespace rtl_OStringBuffer
             CPPUNIT_ASSERT(sb.toString().equalsL(
                 RTL_CONSTASCII_STRINGPARAM("Hat, Inc.")));
 
-            sb.remove(3, 9);
+            sb.remove(3, 6);
             CPPUNIT_ASSERT(sb.toString().equalsL(
                 RTL_CONSTASCII_STRINGPARAM("Hat")));
 
diff --git a/sal/rtl/source/strbuf.c b/sal/rtl/source/strbuf.c
index 8d0f276..c0e9694 100644
--- a/sal/rtl/source/strbuf.c
+++ b/sal/rtl/source/strbuf.c
@@ -151,31 +151,28 @@ void SAL_CALL rtl_stringbuffer_insert( rtl_String ** This,
  */
 void SAL_CALL rtl_stringbuffer_remove( rtl_String ** This,
                                        sal_Int32 start,
-                                       sal_Int32 end )
+                                       sal_Int32 len )
 {
     sal_Int32 nTailLen;
     sal_Char * pBuf;
-    sal_Int32 n;
-
-    if (end > (*This)->length)
-        end = (*This)->length;
 
-    n = end - start;
+    if (len > (*This)->length - start)
+        len = (*This)->length - start;
 
     //remove nothing
-    if (!n)
+    if (!len)
         return;
 
     pBuf = (*This)->buffer;
-    nTailLen = (*This)->length - end;
+    nTailLen = (*This)->length - ( start + len );
 
     if (nTailLen)
     {
         /* move the tail */
-        rtl_moveMemory(pBuf + start, pBuf + end, nTailLen * sizeof(sal_Char));
+        rtl_moveMemory(pBuf + start, pBuf + start + len, nTailLen * sizeof(sal_Char));
     }
 
-    (*This)->length-=n;
+    (*This)->length-=len;
     pBuf[ (*This)->length ] = 0;
 }	
 
diff --git a/sal/rtl/source/ustrbuf.c b/sal/rtl/source/ustrbuf.c
index 18ca27f..638b27e 100644
--- a/sal/rtl/source/ustrbuf.c
+++ b/sal/rtl/source/ustrbuf.c
@@ -211,31 +211,28 @@ void SAL_CALL rtl_uStringbuffer_insert_ascii(   /*inout*/rtl_uString ** This,
  */
 void SAL_CALL rtl_uStringbuffer_remove( rtl_uString ** This,
                                        sal_Int32 start,
-                                       sal_Int32 end )
+                                       sal_Int32 len )
 {
     sal_Int32 nTailLen;
     sal_Unicode * pBuf;
-    sal_Int32 n;
-
-    if (end > (*This)->length)
-        end = (*This)->length;
 
-    n = end - start;
+    if (len > (*This)->length - start)
+        len = (*This)->length - start;
 
     //remove nothing
-    if (!n)
+    if (!len)
         return;
 
     pBuf = (*This)->buffer;
-    nTailLen = (*This)->length - end;
+    nTailLen = (*This)->length - ( start + len );
 
     if (nTailLen)
     {
         /* move the tail */
-        rtl_moveMemory(pBuf + start, pBuf + end, nTailLen * sizeof(sal_Unicode));
+        rtl_moveMemory(pBuf + start, pBuf + start + len, nTailLen * sizeof(sal_Unicode));
     }
 
-    (*This)->length-=n;
+    (*This)->length-=len;
     pBuf[ (*This)->length ] = 0;
 }
 
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to