sc/inc/cellvalue.hxx | 4 ---- sc/source/core/data/cellvalue.cxx | 10 ++++++---- 2 files changed, 6 insertions(+), 8 deletions(-)
New commits: commit 3fd400c6b67f8f9b5527720ad148c1f428a59ab2 Author: Eike Rathke <er...@redhat.com> Date: Tue Nov 3 13:03:39 2015 +0100 implement assignment in only one place ... and comment on what to do if we really wanted a copy-swap-idiom. The need to doc comment about not to use assign() after default ctor is also gone with the temporary swap. Change-Id: I2a49091b2a41cf155e912e3c373dbbe81c7f9737 diff --git a/sc/inc/cellvalue.hxx b/sc/inc/cellvalue.hxx index 915bdee..7ac6a87 100644 --- a/sc/inc/cellvalue.hxx +++ b/sc/inc/cellvalue.hxx @@ -123,10 +123,6 @@ struct SC_DLLPUBLIC ScRefCellValue /** * Take cell value from specified position in specified document. - * - * Avoid the sequence of ScRefCellValue() default ctor followed by assign() - * as it results in performance penalty, use the - * ScRefCellValue(ScDocument&,const ScAddress&) ctor instead. */ void assign( ScDocument& rDoc, const ScAddress& rPos ); diff --git a/sc/source/core/data/cellvalue.cxx b/sc/source/core/data/cellvalue.cxx index 6903297..f0fe714 100644 --- a/sc/source/core/data/cellvalue.cxx +++ b/sc/source/core/data/cellvalue.cxx @@ -495,9 +495,7 @@ ScRefCellValue::ScRefCellValue( const ScRefCellValue& r ) : meType(r.meType), mf ScRefCellValue::ScRefCellValue( ScDocument& rDoc, const ScAddress& rPos ) { - const ScRefCellValue& rCell = rDoc.GetRefCellValue(rPos); - meType = rCell.meType; - mfValue = rCell.mfValue; + assign( rDoc, rPos); } ScRefCellValue::~ScRefCellValue() @@ -593,6 +591,11 @@ bool ScRefCellValue::equalsWithoutFormat( const ScRefCellValue& r ) const ScRefCellValue& ScRefCellValue::operator= ( const ScRefCellValue& r ) { + // So we *could* have a copy-swap-idiom here for exception-safety if we had + // to slow down things.. but then implement an explicit move-ctor and pass + // r by-value instead of manually creating a temporary so the compiler can + // take advantage. And initialize + // ScRefCellValue(ScDocument&,const ScAddress&) with default ctor. meType = r.meType; mfValue = r.mfValue; // largest member of union return *this; commit 93d61feaf55cfe4484581e1985435cd1439d6f41 Author: Eike Rathke <er...@redhat.com> Date: Mon Nov 2 19:05:24 2015 +0100 remove superfluous call to clear() in ScRefCellValue dtor Change-Id: Iea7788f985e2c5dc7a96eab711bf7d13732ab86e diff --git a/sc/source/core/data/cellvalue.cxx b/sc/source/core/data/cellvalue.cxx index c63f493..6903297 100644 --- a/sc/source/core/data/cellvalue.cxx +++ b/sc/source/core/data/cellvalue.cxx @@ -502,7 +502,6 @@ ScRefCellValue::ScRefCellValue( ScDocument& rDoc, const ScAddress& rPos ) ScRefCellValue::~ScRefCellValue() { - clear(); } void ScRefCellValue::clear() _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits