diff options
Diffstat (limited to 'sc/inc/dpitemdata.hxx')
-rw-r--r-- | sc/inc/dpitemdata.hxx | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/sc/inc/dpitemdata.hxx b/sc/inc/dpitemdata.hxx new file mode 100644 index 000000000..8f7626443 --- /dev/null +++ b/sc/inc/dpitemdata.hxx @@ -0,0 +1,98 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include "scdllapi.h" + +#include <sal/types.h> +#include <rtl/ustring.h> +#include <rtl/ustring.hxx> +#include "calcmacros.hxx" +#include "dpglobal.hxx" + +/** + * When assigning a string value, you can also assign an interned string + * whose life-cycle is managed by the pivot cache that it belongs to. Those + * methods that take a string pointer assume that the string is interned. + * + * <p>Do make sure that an item with an interned string won't persist after + * the pivot cache has been destroyed or reloaded.</p> + */ +class SC_DLLPUBLIC ScDPItemData +{ + friend class ScDPCache; + +public: + enum Type { GroupValue = 0, RangeStart = 1, Value = 2, String = 3, Error = 4, Empty = 5 }; + + static const sal_Int32 DateFirst; + static const sal_Int32 DateLast; + + struct GroupValueAttr + { + sal_Int32 mnGroupType; + sal_Int32 mnValue; + }; + +private: + + union { + rtl_uString* mpString; + GroupValueAttr maGroupValue; + double mfValue; + }; + + sal_uInt8 meType:3; + bool mbStringInterned:1; + + void DisposeString(); + +public: + // case insensitive equality + static sal_Int32 Compare(const ScDPItemData& rA, const ScDPItemData& rB); + + ScDPItemData(); + ScDPItemData(const ScDPItemData& r); + ScDPItemData(const OUString& rStr); + ScDPItemData(sal_Int32 nGroupType, sal_Int32 nValue); + ~ScDPItemData(); + + Type GetType() const { return static_cast<Type>(meType); } + void SetEmpty(); + void SetString(const OUString& rS); + void SetStringInterned( rtl_uString* pS ); + void SetValue(double fVal); + void SetRangeStart(double fVal); + void SetRangeFirst(); + void SetRangeLast(); + void SetErrorStringInterned( rtl_uString* pS ); + bool IsCaseInsEqual(const ScDPItemData& r) const; + + // exact equality + bool operator==(const ScDPItemData& r) const; + bool operator< (const ScDPItemData& r) const; + + ScDPItemData& operator= (const ScDPItemData& r); + + bool IsEmpty() const; + bool IsValue() const; + OUString GetString() const; + double GetValue() const; + GroupValueAttr GetGroupValue() const; + bool HasStringData() const ; + + ScDPValue::Type GetCellType() const; + +#if DEBUG_PIVOT_TABLE + void Dump(const char* msg) const; +#endif +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |