diff options
author | David Tardon <dtardon@redhat.com> | 2013-04-19 18:54:16 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2013-04-24 05:17:10 +0000 |
commit | 6c7659b584ea7ed3652ca4eb9a2297f36310c365 (patch) | |
tree | adf631e2d3db309b0696babd9d026bce0996c215 /sal | |
parent | Rename image files to match with command name (diff) | |
download | core-6c7659b584ea7ed3652ca4eb9a2297f36310c365.tar.gz core-6c7659b584ea7ed3652ca4eb9a2297f36310c365.zip |
move URE headers to include/
Change-Id: Ib48a12e902f2311c295b2007f08f44dee28f431d
Reviewed-on: https://gerrit.libreoffice.org/3499
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
Diffstat (limited to 'sal')
89 files changed, 0 insertions, 29665 deletions
diff --git a/sal/CppunitTest_sal_checkapi.mk b/sal/CppunitTest_sal_checkapi.mk deleted file mode 100644 index 42fd5e354d94..000000000000 --- a/sal/CppunitTest_sal_checkapi.mk +++ /dev/null @@ -1,45 +0,0 @@ -# -*- Mode: makefile; tab-width: 4; indent-tabs-mode: t -*- -# -# Version: MPL 1.1 / GPLv3+ / LGPLv3+ -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License or as specified alternatively below. You may obtain a copy of -# the License at http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# Major Contributor(s): -# Copyright (C) 2011 Matúš Kukan <matus.kukan@gmail.com> (initial developer) -# -# All Rights Reserved. -# -# For minor contributions see the git repository. -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 3 or later (the "GPLv3+"), or -# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), -# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable -# instead of those above. - -$(eval $(call gb_CppunitTest_CppunitTest,sal_checkapi)) - -$(eval $(call gb_CppunitTest_use_custom_headers,sal_checkapi,\ - sal/allheaders \ -)) - -$(eval $(call gb_CppunitTest_add_exception_objects,sal_checkapi,\ - sal/qa/checkapi/strings \ -)) - -$(eval $(call gb_CppunitTest_use_external,sal_checkapi,boost_headers)) - -$(eval $(call gb_CppunitTest_use_libraries,sal_checkapi,\ - sal \ - $(gb_UWINAPI) \ -)) - -# vim: set noet sw=4 ts=4: diff --git a/sal/CustomTarget_sal_allheaders.mk b/sal/CustomTarget_sal_allheaders.mk deleted file mode 100644 index 808f54feee3f..000000000000 --- a/sal/CustomTarget_sal_allheaders.mk +++ /dev/null @@ -1,49 +0,0 @@ -# -*- Mode: makefile; tab-width: 4; indent-tabs-mode: t -*- -# -# Version: MPL 1.1 / GPLv3+ / LGPLv3+ -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License or as specified alternatively below. You may obtain a copy of -# the License at http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# Major Contributor(s): -# Copyright (C) 2011 Matúš Kukan <matus.kukan@gmail.com> (initial developer) -# -# All Rights Reserved. -# -# For minor contributions see the git repository. -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 3 or later (the "GPLv3+"), or -# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), -# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable -# instead of those above. - -$(eval $(call gb_CustomTarget_CustomTarget,sal/allheaders)) - -sal_allheaders_DIR := $(call gb_CustomTarget_get_workdir,sal/allheaders) - -$(call gb_CustomTarget_get_target,sal/allheaders) : \ - $(sal_allheaders_DIR)/sal_allheaders.hxx - -$(sal_allheaders_DIR)/sal_allheaders.hxx : \ - $(call gb_Package_get_target,sal_odk_headers) \ - | $(sal_allheaders_DIR)/.dir - $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),ECH,1) - printf '// Generated list of sal includes\n' > $@ && \ - printf '#ifdef WNT\n' >> $@ && \ - printf '#include <windows.h>\n' >> $@ && \ - printf '#endif\n' >> $@ \ - $(foreach file,$(shell cat $^),\ - $(if $(findstring /win32/,$(file)),&& printf '#ifdef WNT\n' >> $@) \ - && printf '#include <%s>\n' $(subst $(INSTDIR)/$(gb_Package_SDKDIRNAME)/include/,,$(file)) >> $@ \ - $(if $(findstring /win32/,$(file)),&& printf '#endif // WNT\n' >> $@) \ - ) - -# vim: set noet sw=4 ts=4: diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk index 0d19b3f70182..46ca29073dbf 100644 --- a/sal/Library_sal.mk +++ b/sal/Library_sal.mk @@ -32,8 +32,6 @@ $(eval $(call gb_Library_set_soversion_script,sal,3,$(SRCDIR)/sal/util/sal.map)) $(eval $(call gb_Library_set_precompiled_header,sal,$(SRCDIR)/sal/inc/pch/precompiled_sal)) $(eval $(call gb_Library_use_packages,sal,\ - sal_generated \ - sal_odk_headers \ sal_inc \ )) diff --git a/sal/Library_uwinapi.mk b/sal/Library_uwinapi.mk index d83bb636f6e1..dbb91a2a4787 100644 --- a/sal/Library_uwinapi.mk +++ b/sal/Library_uwinapi.mk @@ -29,8 +29,6 @@ $(eval $(call gb_Library_Library,uwinapi)) $(eval $(call gb_Library_use_packages,uwinapi,\ sal_inc \ - sal_generated \ - sal_odk_headers \ )) $(eval $(call gb_Library_use_system_win32_libs,uwinapi,\ diff --git a/sal/Module_sal.mk b/sal/Module_sal.mk index f3ec8461dc99..f5ecbc480b2d 100644 --- a/sal/Module_sal.mk +++ b/sal/Module_sal.mk @@ -10,7 +10,6 @@ $(eval $(call gb_Module_Module,sal)) $(eval $(call gb_Module_add_targets,sal,\ - CustomTarget_sal_allheaders \ $(if $(filter DESKTOP,$(BUILD_TYPE)), \ Executable_cppunittester) \ $(if $(filter $(OS),ANDROID), \ @@ -22,8 +21,6 @@ $(eval $(call gb_Module_add_targets,sal,\ Library_uwinapi) \ Package_inc \ StaticLibrary_salcpprt \ - Package_sal_generated \ - Package_sal_odk_headers \ )) ifneq (,$(filter DESKTOP,$(BUILD_TYPE))) @@ -39,7 +36,6 @@ $(eval $(call gb_Module_add_check_targets,sal,\ $(eval $(call gb_Module_add_check_targets,sal,\ $(if $(filter TRUE,$(DISABLE_DYNLOADING)),,CppunitTest_Module_DLL) \ CppunitTest_sal_bytesequence \ - CppunitTest_sal_checkapi \ CppunitTest_sal_osl_condition \ $(if $(filter $(OS),WNT),, \ CppunitTest_sal_osl_file) \ diff --git a/sal/Package_sal_generated.mk b/sal/Package_sal_generated.mk deleted file mode 100644 index 86578dac954f..000000000000 --- a/sal/Package_sal_generated.mk +++ /dev/null @@ -1,34 +0,0 @@ -# -*- Mode: makefile; tab-width: 4; indent-tabs-mode: t -*- -# -# Version: MPL 1.1 / GPLv3+ / LGPLv3+ -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License or as specified alternatively below. You may obtain a copy of -# the License at http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# Major Contributor(s): -# Copyright (C) 2011 Matúš Kukan <matus.kukan@gmail.com> (initial developer) -# -# All Rights Reserved. -# -# For minor contributions see the git repository. -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 3 or later (the "GPLv3+"), or -# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), -# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable -# instead of those above. - -$(eval $(call gb_Package_Package,sal_generated,$(BUILDDIR)/config_$(gb_Side))) - -$(eval $(call gb_Package_set_outdir,sal_generated,$(INSTDIR))) - -$(eval $(call gb_Package_add_file,sal_generated,$(gb_Package_SDKDIRNAME)/include/sal/typesizes.h,config_typesizes.h)) - -# vim: set noet sw=4 ts=4: diff --git a/sal/Package_sal_odk_headers.mk b/sal/Package_sal_odk_headers.mk deleted file mode 100644 index 613eebc9866e..000000000000 --- a/sal/Package_sal_odk_headers.mk +++ /dev/null @@ -1,109 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -# -# 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/. -# - -$(eval $(call gb_Package_Package,sal_odk_headers,$(SRCDIR)/sal/inc)) - -$(eval $(call gb_Package_set_outdir,sal_odk_headers,$(INSTDIR))) - -$(eval $(call gb_Package_add_files,sal_odk_headers,$(gb_Package_SDKDIRNAME)/include/sal,\ - sal/alloca.h \ - sal/ByteBufferWrapper.hxx \ - sal/config.h \ - sal/log.hxx \ - sal/macros.h \ - sal/main.h \ - sal/mathconf.h \ - sal/saldllapi.h \ - sal/types.h \ -)) - -$(eval $(call gb_Package_add_files,sal_odk_headers,$(gb_Package_SDKDIRNAME)/include/sal/detail,\ - sal/detail/log.h \ -)) - -$(eval $(call gb_Package_add_files,sal_odk_headers,$(gb_Package_SDKDIRNAME)/include/rtl,\ - rtl/allocator.hxx \ - rtl/alloc.h \ - rtl/bootstrap.h \ - rtl/bootstrap.hxx \ - rtl/byteseq.h \ - rtl/byteseq.hxx \ - rtl/character.hxx \ - rtl/cipher.h \ - rtl/crc.h \ - rtl/digest.h \ - rtl/instance.hxx \ - rtl/locale.h \ - rtl/logfile.h \ - rtl/logfile.hxx \ - rtl/malformeduriexception.hxx \ - rtl/math.h \ - rtl/math.hxx \ - rtl/process.h \ - rtl/random.h \ - rtl/ref.hxx \ - rtl/strbuf.h \ - rtl/strbuf.hxx \ - rtl/string.h \ - rtl/string.hxx \ - rtl/stringconcat.hxx \ - rtl/stringutils.hxx \ - rtl/tencinfo.h \ - rtl/textcvt.h \ - rtl/textenc.h \ - rtl/unload.h \ - rtl/uri.h \ - rtl/uri.hxx \ - rtl/ustrbuf.h \ - rtl/ustrbuf.hxx \ - rtl/ustring.h \ - rtl/ustring.hxx \ - rtl/uuid.h \ -)) - -$(eval $(call gb_Package_add_files,sal_odk_headers,$(gb_Package_SDKDIRNAME)/include/osl,\ - osl/conditn.h \ - osl/conditn.hxx \ - osl/diagnose.h \ - osl/diagnose.hxx \ - osl/doublecheckedlocking.h \ - osl/endian.h \ - osl/file.h \ - osl/file.hxx \ - osl/getglobalmutex.hxx \ - osl/interlck.h \ - osl/module.h \ - osl/module.hxx \ - osl/mutex.h \ - osl/mutex.hxx \ - osl/nlsupport.h \ - osl/pipe_decl.hxx \ - osl/pipe.h \ - osl/pipe.hxx \ - osl/process.h \ - osl/profile.h \ - osl/profile.hxx \ - osl/security_decl.hxx \ - osl/security.h \ - osl/security.hxx \ - osl/signal.h \ - osl/socket_decl.hxx \ - osl/socket.h \ - osl/socket.hxx \ - osl/thread.h \ - osl/thread.hxx \ - osl/time.h \ - osl/util.h \ -)) - -$(eval $(call gb_Package_add_files,sal_odk_headers,$(gb_Package_SDKDIRNAME)/include/systools/win32,\ - systools/win32/snprintf.h \ -)) - -# vim: set noet sw=4 ts=4: diff --git a/sal/StaticLibrary_salcpprt.mk b/sal/StaticLibrary_salcpprt.mk index 51e76b29c8f0..475139ca3b1f 100644 --- a/sal/StaticLibrary_salcpprt.mk +++ b/sal/StaticLibrary_salcpprt.mk @@ -28,8 +28,6 @@ $(eval $(call gb_StaticLibrary_StaticLibrary,salcpprt)) $(eval $(call gb_StaticLibrary_use_packages,salcpprt,\ - sal_generated \ - sal_odk_headers \ )) $(eval $(call gb_StaticLibrary_add_defs,salcpprt, \ diff --git a/sal/inc/osl/conditn.h b/sal/inc/osl/conditn.h deleted file mode 100644 index 8803ee85f2dd..000000000000 --- a/sal/inc/osl/conditn.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - - -#ifndef _OSL_CONDITION_H_ -#define _OSL_CONDITION_H_ - -#include "sal/config.h" - -#include "osl/time.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void* oslCondition; - -typedef enum { - osl_cond_result_ok, /* successful completion */ - osl_cond_result_error, /* error occurred, check osl_getLastSocketError() for details */ - osl_cond_result_timeout, /* blocking operation timed out */ - osl_cond_result_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslConditionResult; - -/** Creates a condition. - The condition is in the reset-state. - @returns 0 if condition could not be created. -*/ -SAL_DLLPUBLIC oslCondition SAL_CALL osl_createCondition(void); - -/** Free the memory used by the condition. - @param Condition the condition handle. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_destroyCondition(oslCondition Condition); - -/** Sets condition to True => wait() will not block, check() returns True. - NOTE: ALL threads waiting on this condition are unblocked! - @param Condition handle to a created condition. - @return False if system-call failed. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_setCondition(oslCondition Condition); - -/** Sets condition to False => wait() will block, check() returns False - @param Condition handle to a created condition. - @return False if system-call failed. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_resetCondition(oslCondition Condition); - -/** Blocks if condition is not set<BR> - If condition has been destroyed prematurely, wait() will - return with False. - @param Condition handle to a created condition. - @param pTimeout Tiemout value or NULL for infinite waiting - @return False if system-call failed. -*/ -SAL_DLLPUBLIC oslConditionResult SAL_CALL osl_waitCondition(oslCondition Condition, const TimeValue* pTimeout); - -/** Queries the state of the condition without blocking. - @param Condition handle to a created condition. - @return True: condition is set. <BR> - False: condition is not set. <BR> -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_checkCondition(oslCondition Condition); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_CONDITION_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/conditn.hxx b/sal/inc/osl/conditn.hxx deleted file mode 100644 index 449242273a7f..000000000000 --- a/sal/inc/osl/conditn.hxx +++ /dev/null @@ -1,121 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_CONDITN_HXX_ -#define _OSL_CONDITN_HXX_ - -#ifdef __cplusplus - -#include <osl/time.h> - -#include <osl/conditn.h> - - -namespace osl -{ - - class Condition - { - public: - - enum Result - { - result_ok = osl_cond_result_ok, - result_error = osl_cond_result_error, - result_timeout = osl_cond_result_timeout - }; - - /* Create a condition. - */ - Condition() - { - condition = osl_createCondition(); - } - - /* Release the OS-structures and free condition data-structure. - */ - ~Condition() - { - osl_destroyCondition(condition); - } - - /* Release all waiting threads, check returns sal_True. - */ - void set() - { - osl_setCondition(condition); - } - - /* Reset condition to false: wait() will block, check() returns sal_False. - */ - void reset() { - osl_resetCondition(condition); - } - - /** Blocks the calling thread until condition is set. - */ - Result wait(const TimeValue *pTimeout = 0) - { - return (Result) osl_waitCondition(condition, pTimeout); - } - - /** Checks if the condition is set without blocking. - */ - sal_Bool check() - { - return osl_checkCondition(condition); - } - - - private: - oslCondition condition; - - /** The underlying oslCondition has no reference count. - - Since the underlying oslCondition is not a reference counted object, copy - constructed Condition may work on an already destructed oslCondition object. - - */ - Condition(const Condition&); - - /** The underlying oslCondition has no reference count. - - When destructed, the Condition object destroys the undelying oslCondition, - which might cause severe problems in case it's a temporary object. - - */ - Condition(oslCondition condition); - - /** This assignment operator is private for the same reason as - the copy constructor. - */ - Condition& operator= (const Condition&); - - /** This assignment operator is private for the same reason as - the constructor taking a oslCondition argument. - */ - Condition& operator= (oslCondition); - }; - -} - -#endif /* __cplusplus */ -#endif /* _OSL_CONDITN_HXX_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/diagnose.h b/sal/inc/osl/diagnose.h deleted file mode 100644 index b3bfee91ad25..000000000000 --- a/sal/inc/osl/diagnose.h +++ /dev/null @@ -1,204 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - - -#ifndef _OSL_DIAGNOSE_H_ -#define _OSL_DIAGNOSE_H_ - -#include "sal/config.h" - -#include "sal/detail/log.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -/** provides simple diagnostic support - - The facilities provided by this header are deprecated. True assertions - (that detect broken program logic) should use standard assert (which aborts - if an assertion fails, and is controlled by the standard NDEBUG macro). - Logging of warnings (e.g., about malformed input) and traces (e.g., about - steps taken while executing some protocol) should use the facilities - provided by (C++ only) sal/log.hxx. - - Because the assertion macros (OSL_ASSERT, OSL_ENSURE, OSL_FAIL, OSL_PRECOND, - and OSL_POSTCOND) have been used for true assertions as well as for logged - warnings, they map to SAL_WARN instead of standard assert. OSL_TRACE maps - to SAL_INFO. - - The functions defined in this header are not intended to be used directly, - but through defined macros. The macros can be divided into three categories: - assertions, traces and other stuff .-) Their usability depends on the value - of OSL_DEBUG_LEVEL macro: assertions are only active if OSL_DEBUG_LEVEL is 1 - or greater, traces if OSL_DEBUG_LEVEL is 2 or greater. - - Assertions (cond is bool, msg is char*): - OSL_ASSERT(cond) - If cond is false, reports an error. - - OSL_ENSURE(cond, msg) - If cond is false, reports an error with message msg. - - OSL_FAIL(msg) - Reports an error with message msg unconditionally. - - OSL_PRECOND(cond, msg) - OSL_POSTCOND(cond, msg) - These two are functionally equivalent to OSL_ENSURE(cond, msg). They are - intended to be used for checking pre- and postconditions of functions. - - Traces: - OSL_TRACE(fmt, args...) - Prints trace message. The arguments have the same meaning as the - arguments of printf. - - Other: - OSL_VERIFY(expr) - Evaluates the expression and if it is false, reports an error. The - expression is evaluated once without regard of the value of - OSL_DEBUG_LEVEL. - - Example: - - void extractBool(Any const& rAny, bool& rBool) - { - OSL_VERIFY(rAny >>= rBool); - } - - OSL_DEBUG_ONLY(expr) - */ - -#if !defined OSL_DEBUG_LEVEL -#define OSL_DEBUG_LEVEL 0 -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* ////////////////////////////////////////////////////////////////////////// - Diagnostic support -*/ - -SAL_DLLPUBLIC void SAL_CALL osl_breakDebug(void); -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_assertFailedLine(const sal_Char* pszFileName, sal_Int32 nLine, const sal_Char* pszMessage); -SAL_DLLPUBLIC void SAL_CALL osl_trace(const sal_Char* pszFormat, ...); -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_reportError(sal_uInt32 nType, const sal_Char* pszErrorMessage); - -/* - For message delivery -*/ - -/** a message delivery function which receives a pre-formatted message string -*/ -typedef void (SAL_CALL *pfunc_osl_printDebugMessage)( const sal_Char * pszMessage ); - -/** a message delivery function which receives detailed information about where the message was triggered -*/ -typedef void (SAL_CALL *pfunc_osl_printDetailedDebugMessage)( const sal_Char * pszFileName, sal_Int32 nLine, const sal_Char* pszMessage ); - -/** sets a message delivery function - - The function set here is ignored if a function for detailed message information - (pfunc_osl_printDetailedDebugMessage) has been set. - - The given message handler must be able to cope with a null message. -*/ -SAL_DLLPUBLIC pfunc_osl_printDebugMessage SAL_CALL osl_setDebugMessageFunc( pfunc_osl_printDebugMessage pNewFunc ); - -/** sets a delivery function for detailed message information. - - The given message handler must be able to cope with a null message. -*/ -SAL_DLLPUBLIC pfunc_osl_printDetailedDebugMessage SAL_CALL osl_setDetailedDebugMessageFunc( pfunc_osl_printDetailedDebugMessage pNewFunc ); - -#ifdef __cplusplus -} -#endif - -#define OSL_THIS_FILE __FILE__ - -/* the macro OSL_LOG_PREFIX is intended to be an office internal macro for now - - it is deprecated and superseded by (C++ only) SAL_WHERE -*/ -#define OSL_LOG_PREFIX SAL_DETAIL_WHERE - -#define OSL_DEBUG_ONLY(s) _OSL_DEBUG_ONLY(s) - -#define OSL_TRACE(...) \ - SAL_DETAIL_INFO_IF_FORMAT(OSL_DEBUG_LEVEL > 0, "legacy.osl", __VA_ARGS__) - -#if OSL_DEBUG_LEVEL > 0 -#define OSL_ASSERT(c) \ - SAL_DETAIL_WARN_IF_FORMAT(!(c), "legacy.osl", "OSL_ASSERT: %s", #c) -#define OSL_ENSURE(c, m) SAL_DETAIL_WARN_IF_FORMAT(!(c), "legacy.osl", "%s", m) -#define OSL_FAIL(m) SAL_DETAIL_WARN_IF_FORMAT(sal_True, "legacy.osl", "%s", m) -#else -#define OSL_ASSERT(c) ((void) 0) -#define OSL_ENSURE(c, m) ((void) 0) -#define OSL_FAIL(m) ((void) 0) -#endif - -#define OSL_VERIFY(c) do { if (!(c)) OSL_ASSERT(0); } while (0) -#define OSL_PRECOND(c, m) OSL_ENSURE(c, m) -#define OSL_POSTCOND(c, m) OSL_ENSURE(c, m) - - -#ifdef __cplusplus -#define _OSL_GLOBAL :: -#else -#define _OSL_GLOBAL -#endif /* __cplusplus */ - -#if OSL_DEBUG_LEVEL > 0 - -#define _OSL_DEBUG_ONLY(f) (f) - -#else - -#define _OSL_DEBUG_ONLY(f) ((void)0) - -#endif /* OSL_DEBUG_LEVEL */ - -/* the macro OSL_THIS_FUNC is intended to be an office internal macro for now */ -/* copied from boost/current_function.hpp to make it usable from C - * sources as well - * - * Copyright (c) 2002 Peter Dimov and Multi Media Ltd. - * - * Distributed under the Boost Software License, Version 1.0. (See - * accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) */ -#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) -#define OSL_THIS_FUNC __PRETTY_FUNCTION__ -#elif defined(__DMC__) && (__DMC__ >= 0x810) -#define OSL_THIS_FUNC __PRETTY_FUNCTION__ -#elif defined(__FUNCSIG__) -#define OSL_THIS_FUNC __FUNCSIG__ -#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500)) -#define OSL_THIS_FUNC __FUNCTION__ -#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) -#define OSL_THIS_FUNC __func__ -#else -#define OSL_THIS_FUNC "" -#endif - -#endif /* _OSL_DIAGNOSE_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/diagnose.hxx b/sal/inc/osl/diagnose.hxx deleted file mode 100644 index bbf1fa7231c4..000000000000 --- a/sal/inc/osl/diagnose.hxx +++ /dev/null @@ -1,209 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef OSL_DIAGNOSE_HXX_INCLUDED -#define OSL_DIAGNOSE_HXX_INCLUDED - -#include "sal/config.h" - -#include <functional> -#include <typeinfo> - -#ifndef HAVE_CXX0X -#define BOOST_NO_0X_HDR_TYPEINDEX -#endif -#include "boost/unordered_set.hpp" -#include "osl/diagnose.h" -#include "osl/interlck.h" -#include "osl/mutex.hxx" -#include "rtl/allocator.hxx" -#include "rtl/instance.hxx" -#include "sal/log.hxx" -#include "sal/saldllapi.h" -#include "sal/types.h" - -/// @cond INTERNAL - -namespace osl { -namespace detail { - -struct ObjectRegistryData; - -} // namespace detail -} // namespace osl - -extern "C" { - -SAL_DLLPUBLIC bool SAL_CALL osl_detail_ObjectRegistry_storeAddresses( - char const* pName ) - SAL_THROW_EXTERN_C(); - -SAL_DLLPUBLIC bool SAL_CALL osl_detail_ObjectRegistry_checkObjectCount( - ::osl::detail::ObjectRegistryData const& rData, ::std::size_t nExpected ) - SAL_THROW_EXTERN_C(); - -SAL_DLLPUBLIC void SAL_CALL osl_detail_ObjectRegistry_registerObject( - ::osl::detail::ObjectRegistryData & rData, void const* pObj ) - SAL_THROW_EXTERN_C(); - -SAL_DLLPUBLIC void SAL_CALL osl_detail_ObjectRegistry_revokeObject( - ::osl::detail::ObjectRegistryData & rData, void const* pObj ) - SAL_THROW_EXTERN_C(); - -// These functions presumably should not be extern "C", but changing -// that would break binary compatibility. -#ifdef __clang__ -#pragma clang diagnostic push -// Guard against slightly older clang versions that don't have -// -Wreturn-type-c-linkage... -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wreturn-type-c-linkage" -#endif - -SAL_DLLPUBLIC ::osl::Mutex & SAL_CALL osl_detail_ObjectRegistry_getMutex() - SAL_THROW_EXTERN_C(); - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -} // extern "C" - -namespace osl { - -namespace detail { - -struct VoidPtrHash : ::std::unary_function<void const*, ::std::size_t> { - ::std::size_t operator()( void const* p ) const { - ::std::size_t const d = static_cast< ::std::size_t >( - reinterpret_cast< ::std::ptrdiff_t >(p) ); - return d + (d >> 3); - } -}; - -typedef ::boost::unordered_set<void const*, VoidPtrHash, ::std::equal_to<void const*>, - ::rtl::Allocator<void const*> > VoidPointerSet; - -struct ObjectRegistryData { - ObjectRegistryData( ::std::type_info const& rTypeInfo ) - : m_pName(rTypeInfo.name()), m_nCount(0), m_addresses(), - m_bStoreAddresses(osl_detail_ObjectRegistry_storeAddresses(m_pName)){} - - char const* const m_pName; - oslInterlockedCount m_nCount; - VoidPointerSet m_addresses; - bool const m_bStoreAddresses; -}; - -template <typename T> -class ObjectRegistry -{ -public: - ObjectRegistry() : m_data( typeid(T) ) {} - ~ObjectRegistry() { checkObjectCount(0); } - - bool checkObjectCount( ::std::size_t nExpected ) const { - bool const bRet = osl_detail_ObjectRegistry_checkObjectCount( - m_data, nExpected ); - if (!bRet && m_data.m_bStoreAddresses) { - MutexGuard const guard( osl_detail_ObjectRegistry_getMutex() ); - // following loop is for debugging purposes, iterating over map: - VoidPointerSet::const_iterator iPos(m_data.m_addresses.begin()); - VoidPointerSet::const_iterator const iEnd(m_data.m_addresses.end()); - for ( ; iPos != iEnd; ++iPos ) { - SAL_WARN_IF( *iPos == 0, "sal.debug", "null pointer" ); - } - } - return bRet; - } - - void registerObject( void const* pObj ) { - osl_detail_ObjectRegistry_registerObject(m_data, pObj); - } - - void revokeObject( void const* pObj ) { - osl_detail_ObjectRegistry_revokeObject(m_data, pObj); - } - -private: - // not impl: - ObjectRegistry( ObjectRegistry const& ); - ObjectRegistry const& operator=( ObjectRegistry const& ); - - ObjectRegistryData m_data; -}; - -} // namespace detail - -/** Helper class which indicates leaking object(s) of a particular class in - non-pro builds; use e.g. - - <pre> - class MyClass : private osl::DebugBase<MyClass> {...}; - </pre> - - Using the environment variable - - OSL_DEBUGBASE_STORE_ADDRESSES=MyClass;YourClass;... - - you can specify a ';'-separated list of strings matching to class names - (or "all" for all classes), for which DebugBase stores addresses to created - objects instead of just counting them. This enables you to iterate over - leaking objects in your debugger. - - @tparam InheritingClassT binds the template instance to that class - @attention Use at own risk. - For now this is just public (yet unpublished) API and may change - in the future! -*/ -template <typename InheritingClassT> -class DebugBase -{ -public: -#if OSL_DEBUG_LEVEL <= 0 - static bool checkObjectCount( ::std::size_t = 0 ) { return true; } -#else // OSL_DEBUG_LEVEL > 0 - /** @return whether the expected number of objects is alive, - else this function SAL_WARNs - */ - static bool checkObjectCount( ::std::size_t nExpected = 0 ) { - return StaticObjectRegistry::get().checkObjectCount(nExpected); - } - -protected: - DebugBase() { - StaticObjectRegistry::get().registerObject( this ); - } - ~DebugBase() { - StaticObjectRegistry::get().revokeObject( this ); - } - -private: - struct StaticObjectRegistry - : ::rtl::Static<detail::ObjectRegistry<InheritingClassT>, - StaticObjectRegistry> {}; -#endif -}; - -} // namespace osl - -/// @endcond - -#endif // ! defined(OSL_DIAGNOSE_HXX_INCLUDED) - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/doublecheckedlocking.h b/sal/inc/osl/doublecheckedlocking.h deleted file mode 100644 index 64b07d46cd6c..000000000000 --- a/sal/inc/osl/doublecheckedlocking.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_OSL_DOUBLECHECKEDLOCKING_H -#define INCLUDED_OSL_DOUBLECHECKEDLOCKING_H - -#if defined __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** A platform specific macro needed to make double-checked locking work. - - See - <http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html> - for a description of double-checked locking, why it is broken, and how it - can be fixed. On platforms where it is necessary, this macro will expand - to some memory barrier instruction. On many platforms, double-checked - locking works as it is, though, so on those platforms this macro will be - empty. This is a macro instead of a (C++ inline) function to allow for - maximum performance in both C and C++. - - If possible, use the rtl_Instance template instead of explicitly spelling - out the double-checked locking pattern. There are few cases where you - will have to spell it out explicitly (e.g., the logic of a certain - instance of the pattern is too complex to be mapped to the template, or - some compiler refuses to compile a template instantiation due to internal - compiler errors), though, and you should always call this macro at the - right places then: - - static T * pInstance = 0; - - T * p = pInstance; - if (!p) - { - Guard aGuard(aMutex); - p = pInstance; - if (!p) - { - p = ...; - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - pInstance = p; - } - } - else - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - return p; - - One extra advantage of this macro is that it makes it easier to find all - places where double-checked locking is used. - */ -#define OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER() /* empty */ - -#if defined __cplusplus -} -#endif /* __cplusplus */ - -#endif /* INCLUDED_OSL_DOUBLECHECKEDLOCKING_H */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/endian.h b/sal/inc/osl/endian.h deleted file mode 100644 index 82ec1eaca7b1..000000000000 --- a/sal/inc/osl/endian.h +++ /dev/null @@ -1,226 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_ENDIAN_H_ -#define _OSL_ENDIAN_H_ - -#include <sal/types.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/** Determine the platform byte order as _BIG_ENDIAN, _LITTLE_ENDIAN, ... - */ -#ifdef _WIN32 -# if defined(_M_IX86) -# define _LITTLE_ENDIAN -# elif defined(_M_AMD64) -# define _LITTLE_ENDIAN -# elif defined(_M_MRX000) -# define _LITTLE_ENDIAN -# elif defined(_M_ALPHA) -# define _LITTLE_ENDIAN -# elif defined(_M_PPC) -# define _LITTLE_ENDIAN -# endif -#endif - -#ifdef LINUX -# include <endian.h> -# if __BYTE_ORDER == __LITTLE_ENDIAN -# ifndef _LITTLE_ENDIAN -# define _LITTLE_ENDIAN -# endif -# elif __BYTE_ORDER == __BIG_ENDIAN -# ifndef _BIG_ENDIAN -# define _BIG_ENDIAN -# endif -# endif -#endif - -#ifdef ANDROID -# include <endian.h> -# if __BYTE_ORDER == __LITTLE_ENDIAN -# ifndef _LITTLE_ENDIAN -# define _LITTLE_ENDIAN -# endif -# elif __BYTE_ORDER == __BIG_ENDIAN -# ifndef _BIG_ENDIAN -# define _BIG_ENDIAN -# endif -# endif -#endif - -#ifdef NETBSD -# include <machine/endian.h> -# if BYTE_ORDER == LITTLE_ENDIAN -# undef _BIG_ENDIAN -# elif BYTE_ORDER == BIG_ENDIAN -# undef _LITTLE_ENDIAN -# endif -#endif - -#ifdef FREEBSD -# include <sys/param.h> -# include <machine/endian.h> -#if __FreeBSD_version < 500000 -# if BYTE_ORDER == LITTLE_ENDIAN -# define _LITTLE_ENDIAN -# elif BYTE_ORDER == BIG_ENDIAN -# define _BIG_ENDIAN -# endif -#endif -#endif - -#ifdef AIX -# include <sys/machine.h> -# if BYTE_ORDER == LITTLE_ENDIAN -# ifndef _LITTLE_ENDIAN -# define _LITTLE_ENDIAN -# endif -# elif BYTE_ORDER == BIG_ENDIAN -# ifndef _BIG_ENDIAN -# define _BIG_ENDIAN -# endif -# endif -#endif - -#ifdef SOLARIS -# include <sys/isa_defs.h> -#endif - -#ifdef MACOSX -# include <machine/endian.h> -# if BYTE_ORDER == LITTLE_ENDIAN -# ifndef _LITTLE_ENDIAN -# define _LITTLE_ENDIAN -# endif -# elif BYTE_ORDER == BIG_ENDIAN -# ifndef _BIG_ENDIAN -# define _BIG_ENDIAN -# endif -# endif -#endif - -#ifdef IOS -# include <machine/endian.h> -# if BYTE_ORDER == LITTLE_ENDIAN -# ifndef _LITTLE_ENDIAN -# define _LITTLE_ENDIAN -# endif -# elif BYTE_ORDER == BIG_ENDIAN -# ifndef _BIG_ENDIAN -# define _BIG_ENDIAN -# endif -# endif -#endif - -/** Check supported platform. - */ -#if !defined(_WIN32) && \ - !defined(LINUX) && !defined(NETBSD) && \ - !defined(AIX) && !defined(OPENBSD) && \ - !defined(SOLARIS) && !defined(MACOSX) && !defined(FREEBSD) && \ - !defined(DRAGONFLY) && \ - !defined(IOS) && !defined(ANDROID) -# error "Target platform not specified !" -#endif - - -/** Define the determined byte order as OSL_BIGENDIAN or OSL_LITENDIAN. - */ -#if defined _LITTLE_ENDIAN -# define OSL_LITENDIAN -#elif defined _BIG_ENDIAN -# define OSL_BIGENDIAN -#else -# error undetermined endianess -#endif - - -/** Define macros for byte order manipulation. - */ -#ifndef OSL_MAKEBYTE -# define OSL_MAKEBYTE(nl, nh) ((sal_uInt8)(((nl) & 0x0F) | (((nh) & 0x0F) << 4))) -#endif -#ifndef OSL_LONIBBLE -# define OSL_LONIBBLE(b) ((sal_uInt8)((b) & 0x0F)) -#endif -#ifndef OSL_HINIBBLE -# define OSL_HINIBBLE(b) ((sal_uInt8)(((b) >> 4) & 0x0F)) -#endif - -#ifndef OSL_MAKEWORD -# define OSL_MAKEWORD(bl, bh) ((sal_uInt16)((bl) & 0xFF) | (((sal_uInt16)(bh) & 0xFF) << 8)) -#endif -#ifndef OSL_LOBYTE -# define OSL_LOBYTE(w) ((sal_uInt8)((sal_uInt16)(w) & 0xFF)) -#endif -#ifndef OSL_HIBYTE -# define OSL_HIBYTE(w) ((sal_uInt8)(((sal_uInt16)(w) >> 8) & 0xFF)) -#endif - -#ifndef OSL_MAKEDWORD -# define OSL_MAKEDWORD(wl, wh) ((sal_uInt32)((wl) & 0xFFFF) | (((sal_uInt32)(wh) & 0xFFFF) << 16)) -#endif -#ifndef OSL_LOWORD -# define OSL_LOWORD(d) ((sal_uInt16)((sal_uInt32)(d) & 0xFFFF)) -#endif -#ifndef OSL_HIWORD -# define OSL_HIWORD(d) ((sal_uInt16)(((sal_uInt32)(d) >> 16) & 0xFFFF)) -#endif - - -/** Define macros for swapping between host and network byte order. - */ -#ifdef OSL_BIGENDIAN -#ifndef OSL_NETWORD -# define OSL_NETWORD(w) (sal_uInt16)(w) -#endif -#ifndef OSL_NETDWORD -# define OSL_NETDWORD(d) (sal_uInt32)(d) -#endif -#else /* OSL_LITENDIAN */ -#ifndef OSL_NETWORD -# define OSL_NETWORD(w) OSL_MAKEWORD(OSL_HIBYTE(w),OSL_LOBYTE(w)) -#endif -#ifndef OSL_NETDWORD -# define OSL_NETDWORD(d) OSL_MAKEDWORD(OSL_NETWORD(OSL_HIWORD(d)),OSL_NETWORD(OSL_LOWORD(d))) -#endif -#endif /* OSL_BIGENDIAN */ - - -/** Define macros for swapping between byte orders. - */ -#ifndef OSL_SWAPWORD -# define OSL_SWAPWORD(w) OSL_MAKEWORD(OSL_HIBYTE(w),OSL_LOBYTE(w)) -#endif -#ifndef OSL_SWAPDWORD -# define OSL_SWAPDWORD(d) OSL_MAKEDWORD(OSL_SWAPWORD(OSL_HIWORD(d)),OSL_SWAPWORD(OSL_LOWORD(d))) -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /*_OSL_ENDIAN_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/file.h b/sal/inc/osl/file.h deleted file mode 100644 index e8277e21ebc3..000000000000 --- a/sal/inc/osl/file.h +++ /dev/null @@ -1,1639 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_FILE_H_ -#define _OSL_FILE_H_ - -#include "sal/config.h" - -#include "osl/time.h" -#include "rtl/ustring.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @file - -Main goals and usage hints - -The main intentention of this interface is to provide an universal portable and -high performance access to file system issues on any operating system.<p> - -There are a few main goals:<p> - -1.The path specifications always has to be absolut. Any usage of relative path -specifications is forbidden. Exceptions are <code>osl_getSystemPathFromFileURL</code>, -<code>osl_getFileURLFromSystemPath</code> and <code>osl_getAbsoluteFileURL</code>. Most operating systems -provide a "Current Directory" per process. This is the reason why relative path -specifications can cause problems in multithreading environments.<p> - -2.Proprietary notations of file paths are not supported. Every path notation -must the file URL specification. File URLs must be encoded in UTF8 and -after that escaped. Although the URL parameter is a unicode string, the must -contain only ASCII characters<p> - -3.The caller cannot get any information whether a file system is case sensitive, -case preserving or not. The operating system implementation itself should -determine if it can map case-insensitive paths. The case correct notation of -a filename or file path is part of the "File Info". This case correct name -can be used as a unique key if neccessary.<p> - -4. Obtaining information about files or volumes is controlled by a -bitmask which specifies which fields are of interest. Due to performance -issues it is not recommended to obtain information which is not needed. -But if the operating system provides more information anyway the -implementation can set more fields on output as were requested. It is in the -responsibility of the caller to decide if he uses this additional information -or not. But he should do so to prevent further unnecessary calls if the information -is already there.<br> - -The input bitmask supports a flag <code>osl_FileStatus_Mask_Validate</code> which -can be used to force retrieving uncached validated information. Setting this flag -when calling <code>osl_getFileStatus</code> in combination with no other flag is -a synonym for a "FileExists". This should only be done when processing a single file -(f.e. before opening) and NEVER during enumeration of directory contents on any step -of information processing. This would change the runtime behaviour from O(n) to -O(n*n/2) on nearly every file system.<br> -On Windows NT reading the contents of an directory with 7000 entries and -getting full information about every file only takes 0.6 seconds. Specifying the -flag <code>osl_FileStatus_Mask_Validate</code> for each entry will increase the -time to 180 seconds (!!!). - -*/ - - - -/* Error codes according to errno */ - -typedef enum { - osl_File_E_None, - osl_File_E_PERM, - osl_File_E_NOENT, - osl_File_E_SRCH, - osl_File_E_INTR, - osl_File_E_IO, - osl_File_E_NXIO, - osl_File_E_2BIG, - osl_File_E_NOEXEC, - osl_File_E_BADF, - osl_File_E_CHILD, - osl_File_E_AGAIN, - osl_File_E_NOMEM, - osl_File_E_ACCES, - osl_File_E_FAULT, - osl_File_E_BUSY, - osl_File_E_EXIST, - osl_File_E_XDEV, - osl_File_E_NODEV, - osl_File_E_NOTDIR, - osl_File_E_ISDIR, - osl_File_E_INVAL, - osl_File_E_NFILE, - osl_File_E_MFILE, - osl_File_E_NOTTY, - osl_File_E_FBIG, - osl_File_E_NOSPC, - osl_File_E_SPIPE, - osl_File_E_ROFS, - osl_File_E_MLINK, - osl_File_E_PIPE, - osl_File_E_DOM, - osl_File_E_RANGE, - osl_File_E_DEADLK, - osl_File_E_NAMETOOLONG, - osl_File_E_NOLCK, - osl_File_E_NOSYS, - osl_File_E_NOTEMPTY, - osl_File_E_LOOP, - osl_File_E_ILSEQ, - osl_File_E_NOLINK, - osl_File_E_MULTIHOP, - osl_File_E_USERS, - osl_File_E_OVERFLOW, - osl_File_E_NOTREADY, - osl_File_E_invalidError, /* unmapped error: always last entry in enum! */ - osl_File_E_TIMEDOUT, - osl_File_E_NETWORK, - osl_File_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslFileError; - -typedef void *oslDirectory; -typedef void *oslDirectoryItem; - - -/** Open a directory for enumerating its contents. - - @param pustrDirectoryURL [in] - The full qualified URL of the directory. - - @param pDirectory [out] - On success it receives a handle used for subsequent calls by osl_getNextDirectoryItem(). - The handle has to be released by a call to osl_closeDirectory(). - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOENT the specified path doesn't exist<br> - osl_File_E_NOTDIR the specified path is not an directory <br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_ACCES permission denied<br> - osl_File_E_MFILE too many open files used by the process<br> - osl_File_E_NFILE too many open files in the system<br> - osl_File_E_NAMETOOLONG File name too long<br> - osl_File_E_LOOP Too many symbolic links encountered<p> - - @see osl_getNextDirectoryItem() - @see osl_closeDirectory() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_openDirectory( - rtl_uString *pustrDirectoryURL, oslDirectory *pDirectory); - - -/** Retrieve the next item of a previously opened directory. - - Retrieves the next item of a previously opened directory. - All handles have an initial refcount of 1. - - @param Directory [in] - A directory handle received from a previous call to osl_openDirectory(). - - @param pItem [out] - On success it receives a handle that can be used for subsequent calls to osl_getFileStatus(). - The handle has to be released by a call to osl_releaseDirectoryItem(). - - @param uHint [in] - With this parameter the caller can tell the implementation that (s)he - is going to call this function uHint times afterwards. This enables the implementation to - get the information for more than one file and cache it until the next calls. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_NOENT no more entries in this directory<br> - osl_File_E_BADF invalid oslDirectory parameter<br> - osl_File_E_OVERFLOW the value too large for defined data type - - @see osl_releaseDirectoryItem() - @see osl_acquireDirectoryItem() - @see osl_getDirectoryItem() - @see osl_getFileStatus() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getNextDirectoryItem( - oslDirectory Directory, - oslDirectoryItem *pItem, - sal_uInt32 uHint - ); - - -/** Release a directory handle. - - @param Directory [in] - A handle received by a call to osl_openDirectory(). - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOMEM not enough memory for allocating structures<br> - osl_File_E_BADF invalid oslDirectory parameter<br> - osl_File_E_INTR the function call was interrupted<p> - - @see osl_openDirectory() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_closeDirectory( - oslDirectory Directory); - - -/** Retrieve a single directory item. - - Retrieves a single directory item. The returned handle has an initial refcount of 1. - Due to performance issues it is not recommended to use this function while - enumerating the contents of a directory. In this case use osl_getNextDirectoryItem() instead. - - @param pustrFileURL [in] - An absolute file URL. - - @param pItem [out] - On success it receives a handle which can be used for subsequent calls to osl_getFileStatus(). - The handle has to be released by a call to osl_releaseDirectoryItem(). - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_ACCES permission denied<br> - osl_File_E_MFILE too many open files used by the process<br> - osl_File_E_NFILE too many open files in the system<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_LOOP too many symbolic links encountered<br> - osl_File_E_NAMETOOLONG the file name is too long<br> - osl_File_E_NOTDIR a component of the path prefix of path is not a directory<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_MULTIHOP multihop attempted<br> - osl_File_E_NOLINK link has been severed<br> - osl_File_E_FAULT bad address<br> - osl_File_E_INTR the function call was interrupted<p> - - @see osl_releaseDirectoryItem() - @see osl_acquireDirectoryItem() - @see osl_getFileStatus() - @see osl_getNextDirectoryItem() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getDirectoryItem( - rtl_uString *pustrFileURL, - oslDirectoryItem *pItem - ); - - -/** Increase the refcount of a directory item handle. - - The caller responsible for releasing the directory item handle using osl_releaseDirectoryItem(). - - @param Item [in] - A handle received by a call to osl_getDirectoryItem() or osl_getNextDirectoryItem(). - - @return - osl_File_E_None on success<br> - osl_File_E_NOMEM not enough memory for allocating structures<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - - @see osl_getDirectoryItem() - @see osl_getNextDirectoryItem() - @see osl_releaseDirectoryItem() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_acquireDirectoryItem( - oslDirectoryItem Item ); - - -/** Decrease the refcount of a directory item handle. - - Decreases the refcount of a directory item handle. - If the refcount reaches 0 the data associated with - this directory item handle will be released. - - @param Item [in] - A handle received by a call to osl_getDirectoryItem() or osl_getNextDirectoryItem(). - - @return - osl_File_E_None on success<br> - osl_File_E_NOMEM not enough memory for allocating structures<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - - @see osl_getDirectoryItem() - @see osl_getNextDirectoryItem() - @see osl_acquireDirectoryItem() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_releaseDirectoryItem( - oslDirectoryItem Item ); - -/** Determine if two directory items point the same underlying file - - The comparison is done first by URL, and then by resolving links to - find the target, and finally by comparing inodes on unix. - - @param pItemA [in] - A directory handle to compare with another handle - - @param pItemB [in] - A directory handle to compare with pItemA - - @return - sal_True: if the items point to an identical resource<br> - sal_False: if the items point to a different resource, or a fatal error occured<br> - - @see osl_getDirectoryItem() - - @since LibreOffice 3.6 -*/ - -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_identicalDirectoryItem( - oslDirectoryItem pItemA, - oslDirectoryItem pItemB ); - -/* File types */ - -typedef enum { - osl_File_Type_Directory, - osl_File_Type_Volume, - osl_File_Type_Regular, - osl_File_Type_Fifo, - osl_File_Type_Socket, - osl_File_Type_Link, - osl_File_Type_Special, - osl_File_Type_Unknown -} oslFileType; - -/* File attributes */ -#define osl_File_Attribute_ReadOnly 0x00000001 -#define osl_File_Attribute_Hidden 0x00000002 -#define osl_File_Attribute_Executable 0x00000010 -#define osl_File_Attribute_GrpWrite 0x00000020 -#define osl_File_Attribute_GrpRead 0x00000040 -#define osl_File_Attribute_GrpExe 0x00000080 -#define osl_File_Attribute_OwnWrite 0x00000100 -#define osl_File_Attribute_OwnRead 0x00000200 -#define osl_File_Attribute_OwnExe 0x00000400 -#define osl_File_Attribute_OthWrite 0x00000800 -#define osl_File_Attribute_OthRead 0x00001000 -#define osl_File_Attribute_OthExe 0x00002000 - -/* Flags specifying which fields to retrieve by osl_getFileStatus */ - -#define osl_FileStatus_Mask_Type 0x00000001 -#define osl_FileStatus_Mask_Attributes 0x00000002 -#define osl_FileStatus_Mask_CreationTime 0x00000010 -#define osl_FileStatus_Mask_AccessTime 0x00000020 -#define osl_FileStatus_Mask_ModifyTime 0x00000040 -#define osl_FileStatus_Mask_FileSize 0x00000080 -#define osl_FileStatus_Mask_FileName 0x00000100 -#define osl_FileStatus_Mask_FileURL 0x00000200 -#define osl_FileStatus_Mask_LinkTargetURL 0x00000400 -#define osl_FileStatus_Mask_All 0x7FFFFFFF -#define osl_FileStatus_Mask_Validate 0x80000000 - - -typedef - -/** Structure containing information about files and directories - - @see osl_getFileStatus() - @see oslFileType -*/ - -struct _oslFileStatus { -/** Must be initialized with the size in bytes of the structure before passing it to any function */ - sal_uInt32 uStructSize; -/** Determines which members of the structure contain valid data */ - sal_uInt32 uValidFields; -/** The type of the file (file, directory, volume). */ - oslFileType eType; -/** File attributes */ - sal_uInt64 uAttributes; -/** First creation time in nanoseconds since 1/1/1970. Can be the last modify time depending on - platform or file system. */ - TimeValue aCreationTime; -/** Last access time in nanoseconds since 1/1/1970. Can be the last modify time depending on - platform or file system. */ - TimeValue aAccessTime; -/** Last modify time in nanoseconds since 1/1/1970. */ - TimeValue aModifyTime; -/** Size in bytes of the file. Zero for directories and volumes. */ - sal_uInt64 uFileSize; -/** Case correct name of the file. Should be set to zero before calling <code>osl_getFileStatus</code> - and released after usage. */ - rtl_uString *ustrFileName; -/** Full URL of the file. Should be set to zero before calling <code>osl_getFileStatus</code> - and released after usage. */ - rtl_uString *ustrFileURL; -/** Full URL of the target file if the file itself is a link. - Should be set to zero before calling <code>osl_getFileStatus</code> - and released after usage. */ - rtl_uString *ustrLinkTargetURL; -} oslFileStatus; - - -/** Retrieve information about a single file or directory. - - @param Item [in] - A handle received by a previous call to osl_getDirectoryItem() or osl_getNextDirectoryItem(). - - @param pStatus [in|out] - Points to a structure which receives the information of the file or directory - represented by the handle Item. The member uStructSize has to be initialized to - sizeof(oslFileStatus) before calling this function. - - @param uFieldMask [in] - Specifies which fields of the structure pointed to by pStatus are of interest to the caller. - - @return - osl_File_E_None on success<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_LOOP too many symbolic links encountered<br> - osl_File_E_ACCES permission denied<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_NAMETOOLONG file name too long<br> - osl_File_E_BADF invalid oslDirectoryItem parameter<br> - osl_File_E_FAULT bad address<br> - osl_File_E_OVERFLOW value too large for defined data type<br> - osl_File_E_INTR function call was interrupted<br> - osl_File_E_NOLINK link has been severed<br> - osl_File_E_MULTIHOP components of path require hopping to multiple remote machines and the file system does not allow it<br> - osl_File_E_MFILE too many open files used by the process<br> - osl_File_E_NFILE too many open files in the system<br> - osl_File_E_NOSPC no space left on device<br> - osl_File_E_NXIO no such device or address<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_NOSYS function not implemented<p> - - @see osl_getDirectoryItem() - @see osl_getNextDirectoryItem() - @see oslFileStatus -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getFileStatus( - oslDirectoryItem Item, oslFileStatus *pStatus, sal_uInt32 uFieldMask ); - - -typedef void *oslVolumeDeviceHandle; - -/** Release a volume device handle. - - Releases the given oslVolumeDeviceHandle which was acquired by a call to - osl_getVolumeInformation() or osl_acquireVolumeDeviceHandle(). - - @param Handle [in] - An oslVolumeDeviceHandle received by a call to osl_getVolumeInformation(). - - @return - osl_File_E_None on success<br> - - @todo - specify all error codes that may be returned - - @see osl_acquireVolumeDeviceHandle() - @see osl_getVolumeInformation() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_releaseVolumeDeviceHandle( - oslVolumeDeviceHandle Handle ); - -/** Acquire a volume device handle. - - Acquires the given oslVolumeDeviceHandle which was acquired by a call to - osl_getVolumeInformation(). The caller is responsible for releasing the - acquired handle by calling osl_releaseVolumeDeviceHandle(). - - @param Handle [in] - An oslVolumeDeviceHandle received by a call to osl_getVolumeInformation(). - - @return - osl_File_E_None on success<br> - - @todo - specify all error codes that may be returned - - @see osl_getVolumeInformation() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_acquireVolumeDeviceHandle( - oslVolumeDeviceHandle Handle ); - - -/** Get the full qualified URL where a device is mounted to. - - @param Handle [in] - An oslVolumeDeviceHandle received by a call to osl_getVolumeInformation(). - - @param ppustrDirectoryURL [out] - Receives the full qualified URL where the device is mounted to. - - @return - osl_File_E_None on success<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_ACCES permission denied<br> - osl_File_E_NXIO no such device or address<br> - osl_File_E_NODEV no such device<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_FAULT bad address<br> - osl_FilE_E_INTR function call was interrupted<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_MULTIHOP multihop attempted<br> - osl_File_E_NOLINK link has been severed<br> - osl_File_E_EOVERFLOW value too large for defined data type<br> - - @see osl_getVolumeInformation() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getVolumeDeviceMountPath( - oslVolumeDeviceHandle Handle, rtl_uString **ppustrDirectoryURL); - -/* Volume attributes */ - -#define osl_Volume_Attribute_Removeable 0x00000001L -#define osl_Volume_Attribute_Remote 0x00000002L -#define osl_Volume_Attribute_CompactDisc 0x00000004L -#define osl_Volume_Attribute_FixedDisk 0x00000008L -#define osl_Volume_Attribute_RAMDisk 0x00000010L -#define osl_Volume_Attribute_FloppyDisk 0x00000020L - -#define osl_Volume_Attribute_Case_Is_Preserved 0x00000040L -#define osl_Volume_Attribute_Case_Sensitive 0x00000080L - -/* Flags specifying which fields to retrieve by osl_getVolumeInfo */ - -#define osl_VolumeInfo_Mask_Attributes 0x00000001L -#define osl_VolumeInfo_Mask_TotalSpace 0x00000002L -#define osl_VolumeInfo_Mask_UsedSpace 0x00000004L -#define osl_VolumeInfo_Mask_FreeSpace 0x00000008L -#define osl_VolumeInfo_Mask_MaxNameLength 0x00000010L -#define osl_VolumeInfo_Mask_MaxPathLength 0x00000020L -#define osl_VolumeInfo_Mask_FileSystemName 0x00000040L -#define osl_VolumeInfo_Mask_DeviceHandle 0x00000080L -#define osl_VolumeInfo_Mask_FileSystemCaseHandling 0x00000100L - -typedef - -/** Structure containing information about volumes - - @see osl_getVolumeInformation() - @see oslFileType -*/ - -struct _oslVolumeInfo { -/** Must be initialized with the size in bytes of the structure before passing it to any function */ - sal_uInt32 uStructSize; -/** Determines which members of the structure contain valid data */ - sal_uInt32 uValidFields; -/** Attributes of the volume (remote and/or removable) */ - sal_uInt32 uAttributes; -/** Total availiable space on the volume for the current process/user */ - sal_uInt64 uTotalSpace; -/** Used space on the volume for the current process/user */ - sal_uInt64 uUsedSpace; -/** Free space on the volume for the current process/user */ - sal_uInt64 uFreeSpace; -/** Maximum length of file name of a single item */ - sal_uInt32 uMaxNameLength; -/** Maximum length of a full quallified path in system notation */ - sal_uInt32 uMaxPathLength; -/** Points to a string that receives the name of the file system type. String should be set to zero before calling <code>osl_getVolumeInformation</code> - and released after usage. */ - rtl_uString *ustrFileSystemName; -/** Pointer to handle the receives underlying device. Handle should be set to zero before calling <code>osl_getVolumeInformation</code>*/ - oslVolumeDeviceHandle *pDeviceHandle; -} oslVolumeInfo; - - -/** Retrieve information about a volume. - - Retrieves information about a volume. A volume can either be a mount point, a network - resource or a drive depending on Operating System and File System. Before calling this - function osl_getFileStatus() should be called to determine if the type is - osl_file_Type_Volume. - - @param pustrDirectoryURL [in] - Full qualified URL of the volume - - @param pInfo [out] - On success it receives information about the volume. - - @param uFieldMask [in] - Specifies which members of the structure should be filled - - @return - osl_File_E_None on success<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOTDIR not a directory<br> - osl_File_E_NAMETOOLONG file name too long<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_ACCES permission denied<br> - osl_File_E_LOOP too many symbolic links encountered<br> - ols_File_E_FAULT Bad address<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_NOSYS function not implemented<br> - osl_File_E_MULTIHOP multihop attempted<br> - osl_File_E_NOLINK link has been severed<br> - osl_File_E_INTR function call was interrupted<br> - - @see osl_getFileStatus() - @see oslVolumeInfo -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getVolumeInformation( - rtl_uString *pustrDirectoryURL, - oslVolumeInfo *pInfo, - sal_uInt32 uFieldMask ); - -typedef void *oslFileHandle; - -/* Open flags */ - -#define osl_File_OpenFlag_Read 0x00000001L -#define osl_File_OpenFlag_Write 0x00000002L -#define osl_File_OpenFlag_Create 0x00000004L -#define osl_File_OpenFlag_NoLock 0x00000008L -/* larger bit-fields reserved for internal use cf. detail/file.h */ - -/** Open a regular file. - - Open a file. Only regular files can be openend. - - @param pustrFileURL [in] - The full qualified URL of the file to open. - - @param pHandle [out] - On success it receives a handle to the open file. - - @param uFlags [in] - Specifies the open mode. - - On Android, if the file path is below the /assets folder, the file - exists only as a hopefully uncompressed element inside the app - package (.apk), which has been mapped into memory as a whole by - the LibreOffice Android bootstrapping code. So files "opened" from - there aren't actually files in the OS sense. - - @return - osl_File_E_None on success<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NAMETOOLONG pathname was too long<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_ACCES permission denied<br> - osl_File_E_AGAIN a write lock could not be established<br> - osl_File_E_NOTDIR not a directory<br> - osl_File_E_NXIO no such device or address<br> - osl_File_E_NODEV no such device<br> - osl_File_E_ROFS read-only file system<br> - osl_File_E_TXTBSY text file busy<br> - osl_File_E_FAULT bad address<br> - osl_File_E_LOOP too many symbolic links encountered<br> - osl_File_E_NOSPC no space left on device<br> - osl_File_E_ISDIR is a directory<br> - osl_File_E_MFILE too many open files used by the process<br> - osl_File_E_NFILE too many open files in the system<br> - osl_File_E_DQUOT quota exceeded<br> - osl_File_E_EXIST file exists<br> - osl_FilE_E_INTR function call was interrupted<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_MULTIHOP multihop attempted<br> - osl_File_E_NOLINK link has been severed<br> - osl_File_E_EOVERFLOW value too large for defined data type<br> - - @see osl_closeFile() - @see osl_setFilePos() - @see osl_getFilePos() - @see osl_readFile() - @see osl_writeFile() - @see osl_setFileSize() - @see osl_getFileSize() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_openFile( - rtl_uString *pustrFileURL, oslFileHandle *pHandle, sal_uInt32 uFlags ); - -#define osl_Pos_Absolut 1 -#define osl_Pos_Current 2 -#define osl_Pos_End 3 - -/** Set the internal position pointer of an open file. - - @param Handle [in] - Handle to a file received by a previous call to osl_openFile(). - - @param uHow [in] - Distance to move the internal position pointer (from uPos). - - @param uPos [in] - Absolute position from the beginning of the file. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files<br> - - @see osl_openFile() - @see osl_getFilePos() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_setFilePos( - oslFileHandle Handle, sal_uInt32 uHow, sal_Int64 uPos ) SAL_WARN_UNUSED_RESULT; - - -/** Retrieve the current position of the internal pointer of an open file. - - @param Handle [in] - Handle to a file received by a previous call to osl_openFile(). - - @param pPos [out] - On success receives the current position of the file pointer. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files<br> - - @see osl_openFile() - @see osl_setFilePos() - @see osl_readFile() - @see osl_writeFile() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getFilePos( - oslFileHandle Handle, sal_uInt64 *pPos ); - - -/** Set the file size of an open file. - - Sets the file size of an open file. The file can be truncated or enlarged by the function. - The position of the file pointer is not affeced by this function. - - @param Handle [in] - Handle to a file received by a previous call to osl_openFile(). - - @param uSize [in] - New size in bytes. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files<br> - - @see osl_openFile() - @see osl_setFilePos() - @see osl_getFileStatus() - @see osl_getFileSize() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_setFileSize( - oslFileHandle Handle, sal_uInt64 uSize ); - - -/** Get the file size of an open file. - - Gets the file size of an open file. - The position of the file pointer is not affeced by this function. - - @param Handle [in] - Handle to a file received by a previous call to osl_openFile(). - - @param pSize [out] - Current size in bytes. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files<br> - - @see osl_openFile() - @see osl_setFilePos() - @see osl_getFileStatus() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getFileSize( - oslFileHandle Handle, sal_uInt64 *pSize ); - - -/** Map flags. - - @since UDK 3.2.10 - */ -#define osl_File_MapFlag_RandomAccess ((sal_uInt32)(0x1)) - -/** Map flag denoting that the mapped address space will be accessed by the - process soon (and it is advantageous for the operating system to already - start paging in the data). - - @since UDK 3.2.12 - */ -#define osl_File_MapFlag_WillNeed ((sal_uInt32)(0x2)) - -/** Map a shared file into memory. - - Don't know what the "shared" is supposed to mean there? Also, - obviously this API can be used to map *part* of a file into - memory, and different parts can be mapped separately even. - - On Android, if the Handle refers to a file that is actually inside - the app package (.apk zip archive), no new mapping is created, - just a pointer to the file inside the already mapped .apk is - returned. - - @since UDK 3.2.10 - */ -SAL_DLLPUBLIC oslFileError SAL_CALL osl_mapFile ( - oslFileHandle Handle, - void** ppAddr, - sal_uInt64 uLength, - sal_uInt64 uOffset, - sal_uInt32 uFlags -); - - -#ifndef ANDROID - -/** Unmap a shared file from memory. - - Ditto here, why do we need to mention "shared"? - - This function just won't work on Android in general where for - (uncompressed) files inside the .apk, per SDK conventions in the - /assets folder, osl_mapFile() returns a pointer to the file inside - the already by LibreOffice Android-specific bootstrapping code - mmapped .apk archive. We can't go and randomly munmap part of the - .apk archive. So this function is not present on Android. - - @since UDK 3.2.10 - */ -SAL_DLLPUBLIC oslFileError SAL_CALL osl_unmapFile ( - void* pAddr, - sal_uInt64 uLength -); - -#endif - -/** Unmap a file segment from memory. - - Like osl_unmapFile(), but takes also the oslFileHandle argument - passed to osl_mapFile() when creating this mapping. - - On Android, for files below /assets, i.e. located inside the app - archive (.apk), this won't actually unmap anything; all the .apk - stays mapped. - - @since UDK 3.6 - */ -SAL_DLLPUBLIC oslFileError SAL_CALL osl_unmapMappedFile ( - oslFileHandle Handle, - void* pAddr, - sal_uInt64 uLength -); - - -/** Read a number of bytes from a file. - - Reads a number of bytes from a file. The internal file pointer is - increased by the number of bytes read. - - @param Handle [in] - Handle to a file received by a previous call to osl_openFile(). - - @param pBuffer [out] - Points to a buffer which receives data. The buffer must be large enough - to hold uBytesRequested bytes. - - @param uBytesRequested [in] - Number of bytes which should be retrieved. - - @param pBytesRead [out] - On success the number of bytes which have actually been retrieved. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_INTR function call was interrupted<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_ISDIR is a directory<br> - osl_File_E_BADF bad file<br> - osl_File_E_FAULT bad address<br> - osl_File_E_AGAIN operation would block<br> - osl_File_E_NOLINK link has been severed<br> - - @see osl_openFile() - @see osl_writeFile() - @see osl_readLine() - @see osl_setFilePos() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_readFile( - oslFileHandle Handle, void *pBuffer, sal_uInt64 uBytesRequested, sal_uInt64 *pBytesRead ); - - -/** Test if the end of a file is reached. - - @param Handle [in] - Handle to a file received by a previous call to osl_openFile(). - - @param pIsEOF [out] - Points to a variable that receives the end-of-file status. - - @return - osl_File_E_None on success <br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_INTR function call was interrupted<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_ISDIR is a directory<br> - osl_File_E_BADF bad file<br> - osl_File_E_FAULT bad address<br> - osl_File_E_AGAIN operation would block<br> - osl_File_E_NOLINK link has been severed<p> - - @see osl_openFile() - @see osl_readFile() - @see osl_readLine() - @see osl_setFilePos() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_isEndOfFile( - oslFileHandle Handle, sal_Bool *pIsEOF ); - - -/** Write a number of bytes to a file. - - Writes a number of bytes to a file. - The internal file pointer is increased by the number of bytes read. - - @param Handle [in] - Handle to a file received by a previous call to osl_openFile(). - - @param pBuffer [in] - Points to a buffer which contains the data. - - @param uBytesToWrite [in] - Number of bytes which should be written. - - @param pBytesWritten [out] - On success the number of bytes which have actually been written. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_FBIG file too large<br> - osl_File_E_DQUOT quota exceeded<p> - osl_File_E_AGAIN operation would block<br> - osl_File_E_BADF bad file<br> - osl_File_E_FAULT bad address<br> - osl_File_E_INTR function call was interrupted<br> - osl_File_E_IO on I/O errosr<br> - osl_File_E_NOLCK no record locks available<br> - osl_File_E_NOLINK link has been severed<br> - osl_File_E_NOSPC no space left on device<br> - osl_File_E_NXIO no such device or address<br> - - @see osl_openFile() - @see osl_readFile() - @see osl_setFilePos() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_writeFile( - oslFileHandle Handle, const void *pBuffer, sal_uInt64 uBytesToWrite, sal_uInt64 *pBytesWritten ); - -/** Read a number of bytes from a specified offset in a file. - - The current position of the internal file pointer may or may not be changed. - - @since UDK 3.2.10 - */ -SAL_DLLPUBLIC oslFileError SAL_CALL osl_readFileAt( - oslFileHandle Handle, - sal_uInt64 uOffset, - void* pBuffer, - sal_uInt64 uBytesRequested, - sal_uInt64* pBytesRead -); - - -/** Write a number of bytes to a specified offset in a file. - - The current position of the internal file pointer may or may not be changed. - - @since UDK 3.2.10 - */ -SAL_DLLPUBLIC oslFileError SAL_CALL osl_writeFileAt( - oslFileHandle Handle, - sal_uInt64 uOffset, - const void* pBuffer, - sal_uInt64 uBytesToWrite, - sal_uInt64* pBytesWritten -); - - -/** Read a line from a file. - - Reads a line from a file. The new line delimiter is NOT returned! - - @param Handle [in] - Handle to a file received by a previous call to osl_openFile(). - - @param ppSequence [in/out] - A pointer pointer to a sal_Sequence that will hold the line read on success. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_INTR function call was interrupted<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_ISDIR is a directory<br> - osl_File_E_BADF bad file<br> - osl_File_E_FAULT bad address<br> - osl_File_E_AGAIN operation would block<br> - osl_File_E_NOLINK link has been severed<p> - - @see osl_openFile() - @see osl_readFile() - @see osl_writeFile() - @see osl_setFilePos() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_readLine( - oslFileHandle Handle, sal_Sequence** ppSequence ); - -/** Synchronize the memory representation of a file with that on the physical medium. - - The function ensures that all modified data and attributes of the file associated with - the given file handle have been written to the physical medium. - In case the hard disk has a write cache enabled, the data may not really be on - permanent storage when osl_syncFile returns. - - @param Handle - [in] Handle to a file received by a previous call to osl_openFile(). - - @return - <dl> - <dt>osl_File_E_None</dt> - <dd>On success</dd> - <dt>osl_File_E_INVAL</dt> - <dd>The value of the input parameter is invalid</dd> - </dl> - <br><p><strong>In addition to these error codes others may occur as well, for instance:</strong></p><br> - <dl> - <dt>osl_File_E_BADF</dt> - <dd>The file associated with the given file handle is not open for writing</dd> - <dt>osl_File_E_IO</dt> - <dd>An I/O error occurred</dd> - <dt>osl_File_E_NOSPC</dt> - <dd>There is no enough space on the target device</dd> - <dt>osl_File_E_ROFS</dt> - <dd>The file associated with the given file handle is located on a read only file system</dd> - <dt>osl_File_E_TIMEDOUT</dt> - <dd>A remote connection timed out. This may happen when a file is on a remote location</dd> - </dl> - - @see osl_openFile() - @see osl_writeFile() -*/ -SAL_DLLPUBLIC oslFileError SAL_CALL osl_syncFile( oslFileHandle Handle ); - -/** Close an open file. - - @param Handle [in] - Handle to a file received by a previous call to osl_openFile(). - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_BADF Bad file<br> - osl_File_E_INTR function call was interrupted<br> - osl_File_E_NOLINK link has been severed<br> - osl_File_E_NOSPC no space left on device<br> - osl_File_E_IO on I/O errors<br> - - @see osl_openFile() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_closeFile( oslFileHandle Handle ); - - -/** Create a directory. - - @param pustrDirectoryURL [in] - Full qualified URL of the directory to create. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_EXIST file exists<br> - osl_File_E_ACCES permission denied<br> - osl_File_E_NAMETOOLONG file name too long<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_NOTDIR not a directory<br> - osl_File_E_ROFS read-only file system<br> - osl_File_E_NOSPC no space left on device<br> - osl_File_E_DQUOT quota exceeded<br> - osl_File_E_LOOP too many symbolic links encountered<br> - osl_File_E_FAULT bad address<br> - osl_FileE_IO on I/O errors<br> - osl_File_E_MLINK too many links<br> - osl_File_E_MULTIHOP multihop attempted<br> - osl_File_E_NOLINK link has been severed<br> - - @see osl_removeDirectory() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_createDirectory( rtl_uString* pustrDirectoryURL ); - - -/** Remove an empty directory. - - @param pustrDirectoryURL [in] - Full qualified URL of the directory. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_PERM operation not permitted<br> - osl_File_E_ACCES permission denied<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_NOTDIR not a directory<br> - osl_File_E_NOTEMPTY directory not empty<br> - osl_File_E_FAULT bad address<br> - osl_File_E_NAMETOOLONG file name too long<br> - osl_File_E_BUSY device or resource busy<br> - osl_File_E_ROFS read-only file system<br> - osl_File_E_LOOP too many symbolic links encountered<br> - osl_File_E_BUSY device or resource busy<br> - osl_File_E_EXIST file exists<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_MULTIHOP multihop attempted<br> - osl_File_E_NOLINK link has been severed<br> - - @see osl_createDirectory() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_removeDirectory( rtl_uString* pustrDirectoryURL ); - -/** Function pointer representing a function that will be called by osl_createDirectoryPath - if a directory has been created. - - To avoid unpredictable results the callee must not access the directory whose - creation is just notified. - - @param pData - [in] User specified data given in osl_createDirectoryPath. - - @param aDirectoryUrl - [in] The absolute file URL of the directory that was just created by - osl_createDirectoryPath. - - @see osl_createDirectoryPath -*/ -typedef void (SAL_CALL *oslDirectoryCreationCallbackFunc)(void* pData, rtl_uString* aDirectoryUrl); - -/** Create a directory path. - - The osl_createDirectoryPath function creates a specified directory path. - All nonexisting sub directories will be created. - <p><strong>PLEASE NOTE:</strong> You cannot rely on getting the error code - osl_File_E_EXIST for existing directories. Programming against this error - code is in general a strong indication of a wrong usage of osl_createDirectoryPath.</p> - - @param aDirectoryUrl - [in] The absolute file URL of the directory path to create. - A relative file URL will not be accepted. - - @param aDirectoryCreationCallbackFunc - [in] Pointer to a function that will be called synchronously - for each sub directory that was created. The value of this - parameter may be NULL, in this case notifications will not be - sent. - - @param pData - [in] User specified data to be passed to the directory creation - callback function. The value of this parameter may be arbitrary - and will not be interpreted by osl_createDirectoryPath. - - @return - <dl> - <dt>osl_File_E_None</dt> - <dd>On success</dd> - <dt>osl_File_E_INVAL</dt> - <dd>The format of the parameters was not valid</dd> - <dt>osl_File_E_ACCES</dt> - <dd>Permission denied</dd> - <dt>osl_File_E_EXIST</dt> - <dd>The final node of the specified directory path already exist</dd> - <dt>osl_File_E_NAMETOOLONG</dt> - <dd>The name of the specified directory path exceeds the maximum allowed length</dd> - <dt>osl_File_E_NOTDIR</dt> - <dd>A component of the specified directory path already exist as file in any part of the directory path</dd> - <dt>osl_File_E_ROFS</dt> - <dd>Read-only file system</dd> - <dt>osl_File_E_NOSPC</dt> - <dd>No space left on device</dd> - <dt>osl_File_E_DQUOT</dt> - <dd>Quota exceeded</dd> - <dt>osl_File_E_FAULT</dt> - <dd>Bad address</dd> - <dt>osl_File_E_IO</dt> - <dd>I/O error</dd> - <dt>osl_File_E_LOOP</dt> - <dd>Too many symbolic links encountered</dd> - <dt>osl_File_E_NOLINK</dt> - <dd>Link has been severed</dd> - <dt>osl_File_E_invalidError</dt> - <dd>An unknown error occurred</dd> - </dl> - - @see oslDirectoryCreationFunc - @see oslFileError - @see osl_createDirectory -*/ -SAL_DLLPUBLIC oslFileError SAL_CALL osl_createDirectoryPath( - rtl_uString* aDirectoryUrl, - oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc, - void* pData); - -/** Remove a regular file. - - @param pustrFileURL [in] - Full qualified URL of the file to remove. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_ACCES permission denied<br> - osl_File_E_PERM operation not permitted<br> - osl_File_E_NAMETOOLONG file name too long<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_ISDIR is a directory<br> - osl_File_E_ROFS read-only file system<br> - osl_File_E_FAULT bad address<br> - osl_File_E_LOOP too many symbolic links encountered<br> - osl_File_E_IO on I/O errors<br> - osl_File_E_BUSY device or resource busy<br> - osl_File_E_INTR function call was interrupted<br> - osl_File_E_LOOP too many symbolic links encountered<br> - osl_File_E_MULTIHOP multihop attempted<br> - osl_File_E_NOLINK link has been severed<br> - osl_File_E_TXTBSY text file busy<br> - - @see osl_openFile() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_removeFile( - rtl_uString* pustrFileURL ); - - -/** Copy a file to a new destination. - - Copies a file to a new destination. Copies only files not directories. - No assumptions should be made about preserving attributes or file time. - - @param pustrSourceFileURL [in] - Full qualified URL of the source file. - - @param pustrDestFileURL [in] - Full qualified URL of the destination file. A directory is NOT a valid destination file! - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_ACCES permission denied<br> - osl_File_E_PERM operation not permitted<br> - osl_File_E_NAMETOOLONG file name too long<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_ISDIR is a directory<br> - osl_File_E_ROFS read-only file system<p> - - @see osl_moveFile() - @see osl_removeFile() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_copyFile( - rtl_uString* pustrSourceFileURL, rtl_uString *pustrDestFileURL ); - - -/** Move a file or directory to a new destination or renames it. - - Moves a file or directory to a new destination or renames it. - File time and attributes are preserved. - - @param pustrSourceFileURL [in] - Full qualified URL of the source file. - - @param pustrDestFileURL [in] - Full qualified URL of the destination file. An existing directory is NOT a valid destination ! - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_ACCES permission denied<br> - osl_File_E_PERM operation not permitted<br> - osl_File_E_NAMETOOLONG file name too long<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_ROFS read-only file system<br> - - @see osl_copyFile() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_moveFile( - rtl_uString* pustrSourceFileURL, rtl_uString *pustrDestFileURL ); - - -/** Determine a valid unused canonical name for a requested name. - - Determines a valid unused canonical name for a requested name. - Depending on the Operating System and the File System the illegal characters are replaced by valid ones. - If a file or directory with the requested name already exists a new name is generated following - the common rules on the actual Operating System and File System. - - @param pustrRequestedURL [in] - Requested name of a file or directory. - - @param ppustrValidURL [out] - On success receives a name which is unused and valid on the actual Operating System and - File System. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - - @see osl_getFileStatus() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getCanonicalName( - rtl_uString *pustrRequestedURL, rtl_uString **ppustrValidURL); - - -/** Convert a path relative to a given directory into an full qualified file URL. - - Convert a path relative to a given directory into an full qualified file URL. - The function resolves symbolic links if possible and path ellipses, so on success - the resulting absolute path is fully resolved. - - @param pustrBaseDirectoryURL [in] - Base directory URL to which the relative path is related to. - - @param pustrRelativeFileURL [in] - An URL of a file or directory relative to the directory path specified by pustrBaseDirectoryURL - or an absolute path. - If pustrRelativeFileURL denotes an absolute path pustrBaseDirectoryURL will be ignored. - - @param ppustrAbsoluteFileURL [out] - On success it receives the full qualified absoulte file URL. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOMEM not enough memory for allocating structures <br> - osl_File_E_NOTDIR not a directory<br> - osl_File_E_ACCES permission denied<br> - osl_File_E_NOENT no such file or directory<br> - osl_File_E_NAMETOOLONG file name too long<br> - osl_File_E_OVERFLOW value too large for defined data type<br> - osl_File_E_FAULT bad address<br> - osl_File_E_INTR function call was interrupted<br> - osl_File_E_LOOP too many symbolic links encountered<br> - osl_File_E_MULTIHOP multihop attempted<br> - osl_File_E_NOLINK link has been severed<br> - - @see osl_getFileStatus() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getAbsoluteFileURL( - rtl_uString* pustrBaseDirectoryURL, - rtl_uString *pustrRelativeFileURL, - rtl_uString **ppustrAbsoluteFileURL ); - - -/** Convert a system dependend path into a file URL. - - @param pustrSystemPath [in] - A System dependent path of a file or directory. - - @param ppustrFileURL [out] - On success it receives the file URL. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - - @see osl_getSystemPathFromFileURL() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getFileURLFromSystemPath( - rtl_uString *pustrSystemPath, rtl_uString **ppustrFileURL); - - -/** Searche a full qualified system path or a file URL. - - @param pustrFileName [in] - A system dependent path, a file URL, a file or relative directory. - - @param pustrSearchPath [in] - A list of system paths, in which a given file has to be searched. The Notation of a path list is - system dependend, e.g. on UNIX system "/usr/bin:/bin" and on Windows "C:\BIN;C:\BATCH". - These paths are only for the search of a file or a relative path, otherwise it will be ignored. - If pustrSearchPath is NULL or while using the search path the search failed, the function searches for - a matching file in all system directories and in the directories listed in the PATH environment - variable. - The value of an environment variable should be used (e.g. LD_LIBRARY_PATH) if the caller is not - aware of the Operating System and so doesn't know which path list delimiter to use. - - @param ppustrFileURL [out] - On success it receives the full qualified file URL. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOTDIR not a directory<br> - osl_File_E_NOENT no such file or directory not found<br> - - @see osl_getFileURLFromSystemPath() - @see osl_getSystemPathFromFileURL() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_searchFileURL( - rtl_uString *pustrFileName, rtl_uString *pustrSearchPath, rtl_uString **ppustrFileURL ); - - -/** Convert a file URL into a system dependend path. - - @param pustrFileURL [in] - A File URL. - - @param ppustrSystemPath [out] - On success it receives the system path. - - @return - osl_File_E_None on success - osl_File_E_INVAL the format of the parameters was not valid - - @see osl_getFileURLFromSystemPath() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getSystemPathFromFileURL( - rtl_uString *pustrFileURL, rtl_uString **ppustrSystemPath); - - -/** Function pointer representing the function called back from osl_abbreviateSystemPath - - @param ustrText [in] - Text to calculate the width for - - @return - The width of the text specified by ustrText, e.g. it can return the width in pixel - or the width in character count. - - @see osl_abbreviateSystemPath() -*/ - -typedef sal_uInt32 (SAL_CALL *oslCalcTextWidthFunc)( rtl_uString *ustrText ); - - -/** Abbreviate a system notation path. - - @param ustrSystemPath [in] - The full system path to abbreviate - - @param pustrCompacted [out] - Receives the compacted system path on output - - @param pCalcWidth [in] - Function ptr that calculates the width of a string. Can be zero. - - @param uMaxWidth [in] - Maximum width allowed that is retunrned from pCalcWidth. - If pCalcWidth is zero the character count is assumed as width. - - @return - osl_File_E_None on success<br> - - @see oslCalcTextWidthFunc -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_abbreviateSystemPath( - rtl_uString *ustrSystemPath, - rtl_uString **pustrCompacted, - sal_uInt32 uMaxWidth, - oslCalcTextWidthFunc pCalcWidth ); - - -/** Set file attributes. - - @param pustrFileURL [in] - The full qualified file URL. - - @param uAttributes [in] - Attributes of the file to be set. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - - @see osl_getFileStatus() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_setFileAttributes( - rtl_uString *pustrFileURL, sal_uInt64 uAttributes ); - - -/** Set the file time. - - @param pustrFileURL [in] - The full qualified URL of the file. - - @param aCreationTime [in] - Creation time of the given file. - - @param aLastAccessTime [in] - Time of the last access of the given file. - - @param aLastWriteTime [in] - Time of the last modifying of the given file. - - @return - osl_File_E_None on success<br> - osl_File_E_INVAL the format of the parameters was not valid<br> - osl_File_E_NOENT no such file or directory not found<br> - - @see osl_getFileStatus() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_setFileTime( - rtl_uString *pustrFileURL, - const TimeValue *aCreationTime, - const TimeValue *aLastAccessTime, - const TimeValue *aLastWriteTime); - - -/** Retrieves the file URL of the system's temporary directory path - - @param[out] pustrTempDirURL - On success receives the URL of system's temporary directory path. - - @return - osl_File_E_None on success - osl_File_E_NOENT no such file or directory not found -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_getTempDirURL( - rtl_uString **pustrTempDirURL ); - - -/** Creates a temporary file in the directory provided by the caller or the - directory returned by osl_getTempDirURL. - - Creates a temporary file in the directory provided by the caller or the - directory returned by osl_getTempDirURL. - Under UNIX Operating Systems the file will be created with read and write - access for the user exclusively. - If the caller requests only a handle to the open file but not the name of - it, the file will be automatically removed on close else the caller is - responsible for removing the file on success. - - Description of the different pHandle, ppustrTempFileURL parameter combinations. - pHandle is 0 and ppustrTempDirURL is 0 - this combination is invalid - pHandle is not 0 and ppustrTempDirURL is 0 - a handle to the open file - will be returned on success and the file will be automatically removed on close. - pHandle is 0 and ppustrTempDirURL is not 0 - the name of the file will be returned, - the caller is responsible for opening, closing and removing the file. - pHandle is not 0 and ppustrTempDirURL is not 0 - a handle to the open file as well as - the file name will be returned, the caller is responsible for closing and removing - the file. - - @param pustrDirectoryURL [in] - Specifies the full qualified URL where the temporary file should be created. - If pustrDirectoryURL is 0 the path returned by osl_getTempDirURL will be used. - - @param pHandle [out] - On success receives a handle to the open file. If pHandle is 0 the file will - be closed on return, in this case ppustrTempFileURL must not be 0. - - @param ppustrTempFileURL [out] - On success receives the full qualified URL of the temporary file. - If ppustrTempFileURL is 0 the file will be automatically removed on close, - in this case pHandle must not be 0. - If ppustrTempFileURL is not 0 the caller receives the name of the created - file and is responsible for removing the file, in this case - *ppustrTempFileURL must be 0 or must point to a valid rtl_uString. - - @return - osl_File_E_None on success - osl_File_E_INVAL the format of the parameter is invalid - osl_File_E_NOMEM not enough memory for allocating structures - osl_File_E_ACCES Permission denied - osl_File_E_NOENT No such file or directory - osl_File_E_NOTDIR Not a directory - osl_File_E_ROFS Read-only file system - osl_File_E_NOSPC No space left on device - osl_File_E_DQUOT Quota exceeded - - @see osl_getTempDirURL() -*/ - -SAL_DLLPUBLIC oslFileError SAL_CALL osl_createTempFile( - rtl_uString* pustrDirectoryURL, - oslFileHandle* pHandle, - rtl_uString** ppustrTempFileURL); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_FILE_H_ */ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/file.hxx b/sal/inc/osl/file.hxx deleted file mode 100644 index ee52cd570840..000000000000 --- a/sal/inc/osl/file.hxx +++ /dev/null @@ -1,1979 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_FILE_HXX_ -#define _OSL_FILE_HXX_ - -#include "sal/config.h" - -#include <string.h> - -#include <cassert> - -#include <osl/time.h> -#include <rtl/ustring.hxx> - -#include <osl/file.h> -#include <rtl/byteseq.hxx> - -#include <stdio.h> - -namespace osl -{ - - -// ----------------------------------------------------------------------------- -/** Base class for all File System specific objects. - - @see Directory - @see DirectoryItem - @see File - */ - -class FileBase -{ -public: - - enum RC { - E_None = osl_File_E_None, - E_PERM = osl_File_E_PERM, - E_NOENT = osl_File_E_NOENT, - E_SRCH = osl_File_E_SRCH, - E_INTR = osl_File_E_INTR, - E_IO = osl_File_E_IO, - E_NXIO = osl_File_E_NXIO, - E_2BIG = osl_File_E_2BIG, - E_NOEXEC = osl_File_E_NOEXEC, - E_BADF = osl_File_E_BADF, - E_CHILD = osl_File_E_CHILD, - E_AGAIN = osl_File_E_AGAIN, - E_NOMEM = osl_File_E_NOMEM, - E_ACCES = osl_File_E_ACCES, - E_FAULT = osl_File_E_FAULT, - E_BUSY = osl_File_E_BUSY, - E_EXIST = osl_File_E_EXIST, - E_XDEV = osl_File_E_XDEV, - E_NODEV = osl_File_E_NODEV, - E_NOTDIR = osl_File_E_NOTDIR, - E_ISDIR = osl_File_E_ISDIR, - E_INVAL = osl_File_E_INVAL, - E_NFILE = osl_File_E_NFILE, - E_MFILE = osl_File_E_MFILE, - E_NOTTY = osl_File_E_NOTTY, - E_FBIG = osl_File_E_FBIG, - E_NOSPC = osl_File_E_NOSPC, - E_SPIPE = osl_File_E_SPIPE, - E_ROFS = osl_File_E_ROFS, - E_MLINK = osl_File_E_MLINK, - E_PIPE = osl_File_E_PIPE, - E_DOM = osl_File_E_DOM, - E_RANGE = osl_File_E_RANGE, - E_DEADLK = osl_File_E_DEADLK, - E_NAMETOOLONG = osl_File_E_NAMETOOLONG, - E_NOLCK = osl_File_E_NOLCK, - E_NOSYS = osl_File_E_NOSYS, - E_NOTEMPTY = osl_File_E_NOTEMPTY, - E_LOOP = osl_File_E_LOOP, - E_ILSEQ = osl_File_E_ILSEQ, - E_NOLINK = osl_File_E_NOLINK, - E_MULTIHOP = osl_File_E_MULTIHOP, - E_USERS = osl_File_E_USERS, - E_OVERFLOW = osl_File_E_OVERFLOW, - E_NOTREADY = osl_File_E_NOTREADY, - E_invalidError = osl_File_E_invalidError, /* unmapped error: always last entry in enum! */ - E_TIMEDOUT = osl_File_E_TIMEDOUT, - E_NETWORK = osl_File_E_NETWORK - }; - - -public: - - /** Determine a valid unused canonical name for a requested name. - - Determines a valid unused canonical name for a requested name. - Depending on the Operating System and the File System the illegal characters are replaced by valid ones. - If a file or directory with the requested name already exists a new name is generated following - the common rules on the actual Operating System and File System. - - @param ustrRequestedURL [in] - Requested name of a file or directory. - - @param ustrValidURL [out] - On success receives a name which is unused and valid on the actual Operating System and - File System. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - - @see DirectoryItem::getFileStatus() - */ - - static inline RC getCanonicalName( const ::rtl::OUString& ustrRequestedURL, ::rtl::OUString& ustrValidURL ) - { - return (RC) osl_getCanonicalName( ustrRequestedURL.pData, &ustrValidURL.pData ); - } - - /** Convert a path relative to a given directory into an full qualified file URL. - - Convert a path relative to a given directory into an full qualified file URL. - The function resolves symbolic links if possible and path ellipses, so on success - the resulting absolute path is fully resolved. - - @param ustrBaseDirectoryURL [in] - Base directory URL to which the relative path is related to. - - @param ustrRelativeFileURL [in] - An URL of a file or directory relative to the directory path specified by ustrBaseDirectoryURL - or an absolute path. - If ustrRelativeFileURL denotes an absolute path ustrBaseDirectoryURL will be ignored. - - @param ustrAbsoluteFileURL [out] - On success it receives the full qualified absoulte file URL. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOMEM not enough memory for allocating structures - E_NOTDIR not a directory - E_ACCES permission denied - E_NOENT no such file or directory - E_NAMETOOLONG file name too long - E_OVERFLOW value too large for defined data type - E_FAULT bad address - E_INTR function call was interrupted - E_LOOP too many symbolic links encountered - E_MULTIHOP multihop attempted - E_NOLINK link has been severed - - @see DirectoryItem::getFileStatus() - */ - - static inline RC getAbsoluteFileURL( const ::rtl::OUString& ustrBaseDirectoryURL, const ::rtl::OUString& ustrRelativeFileURL, ::rtl::OUString& ustrAbsoluteFileURL ) - { - return (RC) osl_getAbsoluteFileURL( ustrBaseDirectoryURL.pData, ustrRelativeFileURL.pData, &ustrAbsoluteFileURL.pData ); - } - - /** Convert a file URL into a system dependend path. - - @param ustrFileURL [in] - A File URL. - - @param ustrSystemPath [out] - On success it receives the system path. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - - @see getFileURLFromSystemPath() - */ - - static inline RC getSystemPathFromFileURL( const ::rtl::OUString& ustrFileURL, ::rtl::OUString& ustrSystemPath ) - { - return (RC) osl_getSystemPathFromFileURL( ustrFileURL.pData, &ustrSystemPath.pData ); - } - - /** Convert a system dependend path into a file URL. - - @param ustrSystemPath [in] - A System dependent path of a file or directory. - - @param ustrFileURL [out] - On success it receives the file URL. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - - @see getSystemPathFromFileURL() - */ - - static inline RC getFileURLFromSystemPath( const ::rtl::OUString& ustrSystemPath, ::rtl::OUString& ustrFileURL ) - { - return (RC) osl_getFileURLFromSystemPath( ustrSystemPath.pData, &ustrFileURL.pData ); - } - - /** Searche a full qualified system path or a file URL. - - @param ustrFileName [in] - A system dependent path, a file URL, a file or relative directory - - @param ustrSearchPath [in] - A list of system paths, in which a given file has to be searched. The Notation of a path list is - system dependend, e.g. on UNIX system "/usr/bin:/bin" and on Windows "C:\BIN;C:\BATCH". - These paths are only for the search of a file or a relative path, otherwise it will be ignored. - If ustrSearchPath is NULL or while using the search path the search failed, the function searches for - a matching file in all system directories and in the directories listed in the PATH environment - variable. - The value of an environment variable should be used (e.g. LD_LIBRARY_PATH) if the caller is not - aware of the Operating System and so doesn't know which path list delimiter to use. - - @param ustrFileURL [out] - On success it receives the full qualified file URL. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOTDIR not a directory - E_NOENT no such file or directory not found - - @see getFileURLFromSystemPath() - @see getSystemPathFromFileURL() - */ - - static inline RC searchFileURL( const ::rtl::OUString& ustrFileName, const ::rtl::OUString& ustrSearchPath, ::rtl::OUString& ustrFileURL ) - { - return (RC) osl_searchFileURL( ustrFileName.pData, ustrSearchPath.pData, &ustrFileURL.pData ); - } - - /** Retrieves the file URL of the system's temporary directory path. - - @param[out] ustrTempDirURL - On success receives the URL of system's temporary directory path. - - @return - E_None on success - E_NOENT no such file or directory not found - */ - - static inline RC getTempDirURL( ::rtl::OUString& ustrTempDirURL ) - { - return (RC) osl_getTempDirURL( &ustrTempDirURL.pData ); - } - - /** Creates a temporary file in the directory provided by the caller or the - directory returned by getTempDirURL. - Under UNIX Operating Systems the file will be created with read and write - access for the user exclusively. - If the caller requests only a handle to the open file but not the name of - it, the file will be automatically removed on close else the caller is - responsible for removing the file on success.<br><br> - - @param pustrDirectoryURL [in] - Specifies the full qualified URL where the temporary file should be created. - If pustrDirectoryURL is 0 the path returned by osl_getTempDirURL will be used. - - @param pHandle [out] - On success receives a handle to the open file. - If pHandle is 0 the file will be closed on return, in this case - pustrTempFileURL must not be 0. - - @param pustrTempFileURL [out] - On success receives the full qualified URL of the temporary file. - If pustrTempFileURL is 0 the file will be automatically removed - on close, in this case pHandle must not be 0. - If pustrTempFileURL is not 0 the caller receives the name of the - created file and is responsible for removing the file. - - Description of the different pHandle, ppustrTempFileURL parameter combinations. - pHandle is 0 and pustrTempDirURL is 0 - this combination is invalid<br> - pHandle is not 0 and pustrTempDirURL is 0 - a handle to the open file - will be returned on success and the file will be automatically removed on close<br> - pHandle is 0 and pustrTempDirURL is not 0 - the name of the file will be - returned, the caller is responsible for opening, closing and removing the file.<br> - pHandle is not 0 and pustrTempDirURL is not 0 - a handle to the open file as well as - the file name will be returned, the caller is responsible for closing and removing - the file.<br> - - @return - E_None on success - E_INVAL the format of the parameter is invalid - E_NOMEM not enough memory for allocating structures - E_ACCES Permission denied - E_NOENT No such file or directory - E_NOTDIR Not a directory - E_ROFS Read-only file system - E_NOSPC No space left on device - E_DQUOT Quota exceeded - - @see getTempDirURL() - */ - - static inline RC createTempFile( - ::rtl::OUString* pustrDirectoryURL, - oslFileHandle* pHandle, - ::rtl::OUString* pustrTempFileURL) - { - rtl_uString* pustr_dir_url = pustrDirectoryURL ? pustrDirectoryURL->pData : 0; - rtl_uString** ppustr_tmp_file_url = pustrTempFileURL ? &pustrTempFileURL->pData : 0; - - return (RC) osl_createTempFile(pustr_dir_url, pHandle, ppustr_tmp_file_url); - } -}; - - -// ----------------------------------------------------------------------------- -/** The VolumeDevice class. - - @see VolumeInfo -*/ - -class VolumeDevice : public FileBase -{ - oslVolumeDeviceHandle _aHandle; - -public: - - /** Constructor. - */ - - VolumeDevice() : _aHandle( NULL ) - { - } - - /** Copy constructor. - - @param rDevice - The other volume device. - */ - - VolumeDevice( const VolumeDevice & rDevice ) - { - _aHandle = rDevice._aHandle; - if ( _aHandle ) - osl_acquireVolumeDeviceHandle( _aHandle ); - } - - /** Destructor. - */ - - ~VolumeDevice() - { - if ( _aHandle ) - osl_releaseVolumeDeviceHandle( _aHandle ); - } - - /** Assignment operator. - - @param rDevice - The other volume device. - */ - - inline VolumeDevice & operator =( const VolumeDevice & rDevice ) - { - oslVolumeDeviceHandle newHandle = rDevice._aHandle; - - if ( newHandle ) - osl_acquireVolumeDeviceHandle( newHandle ); - - if ( _aHandle ) - osl_releaseVolumeDeviceHandle( _aHandle ); - - _aHandle = newHandle; - - return *this; - } - - /** Get the full qualified URL where a device is mounted to. - - @return - The full qualified URL where the device is mounted to. - */ - inline rtl::OUString getMountPath() - { - rtl::OUString aPath; - osl_getVolumeDeviceMountPath( _aHandle, &aPath.pData ); - return aPath; - } - - friend class VolumeInfo; -}; - -// ----------------------------------------------------------------------------- - -class Directory; - -/** The VolumeInfo class. - - Neither copy nor assignment is allowed for this class. - - @see Directory::getVolumeInfo -*/ - - -class VolumeInfo -{ - oslVolumeInfo _aInfo; - sal_uInt32 _nMask; - VolumeDevice _aDevice; - - /** Copy constructor. - */ - - VolumeInfo( VolumeInfo& ); - - /** Assginment operator. - */ - - VolumeInfo& operator = ( VolumeInfo& ); - -public: - - /** Constructor. - - @param nMask - Set of flags decribing the demanded information. - */ - - VolumeInfo( sal_uInt32 nMask ): _nMask( nMask ) - { - _aInfo.uStructSize = sizeof( oslVolumeInfo ); - memset( &_aInfo.uValidFields, 0, sizeof( oslVolumeInfo ) - sizeof( sal_uInt32 ) ); - _aInfo.pDeviceHandle = &_aDevice._aHandle; - } - - /** Destructor. - */ - - ~VolumeInfo() - { - if( _aInfo.ustrFileSystemName ) - rtl_uString_release( _aInfo.ustrFileSystemName ); - } - - /** Check if specified fields are valid. - - @param nMask - Set of flags for the fields to check. - - @return sal_True if all fields are valid else sal_False. - */ - - inline sal_Bool isValid( sal_uInt32 nMask ) const - { - return ( nMask & _aInfo.uValidFields ) == nMask; - } - - /** Check the remote flag. - - @return - sal_True if Attributes are valid and the volume is remote else sal_False. - */ - - inline sal_Bool getRemoteFlag() const - { - return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_Remote); - } - - /** Check the removeable flag. - - @return - sal_True if attributes are valid and the volume is removable else sal_False. - */ - - inline sal_Bool getRemoveableFlag() const - { - return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_Removeable); - } - - /** Check the compact disc flag. - - @return - sal_True if attributes are valid and the volume is a CDROM else sal_False. - */ - - inline sal_Bool getCompactDiscFlag() const - { - return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_CompactDisc); - } - - /** Check the floppy disc flag. - - @return - sal_True if attributes are valid and the volume is a floppy disk else sal_False. - */ - - inline sal_Bool getFloppyDiskFlag() const - { - return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_FloppyDisk); - } - - /** Check the fixed disk flag. - - @return - sal_True if attributes are valid and the volume is a fixed disk else sal_False. - */ - - inline sal_Bool getFixedDiskFlag() const - { - return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_FixedDisk); - } - - /** Check the RAM disk flag. - - @return - sal_True if attributes are valid and the volume is a RAM disk else sal_False. - */ - - inline sal_Bool getRAMDiskFlag() const - { - return 0 != (_aInfo.uAttributes & osl_Volume_Attribute_RAMDisk); - } - - /** Determine the total space of a volume device. - - @return - The total diskspace of this volume if this information is valid, - 0 otherwise. - */ - - inline sal_uInt64 getTotalSpace() const - { - return _aInfo.uTotalSpace; - } - - /** Determine the free space of a volume device. - - @return - The free diskspace of this volume if this information is valid, - 0 otherwise. - */ - - inline sal_uInt64 getFreeSpace() const - { - return _aInfo.uFreeSpace; - } - - /** Determine the used space of a volume device. - - @return - The used diskspace of this volume if this information is valid, - 0 otherwise. - */ - - inline sal_uInt64 getUsedSpace() const - { - return _aInfo.uUsedSpace; - } - - /** Determine the maximal length of a file name. - - @return - The maximal length of a file name if this information is valid, - 0 otherwise. - */ - - inline sal_uInt32 getMaxNameLength() const - { - return _aInfo.uMaxNameLength; - } - - /** Determine the maximal length of a path name. - - @return - The maximal length of a path if this information is valid, - 0 otherwise. - */ - - inline sal_uInt32 getMaxPathLength() const - { - return _aInfo.uMaxPathLength; - } - - /** Determine the name of the volume device's File System. - - @return - The name of the volume's fielsystem if this information is valid, - otherwise an empty string. - */ - - inline ::rtl::OUString getFileSystemName() const - { - return _aInfo.ustrFileSystemName ? ::rtl::OUString( _aInfo.ustrFileSystemName ) : ::rtl::OUString(); - } - - - /** Get the volume device handle. - - @return - The device handle of the volume if this information is valid, - otherwise returns NULL; - */ - - inline VolumeDevice getDeviceHandle() const - { - return _aDevice; - } - - /** Return whether the file system is case sensitive or - case insensitive - - @return - true if the file system is case sensitive false otherwise - */ - bool isCaseSensitiveFileSystem() const - { - return (_aInfo.uAttributes & osl_Volume_Attribute_Case_Sensitive); - } - - /** Return whether the file system preserves the case of - file and directory names or not - - @return - true if the file system preserves the case of file and - directory names false otherwise - */ - bool isCasePreservingFileSystem() const - { - return (_aInfo.uAttributes & osl_Volume_Attribute_Case_Is_Preserved); - } - - friend class Directory; -}; - -// ----------------------------------------------------------------------------- -class DirectoryItem; - -/** The FileStatus class. - - @see DirectoryItem::getFileStatus -*/ - -class FileStatus -{ - oslFileStatus _aStatus; - sal_uInt32 _nMask; - - /** Copy constructor. - */ - - FileStatus( FileStatus& ); - - /** Assignment operator. - */ - - FileStatus& operator = ( FileStatus& ); - -public: - - enum Type { - Directory = osl_File_Type_Directory, - Volume = osl_File_Type_Volume, - Regular = osl_File_Type_Regular, - Fifo = osl_File_Type_Fifo, - Socket = osl_File_Type_Socket, - Link = osl_File_Type_Link, - Special = osl_File_Type_Special, - Unknown = osl_File_Type_Unknown - }; - - /** Constructor. - - @param nMask - Set of flags decribing the demanded information. - */ - - FileStatus( sal_uInt32 nMask ): _nMask( nMask ) - { - _aStatus.uStructSize = sizeof( oslFileStatus ); - memset( &_aStatus.uValidFields, 0, sizeof( oslFileStatus ) - sizeof( sal_uInt32 ) ); - } - - /** Destructor. - */ - - ~FileStatus() - { - if ( _aStatus.ustrFileURL ) - rtl_uString_release( _aStatus.ustrFileURL ); - if ( _aStatus.ustrLinkTargetURL ) - rtl_uString_release( _aStatus.ustrLinkTargetURL ); - if ( _aStatus.ustrFileName ) - rtl_uString_release( _aStatus.ustrFileName ); - } - - /** Check if specified fields are valid. - - @param nMask - Set of flags for the fields to check. - - @return - sal_True if all fields are valid else sal_False. - */ - - inline sal_Bool isValid( sal_uInt32 nMask ) const - { - return ( nMask & _aStatus.uValidFields ) == nMask; - } - - /** Get the file type. - - @return - The file type. - */ - inline Type getFileType() const - { - SAL_INFO_IF( - !isValid(osl_FileStatus_Mask_Type), "sal.osl", - "no FileStatus Type determined"); - return isValid(osl_FileStatus_Mask_Type) - ? static_cast< Type >(_aStatus.eType) : Unknown; - } - - /** Is it a directory? - This method returns True for both directories, and volumes. - - @return - True if it's a directory, False otherwise. - - @see getFileType - @since LibreOffice 3.6 - */ - inline sal_Bool isDirectory() const - { - return ( getFileType() == Directory || getFileType() == Volume ); - } - - /** Is it a regular file? - - @return - True if it's a regular file, False otherwise. - - @see getFileType - @see isFile - @see isLink - @since LibreOffice 3.6 - */ - inline sal_Bool isRegular() const - { - return ( getFileType() == Regular ); - } - - /** Is it a link? - - @return - True if it's a link, False otherwise. - - @see getFileType - @since LibreOffice 3.6 - */ - inline sal_Bool isLink() const - { - return ( getFileType() == Link ); - } - - /** Get the file attributes. - - @return - The set of attribute flags of this file. - */ - - inline sal_uInt64 getAttributes() const - { - SAL_INFO_IF( - !isValid(osl_FileStatus_Mask_Attributes), "sal.osl", - "no FileStatus Attributes determined"); - return _aStatus.uAttributes; - } - - /** Get the creation time of this file. - - @return - The creation time if this information is valid, an uninitialized - TimeValue otherwise. - */ - - inline TimeValue getCreationTime() const - { - SAL_INFO_IF( - !isValid(osl_FileStatus_Mask_CreationTime), "sal.osl", - "no FileStatus CreationTime determined"); - return _aStatus.aCreationTime; - } - - /** Get the file access time. - - @return - The last access time if this information is valid, an uninitialized - TimeValue otherwise. - */ - - inline TimeValue getAccessTime() const - { - SAL_INFO_IF( - !isValid(osl_FileStatus_Mask_AccessTime), "sal.osl", - "no FileStatus AccessTime determined"); - return _aStatus.aAccessTime; - } - - /** Get the file modification time. - - @return - The last modified time if this information is valid, an uninitialized - TimeValue otherwise. - */ - - inline TimeValue getModifyTime() const - { - SAL_INFO_IF( - !isValid(osl_FileStatus_Mask_ModifyTime), "sal.osl", - "no FileStatus ModifyTime determined"); - return _aStatus.aModifyTime; - } - - /** Get the size of the file. - - @return - The actual file size if this information is valid, 0 otherwise. - */ - - inline sal_uInt64 getFileSize() const - { - SAL_INFO_IF( - !isValid(osl_FileStatus_Mask_FileSize), "sal.osl", - "no FileStatus FileSize determined"); - return _aStatus.uFileSize; - } - - /** Get the file name. - - @return - The file name if this information is valid, an empty string otherwise. - */ - - inline ::rtl::OUString getFileName() const - { - SAL_INFO_IF( - !isValid(osl_FileStatus_Mask_FileName), "sal.osl", - "no FileStatus FileName determined"); - return isValid(osl_FileStatus_Mask_FileName) - ? rtl::OUString(_aStatus.ustrFileName) : rtl::OUString(); - } - - - /** Get the URL of the file. - - @return - The full qualified URL of the file if this information is valid, an - empty string otherwise. - */ - - inline ::rtl::OUString getFileURL() const - { - SAL_INFO_IF( - !isValid(osl_FileStatus_Mask_FileURL), "sal.osl", - "no FileStatus FileURL determined"); - return isValid(osl_FileStatus_Mask_FileURL) - ? rtl::OUString(_aStatus.ustrFileURL) : rtl::OUString(); - } - - /** Get the link target URL. - - @return - The link target URL if this information is valid, an empty string - otherwise. - */ - - inline ::rtl::OUString getLinkTargetURL() const - { - SAL_INFO_IF( - !isValid(osl_FileStatus_Mask_LinkTargetURL), "sal.osl", - "no FileStatus LinkTargetURL determined"); - return isValid(osl_FileStatus_Mask_LinkTargetURL) - ? rtl::OUString(_aStatus.ustrLinkTargetURL) : rtl::OUString(); - } - - friend class DirectoryItem; -}; - - -// ----------------------------------------------------------------------------- -/** The file class object provides access to file contents and attributes. - - @see Directory - @see DirectoryItem - */ - -class File: public FileBase -{ - oslFileHandle _pData; - ::rtl::OUString _aPath; - - /** Copy constructor. - */ - - File( File& ); - - /** Assginment operator. - */ - - File& operator = ( File& ); - -public: - - /** Constructor. - - @param ustrFileURL [in] - The full qualified URL of the file. Relative paths are not allowed. - */ - - File( const ::rtl::OUString& ustrFileURL ): _pData( 0 ), _aPath( ustrFileURL ) {} - - /** Destructor - */ - - inline ~File() - { - close(); - } - - /** Obtain the URL. - - @return - the URL with which this File instance was created. - - @since LibreOffice 4.1 - */ - inline rtl::OUString getURL() const { return _aPath; } - - /** Open a regular file. - - Open a file. Only regular files can be openend. - - @param uFlags [in] - Specifies the open mode. - - @return - E_None on success - E_NOMEM not enough memory for allocating structures - E_INVAL the format of the parameters was not valid - E_NAMETOOLONG pathname was too long - E_NOENT no such file or directory - E_ACCES permission denied - E_AGAIN a write lock could not be established - E_NOTDIR not a directory - E_NXIO no such device or address - E_NODEV no such device - E_ROFS read-only file system - E_TXTBSY text file busy - E_FAULT bad address - E_LOOP too many symbolic links encountered - E_NOSPC no space left on device - E_ISDIR is a directory - E_MFILE too many open files used by the process - E_NFILE too many open files in the system - E_DQUOT quota exceeded - E_EXIST file exists - E_INTR function call was interrupted - E_IO on I/O errors - E_MULTIHOP multihop attempted - E_NOLINK link has been severed - E_EOVERFLOW value too large for defined data type - - @see close() - @see setPos() - @see getPos() - @see read() - @see write() - @see getSize() - @see setSize() - */ - - inline RC open( sal_uInt32 uFlags ) - { - return (RC) osl_openFile( _aPath.pData, &_pData, uFlags ); - } - - /** Close an open file. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_BADF Bad file - E_INTR function call was interrupted - E_NOLINK link has been severed - E_NOSPC no space left on device - E_IO on I/O errors - - @see open() - */ - - inline RC close() - { - oslFileError Error = osl_File_E_BADF; - - if( _pData ) - { - Error=osl_closeFile( _pData ); - _pData = NULL; - } - - return (RC) Error; - } - - /** Set the internal position pointer of an open file. - - @param uHow [in] - Distance to move the internal position pointer (from uPos). - - @param uPos [in] - Absolute position from the beginning of the file. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files - - @see open() - @see getPos() - */ - - inline RC setPos( sal_uInt32 uHow, sal_Int64 uPos ) SAL_WARN_UNUSED_RESULT - { - return (RC) osl_setFilePos( _pData, uHow, uPos ); - } - - /** Retrieve the current position of the internal pointer of an open file. - - @param uPos [out] - On success receives the current position of the file pointer. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files - - @see open() - @see setPos() - @see read() - @see write() - */ - - inline RC getPos( sal_uInt64& uPos ) - { - return (RC) osl_getFilePos( _pData, &uPos ); - } - - /** Test if the end of a file is reached. - - @param pIsEOF [out] - Points to a variable that receives the end-of-file status. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_INTR function call was interrupted - E_IO on I/O errors - E_ISDIR is a directory - E_BADF bad file - E_FAULT bad address - E_AGAIN operation would block - E_NOLINK link has been severed - - @see open() - @see read() - @see readLine() - @see setPos() - */ - - inline RC isEndOfFile( sal_Bool *pIsEOF ) - { - return (RC) osl_isEndOfFile( _pData, pIsEOF ); - } - - /** Set the file size of an open file. - - Sets the file size of an open file. The file can be truncated or enlarged by the function. - The position of the file pointer is not affeced by this function. - - @param uSize [in] - New size in bytes. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files - - @see open() - @see setPos() - @see getStatus() - */ - - inline RC setSize( sal_uInt64 uSize ) - { - return (RC) osl_setFileSize( _pData, uSize ); - } - - /** Get the file size of an open file. - - Gets the file size of an open file. - The position of the file pointer is not affeced by this function. - - @param rSize [out] - Current size in bytes. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files - - @see open() - @see setPos() - @see getSize() - @see setSize() - @see getStatus() - */ - - inline RC getSize( sal_uInt64 &rSize ) - { - return (RC) osl_getFileSize( _pData, &rSize ); - } - - /** Read a number of bytes from a file. - - Reads a number of bytes from a file. The internal file pointer is - increased by the number of bytes read. - - @param pBuffer [out] - Points to a buffer which receives data. The buffer must be large enough - to hold uBytesRequested bytes. - - @param uBytesRequested [in] - Number of bytes which should be retrieved. - - @param rBytesRead [out] - On success the number of bytes which have actually been retrieved. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_INTR function call was interrupted - E_IO on I/O errors - E_ISDIR is a directory - E_BADF bad file - E_FAULT bad address - E_AGAIN operation would block - E_NOLINK link has been severed - - @see open() - @see write() - @see readLine() - @see setPos() - */ - - inline RC read( void *pBuffer, sal_uInt64 uBytesRequested, sal_uInt64& rBytesRead ) - { - return (RC) osl_readFile( _pData, pBuffer, uBytesRequested, &rBytesRead ); - } - - /** Write a number of bytes to a file. - - Writes a number of bytes to a file. - The internal file pointer is increased by the number of bytes read. - - @param pBuffer [in] - Points to a buffer which contains the data. - - @param uBytesToWrite [in] - Number of bytes which should be written. - - @param rBytesWritten [out] - On success the number of bytes which have actually been written. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_FBIG file too large - E_DQUOT quota exceeded - E_AGAIN operation would block - E_BADF bad file - E_FAULT bad address - E_INTR function call was interrupted - E_IO on I/O errosr - E_NOLCK no record locks available - E_NOLINK link has been severed - E_NOSPC no space left on device - E_NXIO no such device or address - - @see open() - @see read() - @see setPos() - */ - - inline RC write(const void *pBuffer, sal_uInt64 uBytesToWrite, sal_uInt64& rBytesWritten) - { - return (RC) osl_writeFile( _pData, pBuffer, uBytesToWrite, &rBytesWritten ); - } - - - /** Read a line from a file. - - Reads a line from a file. The new line delimiter is NOT returned! - - @param aSeq [in/out] - A reference to a ::rtl::ByteSequence that will hold the line read on success. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_INTR function call was interrupted - E_IO on I/O errors - E_ISDIR is a directory - E_BADF bad file - E_FAULT bad address - E_AGAIN operation would block - E_NOLINK link has been severed - - @see open() - @see read() - @see write() - @see setPos() - */ - - inline RC readLine( ::rtl::ByteSequence& aSeq ) - { - return (RC) osl_readLine( _pData, reinterpret_cast<sal_Sequence**>(&aSeq) ); - } - - /** Synchronize the memory representation of a file with that on the physical medium. - - The function ensures that all modified data and attributes of the file associated with - the given file handle have been written to the physical medium. - In case the hard disk has a write cache enabled, the data may not really be on - permanent storage when osl_syncFile returns. - - @return - <dl> - <dt>E_None</dt> - <dd>On success</dd> - <dt>E_INVAL</dt> - <dd>The value of the input parameter is invalid</dd> - <br><p><strong>In addition to these error codes others may occur as well, for instance:</strong></p><br> - <dt>E_BADF</dt> - <dd>The file is not open for writing</dd> - <dt>E_IO</dt> - <dd>An I/O error occurred</dd> - <dt>E_NOSPC</dt> - <dd>There is no enough space on the target device</dd> - <dt>E_ROFS</dt> - <dd>The file is located on a read only file system</dd> - <dt>E_TIMEDOUT</dt> - <dd>A remote connection timed out. This may happen when a file is on a remote location</dd> - </dl> - - @see osl_syncFile() - @see open() - @see write() - */ - inline RC sync() const - { - OSL_PRECOND(_pData, "File::sync(): File not open"); - return (RC)osl_syncFile(_pData); - } - - /** Copy a file to a new destination. - - Copies a file to a new destination. Copies only files not directories. - No assumptions should be made about preserving attributes or file time. - - @param ustrSourceFileURL [in] - Full qualified URL of the source file. - - @param ustrDestFileURL [in] - Full qualified URL of the destination file. A directory is NOT a valid destination file! - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOMEM not enough memory for allocating structures - E_ACCES permission denied - E_PERM operation not permitted - E_NAMETOOLONG file name too long - E_NOENT no such file or directory - E_ISDIR is a directory - E_ROFS read-only file system - - @see move() - @see remove() - */ - - inline static RC copy( const ::rtl::OUString& ustrSourceFileURL, const ::rtl::OUString& ustrDestFileURL ) - { - return (RC) osl_copyFile( ustrSourceFileURL.pData, ustrDestFileURL.pData ); - } - - /** Move a file or directory to a new destination or renames it. - - Moves a file or directory to a new destination or renames it. - File time and attributes are preserved. - - @param ustrSourceFileURL [in] - Full qualified URL of the source file. - - @param ustrDestFileURL [in] - Full qualified URL of the destination file. An existing directory is NOT a valid destination ! - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOMEM not enough memory for allocating structures - E_ACCES permission denied - E_PERM operation not permitted - E_NAMETOOLONG file name too long - E_NOENT no such file or directory - E_ROFS read-only file system - - @see copy() - */ - - inline static RC move( const ::rtl::OUString& ustrSourceFileURL, const ::rtl::OUString& ustrDestFileURL ) - { - return (RC) osl_moveFile( ustrSourceFileURL.pData, ustrDestFileURL.pData ); - } - - /** Remove a regular file. - - @param ustrFileURL [in] - Full qualified URL of the file to remove. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOMEM not enough memory for allocating structures - E_ACCES permission denied - E_PERM operation not permitted - E_NAMETOOLONG file name too long - E_NOENT no such file or directory - E_ISDIR is a directory - E_ROFS read-only file system - E_FAULT bad address - E_LOOP too many symbolic links encountered - E_IO on I/O errors - E_BUSY device or resource busy - E_INTR function call was interrupted - E_LOOP too many symbolic links encountered - E_MULTIHOP multihop attempted - E_NOLINK link has been severed - E_TXTBSY text file busy - - @see open() - */ - - inline static RC remove( const ::rtl::OUString& ustrFileURL ) - { - return (RC) osl_removeFile( ustrFileURL.pData ); - } - - /** Set file attributes. - - @param ustrFileURL [in] - The full qualified file URL. - - @param uAttributes [in] - Attributes of the file to be set. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - - @see FileStatus - */ - - inline static RC setAttributes( const ::rtl::OUString& ustrFileURL, sal_uInt64 uAttributes ) - { - return (RC) osl_setFileAttributes( ustrFileURL.pData, uAttributes ); - } - - /** Set the file time. - - @param ustrFileURL [in] - The full qualified URL of the file. - - @param rCreationTime [in] - Creation time of the given file. - - @param rLastAccessTime [in] - Time of the last access of the given file. - - @param rLastWriteTime [in] - Time of the last modifying of the given file. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOENT no such file or directory not found - - @see FileStatus - */ - - inline static RC setTime( - const ::rtl::OUString& ustrFileURL, - const TimeValue& rCreationTime, - const TimeValue& rLastAccessTime, - const TimeValue& rLastWriteTime ) - { - return (RC) osl_setFileTime( - ustrFileURL.pData, - &rCreationTime, - &rLastAccessTime, - &rLastWriteTime ); - } - - friend class DirectoryItem; -}; - -// ----------------------------------------------------------------------------- -/** The directory item class object provides access to file status information. - - @see FileStatus - */ - -class DirectoryItem: public FileBase -{ - oslDirectoryItem _pData; - -public: - - /** Constructor. - */ - - DirectoryItem(): _pData( NULL ) - { - } - - /** Copy constructor. - */ - - DirectoryItem( const DirectoryItem& rItem ): _pData( rItem._pData) - { - if( _pData ) - osl_acquireDirectoryItem( _pData ); - } - - /** Destructor. - */ - - ~DirectoryItem() - { - if( _pData ) - osl_releaseDirectoryItem( _pData ); - } - - /** Assignment operator. - */ - - DirectoryItem& operator=(const DirectoryItem& rItem ) - { - if (&rItem != this) - { - if( _pData ) - osl_releaseDirectoryItem( _pData ); - - _pData = rItem._pData; - - if( _pData ) - osl_acquireDirectoryItem( _pData ); - } - return *this; - } - - /** Check for validity of this instance. - - @return - sal_True if object is valid directory item else sal_False. - */ - - inline sal_Bool is() - { - return _pData != NULL; - } - - /** Retrieve a single directory item. - - Retrieves a single directory item. The returned handle has an initial refcount of 1. - Due to performance issues it is not recommended to use this function while - enumerating the contents of a directory. In this case use osl_getNextDirectoryItem() instead. - - @param ustrFileURL [in] - An absolute file URL. - - @param rItem [out] - On success it receives a handle which can be used for subsequent calls to osl_getFileStatus(). - The handle has to be released by a call to osl_releaseDirectoryItem(). - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOMEM not enough memory for allocating structures - E_ACCES permission denied - E_MFILE too many open files used by the process - E_NFILE too many open files in the system - E_NOENT no such file or directory - E_LOOP too many symbolic links encountered - E_NAMETOOLONG the file name is too long - E_NOTDIR a component of the path prefix of path is not a directory - E_IO on I/O errors - E_MULTIHOP multihop attempted - E_NOLINK link has been severed - E_FAULT bad address - E_INTR the function call was interrupted - - @see FileStatus - @see Directory::getNextItem() - */ - - static inline RC get( const ::rtl::OUString& ustrFileURL, DirectoryItem& rItem ) - { - if( rItem._pData) - { - osl_releaseDirectoryItem( rItem._pData ); - rItem._pData = NULL; - } - - return (RC) osl_getDirectoryItem( ustrFileURL.pData, &rItem._pData ); - } - - /** Retrieve information about a single file or directory. - - @param rStatus [in|out] - Reference to a class which receives the information of the file or directory - represented by this directory item. - - @return - E_None on success - E_NOMEM not enough memory for allocating structures - E_INVAL the format of the parameters was not valid - E_LOOP too many symbolic links encountered - E_ACCES permission denied - E_NOENT no such file or directory - E_NAMETOOLONG file name too long - E_BADF invalid oslDirectoryItem parameter - E_FAULT bad address - E_OVERFLOW value too large for defined data type - E_INTR function call was interrupted - E_NOLINK link has been severed - E_MULTIHOP components of path require hopping to multiple remote machines and the file system does not allow it - E_MFILE too many open files used by the process - E_NFILE too many open files in the system - E_NOSPC no space left on device - E_NXIO no such device or address - E_IO on I/O errors - E_NOSYS function not implemented - - @see get() - @see Directory::getNextItem() - @see FileStatus - */ - - inline RC getFileStatus( FileStatus& rStatus ) - { - return (RC) osl_getFileStatus( _pData, &rStatus._aStatus, rStatus._nMask ); - } - -/** Determine if a directory item point the same underlying file - - The comparison is done first by URL, and then by resolving links to - find the target, and finally by comparing inodes on unix. - - @param[in] pOther - A directory handle to compare with the underlying object's item - - @return - sal_True: if the items point to an identical resource<br> - sal_False: if the items point to a different resource, or a fatal error occured<br> - - @see osl_getDirectoryItem() - - @since LibreOffice 3.6 -*/ - inline sal_Bool isIdenticalTo( const DirectoryItem &pOther ) - { - return osl_identicalDirectoryItem( _pData, pOther._pData ); - } - - friend class Directory; -}; - -//########################################### - -/** Base class for observers of directory creation notifications. - - Clients which uses the method createDirectoryPath of the class - Directory may want to be informed about the directories that - have been created. This may be accomplished by deriving from - this base class and overwriting the virtual function - DirectoryCreated. - - @see Directory::createPath -*/ -class DirectoryCreationObserver -{ -public: - virtual ~DirectoryCreationObserver() {} - - /** This method will be called when a new directory has been - created and needs to be overwritten by derived classes. - You must not delete the directory that was just created - otherwise you will run into an endless loop. - - @param aDirectoryUrl - [in]The absolute file URL of the directory that was just created by - ::osl::Directory::createPath. - */ - virtual void DirectoryCreated(const rtl::OUString& aDirectoryUrl) = 0; -}; - -//########################################### -// This just an internal helper function for -// private use. -extern "C" inline void SAL_CALL onDirectoryCreated(void* pData, rtl_uString* aDirectoryUrl) -{ - (static_cast<DirectoryCreationObserver*>(pData))->DirectoryCreated(aDirectoryUrl); -} - -/** The directory class object provides a enumeration of DirectoryItems. - - @see DirectoryItem - @see File - */ - -class Directory: public FileBase -{ - oslDirectory _pData; - ::rtl::OUString _aPath; - - /** Copy constructor. - */ - - Directory( Directory& ); - - /** Assignment operator. - */ - - Directory& operator = ( Directory& ); - -public: - - /** Constructor. - - @param strPath [in] - The full qualified URL of the directory. - Relative URLs are not allowed. - */ - - Directory( const ::rtl::OUString& strPath ): _pData( 0 ), _aPath( strPath ) - { - } - - /** Destructor. - */ - - ~Directory() - { - close(); - } - - /** Obtain the URL. - - @return - the URL with which this Directory instance was created. - - @since LibreOffice 4.1 - */ - inline rtl::OUString getURL() const { return _aPath; } - - /** Open a directory for enumerating its contents. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOENT the specified path doesn't exist - E_NOTDIR the specified path is not an directory - E_NOMEM not enough memory for allocating structures - E_ACCES permission denied - E_MFILE too many open files used by the process - E_NFILE too many open files in the system - E_NAMETOOLONG File name too long - E_LOOP Too many symbolic links encountered - - @see getNextItem() - @see close() - */ - - inline RC open() - { - return (RC) osl_openDirectory( _aPath.pData, &_pData ); - } - - /** Query if directory is open. - - Query if directory is open and so item enumeration is valid. - - @return - sal_True if the directory is open else sal_False. - - @see open() - @see close() - */ - - inline sal_Bool isOpen() { return _pData != NULL; } - - /** Close a directory. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOMEM not enough memory for allocating structures - E_BADF invalid oslDirectory parameter - E_INTR the function call was interrupted - - @see open() - */ - - inline RC close() - { - oslFileError Error = osl_File_E_BADF; - - if( _pData ) - { - Error=osl_closeDirectory( _pData ); - _pData = NULL; - } - - return (RC) Error; - } - - - /** Resets the directory item enumeration to the beginning. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOENT the specified path doesn't exist - E_NOTDIR the specified path is not an directory - E_NOMEM not enough memory for allocating structures - E_ACCES permission denied - E_MFILE too many open files used by the process - E_NFILE too many open files in the system - E_NAMETOOLONG File name too long - E_LOOP Too many symbolic links encountered - - @see open() - */ - - inline RC reset() - { - close(); - return open(); - } - - /** Retrieve the next item of a previously opened directory. - - Retrieves the next item of a previously opened directory. - - @param rItem [out] - On success a valid DirectoryItem. - - @param nHint [in] - With this parameter the caller can tell the implementation that (s)he - is going to call this function uHint times afterwards. This enables the implementation to - get the information for more than one file and cache it until the next calls. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOMEM not enough memory for allocating structures - E_NOENT no more entries in this directory - E_BADF invalid oslDirectory parameter - E_OVERFLOW the value too large for defined data type - - @see DirectoryItem - */ - - inline RC getNextItem( DirectoryItem& rItem, sal_uInt32 nHint = 0 ) - { - if( rItem._pData ) - { - osl_releaseDirectoryItem( rItem._pData ); - rItem._pData = 0; - } - return ( RC) osl_getNextDirectoryItem( _pData, &rItem._pData, nHint ); - } - - - /** Retrieve information about a volume. - - Retrieves information about a volume. A volume can either be a mount point, a network - resource or a drive depending on Operating System and File System. - - @param ustrDirectoryURL [in] - Full qualified URL of the volume - - @param rInfo [out] - On success it receives information about the volume. - - @return - E_None on success - E_NOMEM not enough memory for allocating structures - E_INVAL the format of the parameters was not valid - E_NOTDIR not a directory - E_NAMETOOLONG file name too long - E_NOENT no such file or directory - E_ACCES permission denied - E_LOOP too many symbolic links encountered - E_FAULT Bad address - E_IO on I/O errors - E_NOSYS function not implemented - E_MULTIHOP multihop attempted - E_NOLINK link has been severed - E_INTR function call was interrupted - - @see FileStatus - @see VolumeInfo - */ - - inline static RC getVolumeInfo( const ::rtl::OUString& ustrDirectoryURL, VolumeInfo& rInfo ) - { - return (RC) osl_getVolumeInformation( ustrDirectoryURL.pData, &rInfo._aInfo, rInfo._nMask ); - } - - /** Create a directory. - - @param ustrDirectoryURL [in] - Full qualified URL of the directory to create. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOMEM not enough memory for allocating structures - E_EXIST file exists - E_ACCES permission denied - E_NAMETOOLONG file name too long - E_NOENT no such file or directory - E_NOTDIR not a directory - E_ROFS read-only file system - E_NOSPC no space left on device - E_DQUOT quota exceeded - E_LOOP too many symbolic links encountered - E_FAULT bad address - E_IO on I/O errors - E_MLINK too many links - E_MULTIHOP multihop attempted - E_NOLINK link has been severed - - @see remove() - */ - - inline static RC create( const ::rtl::OUString& ustrDirectoryURL ) - { - return (RC) osl_createDirectory( ustrDirectoryURL.pData ); - } - - /** Remove an empty directory. - - @param ustrDirectoryURL [in] - Full qualified URL of the directory. - - @return - E_None on success - E_INVAL the format of the parameters was not valid - E_NOMEM not enough memory for allocating structures - E_PERM operation not permitted - E_ACCES permission denied - E_NOENT no such file or directory - E_NOTDIR not a directory - E_NOTEMPTY directory not empty - E_FAULT bad address - E_NAMETOOLONG file name too long - E_BUSY device or resource busy - E_ROFS read-only file system - E_LOOP too many symbolic links encountered - E_BUSY device or resource busy - E_EXIST file exists - E_IO on I/O errors - E_MULTIHOP multihop attempted - E_NOLINK link has been severed - - @see create() - */ - - inline static RC remove( const ::rtl::OUString& ustrDirectoryURL ) - { - return (RC) osl_removeDirectory( ustrDirectoryURL.pData ); - } - - /** Create a directory path. - - The osl_createDirectoryPath function creates a specified directory path. - All nonexisting sub directories will be created. - <p><strong>PLEASE NOTE:</strong> You cannot rely on getting the error code - E_EXIST for existing directories. Programming against this error code is - in general a strong indication of a wrong usage of osl_createDirectoryPath.</p> - - @param aDirectoryUrl - [in] The absolute file URL of the directory path to create. - A relative file URL will not be accepted. - - @param aDirectoryCreationObserver - [in] Pointer to an instance of type DirectoryCreationObserver that will - be informed about the creation of a directory. The value of this - parameter may be NULL, in this case notifications will not be sent. - - @return - <dl> - <dt>E_None</dt> - <dd>On success</dd> - <dt>E_INVAL</dt> - <dd>The format of the parameters was not valid</dd> - <dt>E_ACCES</dt> - <dd>Permission denied</dd> - <dt>E_EXIST</dt> - <dd>The final node of the specified directory path already exist</dd> - <dt>E_NAMETOOLONG</dt> - <dd>The name of the specified directory path exceeds the maximum allowed length</dd> - <dt>E_NOTDIR</dt> - <dd>A component of the specified directory path already exist as file in any part of the directory path</dd> - <dt>E_ROFS</dt> - <dd>Read-only file system</dd> - <dt>E_NOSPC</dt> - <dd>No space left on device</dd> - <dt>E_DQUOT</dt> - <dd>Quota exceeded</dd> - <dt>E_FAULT</dt> - <dd>Bad address</dd> - <dt>E_IO</dt> - <dd>I/O error</dd> - <dt>E_LOOP</dt> - <dd>Too many symbolic links encountered</dd> - <dt>E_NOLINK</dt> - <dd>Link has been severed</dd> - <dt>E_invalidError</dt> - <dd>An unknown error occurred</dd> - </dl> - - @see DirectoryCreationObserver - @see create - */ - static RC createPath( - const ::rtl::OUString& aDirectoryUrl, - DirectoryCreationObserver* aDirectoryCreationObserver = NULL) - { - return (RC)osl_createDirectoryPath( - aDirectoryUrl.pData, - (aDirectoryCreationObserver) ? onDirectoryCreated : NULL, - aDirectoryCreationObserver); - } -}; - -} /* namespace osl */ - -#endif /* _OSL_FILE_HXX_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/getglobalmutex.hxx b/sal/inc/osl/getglobalmutex.hxx deleted file mode 100644 index 4fbd32a3e4b5..000000000000 --- a/sal/inc/osl/getglobalmutex.hxx +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_OSL_GETGLOBALMUTEX_HXX -#define INCLUDED_OSL_GETGLOBALMUTEX_HXX - -#include "osl/mutex.hxx" - -namespace osl { - -/** A helper functor for the rtl_Instance template. - - See the rtl_Instance template for examples of how this class is used. - */ -class GetGlobalMutex -{ -public: - ::osl::Mutex * operator()() - { - return ::osl::Mutex::getGlobalMutex(); - } -}; - -} - -#endif // INCLUDED_OSL_GETGLOBALMUTEX_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/interlck.h b/sal/inc/osl/interlck.h deleted file mode 100644 index 31212deed274..000000000000 --- a/sal/inc/osl/interlck.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_INTERLOCK_H_ -#define _OSL_INTERLOCK_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef sal_Int32 oslInterlockedCount; - -/** Increments the count variable addressed by pCount. - @param pCount Address of count variable - @return The adjusted value of the count variable. -*/ -SAL_DLLPUBLIC oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount); - -/** Decrement the count variable addressed by pCount. - @param pCount Address of count variable - @return The adjusted value of the count variable. -*/ -SAL_DLLPUBLIC oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount); - - -/// @cond INTERNAL - -/** Increments the count variable addressed by p. - - @attention This functionality should only be used internally within - LibreOffice. - - @param p Address of count variable - @return The adjusted value of the count variable. - - @since LibreOffice 4.0 -*/ -#if HAVE_GCC_BUILTIN_ATOMIC -# define osl_atomic_increment(p) __sync_add_and_fetch((p), 1) -#else -# define osl_atomic_increment(p) osl_incrementInterlockedCount((p)) -#endif - - -/** Decrement the count variable addressed by p. - - @attention This functionality should only be used internally within - LibreOffice. - - @param p Address of count variable - @return The adjusted value of the count variable. - - @since LibreOffice 4.0 -*/ -#if HAVE_GCC_BUILTIN_ATOMIC -# define osl_atomic_decrement(p) __sync_sub_and_fetch((p), 1) -#else -# define osl_atomic_decrement(p) osl_decrementInterlockedCount((p)) -#endif - -/// @endcond - -#ifdef __cplusplus -} -#endif - - -#endif /* _OSL_INTERLOCK_H_ */ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/module.h b/sal/inc/osl/module.h deleted file mode 100644 index 09f2b17b401c..000000000000 --- a/sal/inc/osl/module.h +++ /dev/null @@ -1,251 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_MODULE_H_ -#define _OSL_MODULE_H_ - -#include "sal/config.h" - -#include "rtl/tencinfo.h" -#include "rtl/ustring.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SAL_DLLPREFIX -#define SAL_MODULENAME(name) SAL_DLLPREFIX name SAL_DLLEXTENSION -#else -#define SAL_MODULENAME(name) name SAL_DLLEXTENSION -#endif - -#if defined(SAL_W32) -#define SAL_MODULENAME_WITH_VERSION(name, version) name version SAL_DLLEXTENSION - -#elif defined(SAL_UNX) -#if defined(MACOSX) -#define SAL_MODULENAME_WITH_VERSION(name, version) SAL_DLLPREFIX name ".dylib." version -#else -#define SAL_MODULENAME_WITH_VERSION(name, version) SAL_DLLPREFIX name SAL_DLLEXTENSION "." version -#endif - -#endif - -#define SAL_LOADMODULE_DEFAULT 0x00000 -#define SAL_LOADMODULE_LAZY 0x00001 -#define SAL_LOADMODULE_NOW 0x00002 -#define SAL_LOADMODULE_GLOBAL 0x00100 - -typedef void* oslModule; - -/** Generic Function pointer type that will be used as symbol address. - @see osl_getFunctionSymbol. - @see osl_getModuleURLFromFunctionAddress. -*/ -typedef void ( SAL_CALL *oslGenericFunction )( void ); - -#ifndef DISABLE_DYNLOADING - -/** Load a shared library or module. - @param strModuleName denotes the name of the module to be loaded. - @param nRtldMode denotes the mode. - @return NULL if the module could not be loaded, otherwise a handle to the module. -*/ -SAL_DLLPUBLIC oslModule SAL_CALL osl_loadModule(rtl_uString *strModuleName, sal_Int32 nRtldMode); - -/** Load a shared library or module. - @param pModuleName denotes the name of the module to be loaded. - @param nRtldMode denotes the mode. - @return NULL if the module could not be loaded, otherwise a handle to the module. - @since UDK 3.6 -*/ -SAL_DLLPUBLIC oslModule SAL_CALL osl_loadModuleAscii(const sal_Char *pModuleName, sal_Int32 nRtldMode); - -/** Load a module located relative to some other module. - - @param baseModule - must point to a function that is part of the code of some loaded module; - must not be NULL. - - @param relativePath - a relative URL; must not be NULL. - - @param mode - the SAL_LOADMODULE_xxx flags. - - @return - a non-NULL handle to the loaded module, or NULL if an error occurred. - - @since UDK 3.2.8 -*/ -SAL_DLLPUBLIC oslModule SAL_CALL osl_loadModuleRelative( - oslGenericFunction baseModule, rtl_uString * relativePath, sal_Int32 mode); - -/** Load a module located relative to some other module. - - @param baseModule - must point to a function that is part of the code of some loaded module; - must not be NULL. - - @param relativePath - a relative URL containing only ASCII (0x01--7F) characters; must not be - NULL. - - @param mode - the SAL_LOADMODULE_xxx flags. - - @return - a non-NULL handle to the loaded module, or NULL if an error occurred. - - @since LibreOffice 3.5 -*/ -SAL_DLLPUBLIC oslModule SAL_CALL osl_loadModuleRelativeAscii( - oslGenericFunction baseModule, char const * relativePath, sal_Int32 mode); - /* This function is guaranteed not to call into - FullTextEncodingDataSingleton in sal/textenc/textenc.cxx, so can be used - in its implementation without running into circles. */ - -#endif - -/** Retrieve the handle of an already loaded module. - - This function can be used to search for a function symbol in the process address space. - Do not use the returned handle as an argument to osl_unloadModule. On Unix platforms, - pModuleName gets ignored and the special handle RTLD_DEFAULT is returned. - - @param pModuleName - [in] denotes the name of the module to search for. Ignored on Unix - - @param pResult - [out] a pointer to a oslModule that is updated with the requested module handle - on success. - - @return - sal_True if the module handle could be retrieved and has been copied to *pResult. - sal_False if the module has not been loaded yet. - - @see osl_getFunctionSymbol - @see osl_getAsciiFunctionSymbol -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getModuleHandle(rtl_uString *pModuleName, oslModule *pResult); - -#ifndef DISABLE_DYNLOADING - -/** Release the module -*/ -SAL_DLLPUBLIC void SAL_CALL osl_unloadModule(oslModule Module); - -#endif - -/** lookup the specified symbol name. - @return address of the symbol or NULL if lookup failed. -*/ -SAL_DLLPUBLIC void* SAL_CALL osl_getSymbol( oslModule Module, rtl_uString *strSymbolName); - -/** Lookup the specified function symbol name. - - osl_getFunctionSymbol is an alternative function for osl_getSymbol. - Use Function pointer as symbol address to conceal type conversion. - - @param Module - [in] the handle of the Module. - - @param ustrFunctionSymbolName - [in] Name of the function that will be looked up. - - @return - <dl> - <dt>Function address.</dt> - <dd>on success</dd> - <dt>NULL</dt> - <dd>lookup failed or the parameter are invalid.</dd> - </dl> - - @see osl_getSymbol - @see osl_getAsciiFunctionSymbol -*/ -SAL_DLLPUBLIC oslGenericFunction SAL_CALL osl_getFunctionSymbol( - oslModule Module, rtl_uString *ustrFunctionSymbolName ); - -/** Lookup the specified function symbol name. - - osl_getAsciiFunctionSymbol is an alternative function for osl_getFunctionSymbol. - It expects the C-style function name string to contain ascii characters only. - - @param Module - [in] a module handle as returned by osl_loadModule or osl_getModuleHandle - - @param pSymbol - [in] Name of the function that will be looked up. - - @return - <dl> - <dt>Function address.</dt> - <dd>on success</dd> - <dt>NULL</dt> - <dd>lookup failed or the parameter are invalid.</dd> - </dl> - - @see osl_getModuleHandle - @see osl_getFunctionSymbol -*/ -SAL_DLLPUBLIC oslGenericFunction SAL_CALL osl_getAsciiFunctionSymbol( - oslModule Module, const sal_Char *pSymbol ); - - -/** Lookup URL of module which is mapped at the specified address. - @param pv specifies an address in the process memory space. - @param pustrURL receives the URL of the module that is mapped at pv. - @return sal_True on success, sal_False if no module can be found at the specified address. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getModuleURLFromAddress( - void *pv, rtl_uString **pustrURL ); - -/** Lookup URL of module which is mapped at the specified function address. - - osl_getModuleURLFromFunctionAddress is an alternative function for osl_getModuleURLFromAddress. - Use Function pointer as symbol address to conceal type conversion. - - @param pf - [in] function address in oslGenericFunction format. - - @param pustrFunctionURL - [out] receives the URL of the module that is mapped at pf. - - @return - <dl> - <dt>sal_True</dt> - <dd>on success</dd> - <dt>sal_False</dt> - <dd>no module can be found at the specified function address or parameter is somewhat invalid.</dd> - </dl> - - @see osl_getModuleURLFromAddress -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getModuleURLFromFunctionAddress( - oslGenericFunction pf, rtl_uString **pustrFunctionURL ); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_MODULE_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/module.hxx b/sal/inc/osl/module.hxx deleted file mode 100644 index 317579dc816b..000000000000 --- a/sal/inc/osl/module.hxx +++ /dev/null @@ -1,175 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_MODULE_HXX_ -#define _OSL_MODULE_HXX_ - -#include <rtl/ustring.hxx> -#include <osl/module.h> - -namespace osl -{ - -class Module -{ - Module( const Module&); - Module& operator = ( const Module&); - -public: - static sal_Bool getUrlFromAddress(void * addr, ::rtl::OUString & libraryUrl) { - return osl_getModuleURLFromAddress(addr, &libraryUrl.pData); - } - - /** Get module URL from the specified function address in the module. - - Similar to getUrlFromAddress, but use a function address to get URL of the Module. - Use Function pointer as symbol address to conceal type conversion. - - @param addr - [in] function address in oslGenericFunction format. - - @param libraryUrl - [in|out] receives the URL of the module. - - @return - <dl> - <dt>sal_True</dt> - <dd>on success</dd> - <dt>sal_False</dt> - <dd>can not get the URL from the specified function address or the parameter is invalid.</dd> - </dl> - - @see getUrlFromAddress - */ - static sal_Bool getUrlFromAddress( oslGenericFunction addr, ::rtl::OUString & libraryUrl){ - return osl_getModuleURLFromFunctionAddress( addr, &libraryUrl.pData ); - } - - Module(): m_Module(0){} - -#ifndef DISABLE_DYNLOADING - - Module( const ::rtl::OUString& strModuleName, sal_Int32 nRtldMode = SAL_LOADMODULE_DEFAULT) : m_Module(0) - { - load( strModuleName, nRtldMode); - } - -#endif - - ~Module() - { -#ifndef DISABLE_DYNLOADING - osl_unloadModule(m_Module); -#endif - } - -#ifndef DISABLE_DYNLOADING - - sal_Bool SAL_CALL load( const ::rtl::OUString& strModuleName, - sal_Int32 nRtldMode = SAL_LOADMODULE_DEFAULT) - { - unload(); - m_Module= osl_loadModule( strModuleName.pData, nRtldMode ); - return is(); - } - - /// @since UDK 3.2.8 - sal_Bool SAL_CALL loadRelative( - ::oslGenericFunction baseModule, ::rtl::OUString const & relativePath, - ::sal_Int32 mode = SAL_LOADMODULE_DEFAULT) - { - unload(); - m_Module = osl_loadModuleRelative(baseModule, relativePath.pData, mode); - return is(); - } - - /// @since LibreOffice 3.5 - sal_Bool SAL_CALL loadRelative( - oslGenericFunction baseModule, char const * relativePath, - sal_Int32 mode = SAL_LOADMODULE_DEFAULT) - { - unload(); - m_Module = osl_loadModuleRelativeAscii(baseModule, relativePath, mode); - return is(); - } - - void SAL_CALL unload() - { - if (m_Module) - { - osl_unloadModule(m_Module); - m_Module = 0; - } - } - -#endif - - sal_Bool SAL_CALL is() const - { - return m_Module != NULL; - } - - void* SAL_CALL getSymbol( const ::rtl::OUString& strSymbolName) - { - return ( osl_getSymbol( m_Module, strSymbolName.pData ) ); - } - - /** Get function address by the function name in the module. - - getFunctionSymbol is an alternative function for getSymbol. - Use Function pointer as symbol address to conceal type conversion. - - @param ustrFunctionSymbolName - [in] Function name to be looked up. - - @return - <dl> - <dt>oslGenericFunction format function address</dt> - <dd>on success</dd> - <dt>NULL</dt> - <dd>lookup failed or parameter is somewhat invalid</dd> - </dl> - - @see getSymbol - */ - oslGenericFunction SAL_CALL getFunctionSymbol( const ::rtl::OUString& ustrFunctionSymbolName ) const - { - return ( osl_getFunctionSymbol( m_Module, ustrFunctionSymbolName.pData ) ); - } - - /// @since LibreOffice 3.5 - oslGenericFunction SAL_CALL getFunctionSymbol(char const * name) const { - return osl_getAsciiFunctionSymbol(m_Module, name); - } - - operator oslModule() const - { - return m_Module; - } - -private: - oslModule m_Module; - -}; - -} - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/mutex.h b/sal/inc/osl/mutex.h deleted file mode 100644 index 1336d4fcea95..000000000000 --- a/sal/inc/osl/mutex.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_MUTEX_H_ -#define _OSL_MUTEX_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct _oslMutexImpl; -typedef struct _oslMutexImpl * oslMutex; - -/** Create a thread-local mutex. - @return 0 if the mutex could not be created, otherwise a handle to the mutex. -*/ -SAL_DLLPUBLIC oslMutex SAL_CALL osl_createMutex(void); - -/** Release the OS-structures and free mutex data-structure. - @param Mutex the mutex-handle -*/ -SAL_DLLPUBLIC void SAL_CALL osl_destroyMutex(oslMutex Mutex); - -/** Acquire the mutex, block if already acquired by another thread. - @param Mutex handle to a created mutex. - @return False if system-call fails. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_acquireMutex(oslMutex Mutex); - -/** Try to acquire the mutex without blocking. - @param Mutex handle to a created mutex. - @return False if it could not be acquired. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_tryToAcquireMutex(oslMutex Mutex); - -/** Release the mutex. - @param Mutex handle to a created mutex. - @return False if system-call fails. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_releaseMutex(oslMutex Mutex); - -/** Returns a unique and global mutex. - @return the global mutex. -*/ -SAL_DLLPUBLIC oslMutex * SAL_CALL osl_getGlobalMutex(void); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_MUTEX_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/mutex.hxx b/sal/inc/osl/mutex.hxx deleted file mode 100644 index 18ff44444223..000000000000 --- a/sal/inc/osl/mutex.hxx +++ /dev/null @@ -1,272 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_MUTEX_HXX_ -#define _OSL_MUTEX_HXX_ - -#ifdef __cplusplus - -#include <osl/mutex.h> - - -namespace osl -{ - /** A mutual exclusion synchronization object - */ - class SAL_WARN_UNUSED Mutex { - - public: - /** Create a thread-local mutex. - @return 0 if the mutex could not be created, otherwise a handle to the mutex. - @see ::osl_createMutex() - */ - Mutex() - { - mutex = osl_createMutex(); - } - - /** Release the OS-structures and free mutex data-structure. - @see ::osl_destroyMutex() - */ - ~Mutex() - { - osl_destroyMutex(mutex); - } - - /** Acquire the mutex, block if already acquired by another thread. - @return sal_False if system-call fails. - @see ::osl_acquireMutex() - */ - sal_Bool acquire() - { - return osl_acquireMutex(mutex); - } - - /** Try to acquire the mutex without blocking. - @return sal_False if it could not be acquired. - @see ::osl_tryToAcquireMutex() - */ - sal_Bool tryToAcquire() - { - return osl_tryToAcquireMutex(mutex); - } - - /** Release the mutex. - @return sal_False if system-call fails. - @see ::osl_releaseMutex() - */ - sal_Bool release() - { - return osl_releaseMutex(mutex); - } - - /** Returns a global static mutex object. - The global and static mutex object can be used to initialize other - static objects in a thread safe manner. - @return the global mutex object - @see ::osl_getGlobalMutex() - */ - static Mutex * getGlobalMutex() - { - return (Mutex *)osl_getGlobalMutex(); - } - - private: - oslMutex mutex; - - /** The underlying oslMutex has no reference count. - - Since the underlying oslMutex is not a reference counted object, copy - constructed Mutex may work on an already destructed oslMutex object. - - */ - Mutex(const Mutex&); - - /** The underlying oslMutex has no reference count. - - When destructed, the Mutex object destroys the undelying oslMutex, - which might cause severe problems in case it's a temporary object. - - */ - Mutex(oslMutex Mutex); - - /** This assignment operator is private for the same reason as - the copy constructor. - */ - Mutex& operator= (const Mutex&); - - /** This assignment operator is private for the same reason as - the constructor taking a oslMutex argument. - */ - Mutex& operator= (oslMutex); - }; - - /** A helper class for mutex objects and interfaces. - */ - template<class T> - class Guard - { - private: - Guard( const Guard& ); - const Guard& operator = ( const Guard& ); - - protected: - T * pT; - public: - - /** Acquires the object specified as parameter. - */ - Guard(T * pT_) : pT(pT_) - { - pT->acquire(); - } - - /** Acquires the object specified as parameter. - */ - Guard(T & t) : pT(&t) - { - pT->acquire(); - } - - /** Releases the mutex or interface. */ - ~Guard() - { - pT->release(); - } - }; - - /** A helper class for mutex objects and interfaces. - */ - template<class T> - class ClearableGuard - { - private: - ClearableGuard( const ClearableGuard& ); - const ClearableGuard& operator = ( const ClearableGuard& ); - protected: - T * pT; - public: - - /** Acquires the object specified as parameter. - */ - ClearableGuard(T * pT_) : pT(pT_) - { - pT->acquire(); - } - - /** Acquires the object specified as parameter. - */ - ClearableGuard(T & t) : pT(&t) - { - pT->acquire(); - } - - /** Releases the mutex or interface if not already released by clear(). - */ - ~ClearableGuard() - { - if (pT) - pT->release(); - } - - /** Releases the mutex or interface. - */ - void clear() - { - if(pT) - { - pT->release(); - pT = NULL; - } - } - }; - - /** A helper class for mutex objects and interfaces. - */ - template< class T > - class ResettableGuard : public ClearableGuard< T > - { - private: - ResettableGuard(ResettableGuard &); // not defined - void operator =(ResettableGuard &); // not defined - - protected: - T* pResetT; - public: - /** Acquires the object specified as parameter. - */ - ResettableGuard( T* pT_ ) : - ClearableGuard<T>( pT_ ), - pResetT( pT_ ) - {} - - /** Acquires the object specified as parameter. - */ - ResettableGuard( T& rT ) : - ClearableGuard<T>( rT ), - pResetT( &rT ) - {} - - /** Re-aquires the mutex or interface. - */ - void reset() - { - if( pResetT ) - { - this->pT = pResetT; - this->pT->acquire(); - } - } - }; - - typedef Guard<Mutex> MutexGuard; - typedef ClearableGuard<Mutex> ClearableMutexGuard; - typedef ResettableGuard< Mutex > ResettableMutexGuard; - - /** SolarMutex interface, needed for SolarMutex. - Deprecated, used just for Application::GetSolarMutex(). - */ - class SolarMutex - { - public: - /** Blocks if mutex is already in use - */ - virtual void SAL_CALL acquire() = 0; - - /** Tries to get the mutex without blocking. - */ - virtual sal_Bool SAL_CALL tryToAcquire() = 0; - - /** Releases the mutex. - */ - virtual void SAL_CALL release() = 0; - - protected: - SolarMutex() {} - virtual ~SolarMutex() {} - }; - typedef osl::Guard< SolarMutex > SolarGuard; - typedef osl::ClearableGuard< SolarMutex > ClearableSolarGuard; - typedef osl::ResettableGuard< SolarMutex > ResettableSolarGuard; -} - -#endif /* __cplusplus */ -#endif /* _OSL_MUTEX_HXX_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/nlsupport.h b/sal/inc/osl/nlsupport.h deleted file mode 100644 index 9af93d9237ec..000000000000 --- a/sal/inc/osl/nlsupport.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - - -#ifndef _OSL_NLSUPPORT_H_ -#define _OSL_NLSUPPORT_H_ - -#include "sal/config.h" - -#include "rtl/locale.h" -#include "rtl/textenc.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - Determines the text encoding used by the underlying platform for the - specified locale. - - @param pLocale - the locale to return the text encoding for. If this parameter is NULL, - the default locale of the current process is used. - - @returns the rtl_TextEncoding that matches the platform specific encoding - description or RTL_TEXTENCODING_DONTKNOW if no mapping is available. -*/ - -SAL_DLLPUBLIC rtl_TextEncoding SAL_CALL osl_getTextEncodingFromLocale( - rtl_Locale * pLocale ); - - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_NLSUPPORT_H_ */ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/pipe.h b/sal/inc/osl/pipe.h deleted file mode 100644 index 52ba8b9813e6..000000000000 --- a/sal/inc/osl/pipe.h +++ /dev/null @@ -1,97 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - - -#ifndef _OSL_PIPE_H_ -#define _OSL_PIPE_H_ - -#include "sal/config.h" - -#include "osl/security.h" -#include "rtl/ustring.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - osl_Pipe_E_None, /* no error */ - osl_Pipe_E_NotFound, /* Pipe could not be found */ - osl_Pipe_E_AlreadyExists, /* Pipe already exists */ - osl_Pipe_E_NoProtocol, /* Protocol not available */ - osl_Pipe_E_NetworkReset, /* Network dropped connection because of reset */ - osl_Pipe_E_ConnectionAbort, /* Software caused connection abort */ - osl_Pipe_E_ConnectionReset, /* Connection reset by peer */ - osl_Pipe_E_NoBufferSpace, /* No buffer space available */ - osl_Pipe_E_TimedOut, /* Connection timed out */ - osl_Pipe_E_ConnectionRefused, /* Connection refused */ - osl_Pipe_E_invalidError, /* unmapped error: always last entry in enum! */ - osl_Pipe_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslPipeError; - -typedef sal_uInt32 oslPipeOptions; -#define osl_Pipe_OPEN 0x0000 /* open existing pipe */ -#define osl_Pipe_CREATE 0x0001 /* create pipe and open it, fails if already existst */ - -typedef struct oslPipeImpl * oslPipe; - -/** - */ -SAL_DLLPUBLIC oslPipe SAL_CALL osl_createPipe( - rtl_uString *strPipeName, oslPipeOptions Options, oslSecurity Security); - -/** decreases the refcount of the pipe. - If the refcount drops to zero, the handle is destroyed. - */ -SAL_DLLPUBLIC void SAL_CALL osl_releasePipe( oslPipe ); - -/** increases the refcount of the pipe. - */ -SAL_DLLPUBLIC void SAL_CALL osl_acquirePipe( oslPipe Pipe ); - -/** closes the pipe, any read,write or accept actions stop immeadiatly. - */ -SAL_DLLPUBLIC void SAL_CALL osl_closePipe( oslPipe ); - - -SAL_DLLPUBLIC oslPipe SAL_CALL osl_acceptPipe(oslPipe Pipe); - -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_sendPipe(oslPipe Pipe, const void* pBuffer, sal_Int32 BufferSize); -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_receivePipe(oslPipe Pipe, void* pBuffer, sal_Int32 BufferSize); - -/** Reads blocking from the pipe. - @return Number of read bytes. If less than BufferSize, the pipe was closed. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_readPipe( oslPipe Pipe, void *pBuffer, sal_Int32 BufferSize ); - -/** Writes blocking onto the pipe. - @return Number of written bytes. If less than BufferSize, the pipe was closed. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_writePipe( oslPipe Pipe, const void *pBuffer, sal_Int32 BufferSize ); - -SAL_DLLPUBLIC oslPipeError SAL_CALL osl_getLastPipeError(oslPipe Pipe); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_PIPE_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/pipe.hxx b/sal/inc/osl/pipe.hxx deleted file mode 100644 index 906ca8b08fb8..000000000000 --- a/sal/inc/osl/pipe.hxx +++ /dev/null @@ -1,206 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _OSL_PIPE_HXX_ -#define _OSL_PIPE_HXX_ - -#include <osl/pipe_decl.hxx> - -namespace osl -{ - //______________________________________________________________________________ - inline Pipe::Pipe() - : m_handle( 0 ) - {} - - //______________________________________________________________________________ - inline Pipe::Pipe(const ::rtl::OUString& strName, oslPipeOptions Options ) - : m_handle( osl_createPipe( strName.pData, Options , 0 ) ) - {} - - //______________________________________________________________________________ - inline Pipe::Pipe(const ::rtl::OUString& strName, oslPipeOptions Options,const Security & rSecurity) - : m_handle( osl_createPipe( strName.pData, Options , rSecurity.getHandle() ) ) - {} - - //______________________________________________________________________________ - inline Pipe::Pipe(const Pipe& pipe ) - : m_handle( pipe.m_handle ) - { - if( m_handle ) - osl_acquirePipe( m_handle ); - } - - //______________________________________________________________________________ - inline Pipe::Pipe( oslPipe pipe, __sal_NoAcquire ) - : m_handle ( pipe ) - {} - - //______________________________________________________________________________ - inline Pipe::Pipe(oslPipe pipe) - : m_handle( pipe ) - { - if( m_handle ) - osl_acquirePipe( m_handle ); - } - - //______________________________________________________________________________ - inline Pipe::~Pipe() - { - if( m_handle ) - osl_releasePipe( m_handle ); - } - - //______________________________________________________________________________ - inline sal_Bool Pipe::create( const ::rtl::OUString & strName, - oslPipeOptions Options, const Security &rSec ) - { - *this = Pipe( strName, Options, rSec ); - return is(); - } - - //______________________________________________________________________________ - inline sal_Bool Pipe::create( const ::rtl::OUString & strName, oslPipeOptions Options ) - { - *this = Pipe( strName, Options ); - return is(); - } - //______________________________________________________________________________ - inline Pipe& SAL_CALL Pipe::operator= (const Pipe& pipe) - { - *this = pipe.getHandle(); - return *this; - } - - //______________________________________________________________________________ - inline Pipe & SAL_CALL Pipe::operator=( oslPipe pipe) - { - if( pipe ) - osl_acquirePipe( pipe ); - if( m_handle ) - osl_releasePipe( m_handle ); - m_handle = pipe; - return *this; - } - - //______________________________________________________________________________ - inline sal_Bool SAL_CALL Pipe::is() const - { - return m_handle != 0; - } - - //______________________________________________________________________________ - inline sal_Bool SAL_CALL Pipe::operator==( const Pipe& rPipe ) const - { - return m_handle == rPipe.m_handle; - } - - //______________________________________________________________________________ - inline void SAL_CALL Pipe::close() - { - osl_closePipe( m_handle ); - } - - //______________________________________________________________________________ - inline void SAL_CALL Pipe::clear() - { - if( m_handle ) - { - osl_releasePipe( m_handle ); - m_handle = 0; - } - } - - //______________________________________________________________________________ - inline oslPipeError SAL_CALL Pipe::accept(StreamPipe& Connection) - { - Connection = StreamPipe( osl_acceptPipe( m_handle ), SAL_NO_ACQUIRE); - if( Connection.is() ) - return osl_Pipe_E_None; - else - return getError(); - } - - //______________________________________________________________________________ - inline oslPipeError SAL_CALL Pipe::getError() const - { - return osl_getLastPipeError( 0 ); - } - - //______________________________________________________________________________ - inline oslPipe SAL_CALL Pipe::getHandle() const - { - return m_handle; - } - - //______________________________________________________________________________ - inline StreamPipe::StreamPipe(){} - - //______________________________________________________________________________ - inline StreamPipe::StreamPipe(oslPipe hPipe) - : Pipe( hPipe ) - { - } - - //______________________________________________________________________________ - inline StreamPipe::StreamPipe(const ::rtl::OUString& strName, oslPipeOptions Options, const Security &rSec ) - : Pipe( strName, Options , rSec ) - {} - - //______________________________________________________________________________ - inline StreamPipe::StreamPipe(const ::rtl::OUString& strName, oslPipeOptions Options ) - : Pipe( strName, Options ) - {} - - //______________________________________________________________________________ - inline StreamPipe::StreamPipe(const StreamPipe& aPipe) - : Pipe( aPipe ) - {} - //______________________________________________________________________________ - inline StreamPipe::StreamPipe( oslPipe pipe, __sal_NoAcquire noacquire ) - : Pipe( pipe , noacquire ) - {} - - //______________________________________________________________________________ - inline sal_Int32 SAL_CALL StreamPipe::read(void* pBuffer, sal_Int32 n) const - { - return osl_readPipe( m_handle, pBuffer, n ); - } - - //______________________________________________________________________________ - inline sal_Int32 SAL_CALL StreamPipe::write(const void* pBuffer, sal_Int32 n) const - { - return osl_writePipe( m_handle, pBuffer , n ); - } - - //______________________________________________________________________________ - inline sal_Int32 SAL_CALL StreamPipe::recv(void* pBuffer, sal_Int32 BytesToRead) const - { - return osl_receivePipe( m_handle, pBuffer , BytesToRead ); - } - - //______________________________________________________________________________ - inline sal_Int32 SAL_CALL StreamPipe::send(const void* pBuffer, sal_Int32 BytesToSend) const - { - return osl_sendPipe( m_handle, pBuffer , BytesToSend ); - } - -} -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/pipe_decl.hxx b/sal/inc/osl/pipe_decl.hxx deleted file mode 100644 index 21e07952b7ff..000000000000 --- a/sal/inc/osl/pipe_decl.hxx +++ /dev/null @@ -1,229 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _OSL_PIPE_DECL_HXX_ -#define _OSL_PIPE_DECL_HXX_ - -#include <osl/pipe.h> -# include <osl/security.hxx> -#include <rtl/ustring.hxx> - -namespace osl { - -class StreamPipe; - -/** Represents a pipe. -*/ -class Pipe -{ -protected: - oslPipe m_handle; - -public: - - /** Does not create a pipe. Use assignment operator to - make this a useable pipe. - */ - inline Pipe(); - - /** Creates an insecure pipe that is accessible for all users. - @param strName - @param Options - */ - inline Pipe(const ::rtl::OUString& strName, oslPipeOptions Options); - - /** Creates a secure pipe that access depends on the umask settings. - @param strName - @param Options - @param rSecurity - */ - inline Pipe(const ::rtl::OUString& strName, oslPipeOptions Options,const Security & rSecurity); - - /** Copy constructor. - */ - inline Pipe(const Pipe& pipe); - - /** Constructs a Pipe reference without acquiring the handle - */ - inline Pipe( oslPipe pipe, __sal_NoAcquire noacquire ); - - /** Creates pipe as wrapper around the underlying oslPipe. - @param Pipe - */ - inline Pipe(oslPipe Pipe); - - /** Destructor. Destroys the underlying oslPipe. - */ - inline ~Pipe(); - - inline sal_Bool SAL_CALL is() const; - - /** Creates an insecure pipe that is accessible for all users - with the given attributes. - If the pipe was already created, the old one will be discarded. - @param strName - @param Options - @param rSec - @return True if socket was successfully created. - */ - inline sal_Bool create( const ::rtl::OUString & strName, - oslPipeOptions Options, const Security &rSec ); - - /** Creates a secure that access rights depend on the umask settings - with the given attributes. - - If socket was already created, the old one will be discarded. - @param strName - @param Options - @return True if socket was successfully created. - */ - inline sal_Bool create( const ::rtl::OUString & strName, oslPipeOptions Options = osl_Pipe_OPEN ); - - /** releases the underlying handle - */ - inline void SAL_CALL clear(); - - /** Assignment operator. If pipe was already created, the old one will - be discarded. - */ - inline Pipe& SAL_CALL operator= (const Pipe& pipe); - - /** Assignment operator. If pipe was already created, the old one will - be discarded. - */ - inline Pipe& SAL_CALL operator= (const oslPipe pipe ); - - /** Checks if the pipe is valid. - @return True if the object represents a valid pipe. - */ - inline sal_Bool SAL_CALL isValid() const; - - inline sal_Bool SAL_CALL operator==( const Pipe& rPipe ) const; - - /** Closes the pipe. - */ - inline void SAL_CALL close(); - - /** Accept connection on an existing pipe - */ - inline oslPipeError SAL_CALL accept(StreamPipe& Connection); - - - /** Delivers a constant decribing the last error for the pipe system. - @return ENONE if no error occurred, invalid_PipeError if - an unknown (unmapped) error occurred, otherwise an enum describing the - error. - */ - inline oslPipeError SAL_CALL getError() const; - - inline oslPipe SAL_CALL getHandle() const; -}; - -/** A pipe to send or receive a stream of data. -*/ -class StreamPipe : public Pipe -{ -public: - - /** Creates an unattached pipe. You must attach the pipe to an oslPipe - e.g. by using the operator=(oslPipe), before you can use the stream- - functionality of the object. - */ - inline StreamPipe(); - - /** Creates pipe as wrapper around the underlying oslPipe. - @param Pipe - */ - inline StreamPipe(oslPipe Pipe); - - /** Copy constructor. - @param Pipe - */ - inline StreamPipe(const StreamPipe& Pipe); - - /** Creates a pipe. - @param strName - @param Options - */ - inline StreamPipe(const ::rtl::OUString& strName, oslPipeOptions Options = osl_Pipe_OPEN); - - /** Creates a pipe. - @param strName - @param Options - @param rSec - */ - inline StreamPipe(const ::rtl::OUString& strName, oslPipeOptions Options, const Security &rSec ); - - /** Constructs a Pipe reference without acquiring the handle - */ - inline StreamPipe( oslPipe pipe, __sal_NoAcquire noacquire ); - - /** Attaches the oslPipe to this object. If the object - already was attached to an oslPipe, the old one will - be closed and destroyed. - @param Pipe - */ - inline StreamPipe & SAL_CALL operator=(oslPipe Pipe); - - /** Assignment operator - */ - inline StreamPipe& SAL_CALL operator=(const Pipe& pipe); - - /** Tries to receives BytesToRead data from the connected pipe, - - @param pBuffer [out] Points to a buffer that will be filled with the received - data. - @param BytesToRead [in] The number of bytes to read. pBuffer must have at least - this size. - @return the number of received bytes. - */ - inline sal_Int32 SAL_CALL recv(void* pBuffer, sal_Int32 BytesToRead) const; - - /** Tries to sends BytesToSend data from the connected pipe. - - @param pBuffer [in] Points to a buffer that contains the send-data. - @param BytesToSend [in] The number of bytes to send. pBuffer must have at least - this size. - @return the number of transfered bytes. - */ - inline sal_Int32 SAL_CALL send(const void* pBuffer, sal_Int32 BytesToSend) const; - - /** Retrieves n bytes from the stream and copies them into pBuffer. - The method avoids incomplete reads due to packet boundaries. - @param pBuffer receives the read data. - @param n the number of bytes to read. pBuffer must be large enough - to hold the n bytes! - @return the number of read bytes. The number will only be smaller than - n if an exceptional condition (e.g. connection closed) occurs. - */ - inline sal_Int32 SAL_CALL read(void* pBuffer, sal_Int32 n) const; - - /** Writes n bytes from pBuffer to the stream. The method avoids - incomplete writes due to packet boundaries. - @param pBuffer contains the data to be written. - @param n the number of bytes to write. - @return the number of written bytes. The number will only be smaller than - n if an exceptional condition (e.g. connection closed) occurs. - */ - sal_Int32 SAL_CALL write(const void* pBuffer, sal_Int32 n) const; -}; - -} -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/process.h b/sal/inc/osl/process.h deleted file mode 100644 index 241f9a857552..000000000000 --- a/sal/inc/osl/process.h +++ /dev/null @@ -1,451 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - - -#ifndef _OSL_PROCESS_H_ -#define _OSL_PROCESS_H_ - -#include "sal/config.h" - -#include "osl/file.h" -#include "osl/pipe.h" -#include "osl/security.h" -#include "osl/socket.h" -#include "osl/time.h" -#include "rtl/locale.h" -#include "rtl/textenc.h" -#include "rtl/ustring.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -typedef sal_Int32 oslProcessOption; -#define osl_Process_WAIT 0x0001 /* wait for completion */ -#define osl_Process_SEARCHPATH 0x0002 /* search path for executable */ -#define osl_Process_DETACHED 0x0004 /* run detached */ -#define osl_Process_NORMAL 0x0000 /* run in normal window */ -#define osl_Process_HIDDEN 0x0010 /* run hidden */ -#define osl_Process_MINIMIZED 0x0020 /* run in minimized window */ -#define osl_Process_MAXIMIZED 0x0040 /* run in maximized window */ -#define osl_Process_FULLSCREEN 0x0080 /* run in fullscreen window */ - -typedef sal_Int32 oslProcessData; - -/* defines for osl_getProcessInfo , can be OR'ed */ -#define osl_Process_IDENTIFIER 0x0001 /* retrieves the process identifier */ -#define osl_Process_EXITCODE 0x0002 /* retrieves exit code of the process */ -#define osl_Process_CPUTIMES 0x0004 /* retrieves used cpu time */ -#define osl_Process_HEAPUSAGE 0x0008 /* retrieves the used size of heap */ - -typedef sal_uInt32 oslProcessIdentifier; -typedef sal_uInt32 oslProcessExitCode; - -typedef enum { - osl_Process_E_None, /* no error */ - osl_Process_E_NotFound, /* image not found */ - osl_Process_E_TimedOut, /* timout occurred */ - osl_Process_E_NoPermission, /* permission denied */ - osl_Process_E_Unknown, /* unknown error */ - osl_Process_E_InvalidError, /* unmapped error */ - osl_Process_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslProcessError; - -typedef enum { - osl_Process_TypeNone, /* no descriptor */ - osl_Process_TypeSocket, /* socket */ - osl_Process_TypeFile, /* file */ - osl_Process_TypePipe, /* pipe */ - osl_Process_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslDescriptorType; - -typedef sal_Int32 oslDescriptorFlag; -#define osl_Process_DFNONE 0x0000 -#define osl_Process_DFWAIT 0x0001 - -#ifdef SAL_W32 -# pragma pack(push, 8) -#endif - -typedef struct { - sal_uInt32 Size; - oslProcessData Fields; - oslProcessIdentifier Ident; - oslProcessExitCode Code; - TimeValue UserTime; - TimeValue SystemTime; - sal_uInt32 HeapUsage; -} oslProcessInfo; - -#if defined( SAL_W32) -# pragma pack(pop) -#endif - -/** Process handle - - @see osl_executeProcess - @see osl_terminateProcess - @see osl_freeProcessHandle - @see osl_getProcessInfo - @see osl_joinProcess -*/ -typedef void* oslProcess; - -/** Execute a process. - - Executes the program image provided in strImageName in a new process. - - @param ustrImageName - [in] The file URL of the executable to be started. - Can be NULL in this case the file URL of the executable must be the first element - in ustrArguments. - - @param ustrArguments - [in] An array of argument strings. Can be NULL if strImageName is not NULL. - If strImageName is NULL it is expected that the first element contains - the file URL of the executable to start. - - @param nArguments - [in] The number of arguments provided. If this number is 0 strArguments will be ignored. - - @param Options - [in] A combination of int-constants to describe the mode of execution. - - @param Security - [in] The user and his rights for which the process is started. May be NULL in which case - the process will be started in the context of the current user. - - @param ustrDirectory - [in] The file URL of the working directory of the new proces. If the specified directory - does not exist or is inaccessible the working directory of the newly created process - is undefined. If this parameter is NULL or the caller provides an empty string the - new process will have the same current working directory as the calling process. - - @param ustrEnvironments - [in] An array of strings describing environment variables that should be merged into the - environment of the new process. Each string has to be in the form "variable=value". - This parameter can be NULL in which case the new process gets the same environment - as the parent process. - - @param nEnvironmentVars - [in] The number of environment variables to set. - - @param pProcess - [out] Pointer to a oslProcess variable, wich receives the handle of the newly created process. - This parameter must not be NULL. - - @return - <dl> - <dt>osl_Process_E_None</dt> - <dd>on success</dd> - <dt>osl_Process_E_NotFound</dt> - <dd>if the specified executable could not be found</dd> - <dt>osl_Process_E_InvalidError</dt> - <dd>if invalid parameters will be detected</dd> - <dt>osl_Process_E_Unknown</dt> - <dd>if arbitrary other errors occur</dd> - </dl> - - @see oslProcessOption - @see osl_executeProcess_WithRedirectedIO - @see osl_freeProcessHandle - @see osl_loginUser -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_executeProcess( - rtl_uString* ustrImageName, - rtl_uString* ustrArguments[], - sal_uInt32 nArguments, - oslProcessOption Options, - oslSecurity Security, - rtl_uString* ustrDirectory, - rtl_uString* ustrEnvironments[], - sal_uInt32 nEnvironmentVars, - oslProcess* pProcess); - - -/** Execute a process and redirect child process standard IO. - - @param strImageName - [in] The file URL of the executable to be started. - Can be NULL in this case the file URL of the executable must be the first element - in ustrArguments. - - @param ustrArguments - [in] An array of argument strings. Can be NULL if strImageName is not NULL. - If strImageName is NULL it is expected that the first element contains - the file URL of the executable to start. - - @param nArguments - [in] The number of arguments provided. If this number is 0 strArguments will be ignored. - - @param Options - [in] A combination of int-constants to describe the mode of execution. - - @param Security - [in] The user and his rights for which the process is started. May be NULL in which case - the process will be started in the context of the current user. - - @param ustrDirectory - [in] The file URL of the working directory of the new proces. If the specified directory - does not exist or is inaccessible the working directory of the newly created process - is undefined. If this parameter is NULL or the caller provides an empty string the - new process will have the same current working directory as the calling process. - - @param ustrEnvironments - [in] An array of strings describing environment variables that should be merged into the - environment of the new process. Each string has to be in the form "variable=value". - This parameter can be NULL in which case the new process gets the same environment - as the parent process. - - @param nEnvironmentVars - [in] The number of environment variables to set. - - @param pProcess - [out] Pointer to a oslProcess variable, wich receives the handle of the newly created process. - This parameter must not be NULL. - - @param pChildInputWrite - [in] Pointer to a oslFileHandle variable that receives the handle which can be used to write - to the child process standard input device. The returned handle is not random accessible. - The handle has to be closed with osl_closeFile if no longer used. This parameter can be NULL. - - @param pChildOutputRead - [in] Pointer to a oslFileHandle variable that receives the handle which can be used to read from - the child process standard output device. The returned handle is not random accessible. - The Handle has to be closed with osl_closeFile if no longer used. This parameter can be NULL. - - @param pChildErrorRead - [in] Pointer to a oslFileHandle variable that receives the handle which can be used to read from - the child process standard error device. The returned handle is not random accessible. - The Handle has to be closed with osl_closeFile if no longer used. This parameter can be NULL. - - @return - <dl> - <dt>osl_Process_E_None</dt> - <dd>on success</dd> - <dt>osl_Process_E_NotFound</dt> - <dd>if the specified executable could not be found</dd> - <dt>osl_Process_E_InvalidError</dt> - <dd>if invalid parameters will be detected</dd> - <dt>osl_Process_E_Unknown</dt> - <dd>if arbitrary other errors occur</dd> - </dl> - - @see oslProcessOption - @see osl_executeProcess - @see osl_freeProcessHandle - @see osl_loginUser - @see osl_closeFile -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_executeProcess_WithRedirectedIO( - rtl_uString* strImageName, - rtl_uString* ustrArguments[], - sal_uInt32 nArguments, - oslProcessOption Options, - oslSecurity Security, - rtl_uString* ustrDirectory, - rtl_uString* ustrEnvironments[], - sal_uInt32 nEnvironmentVars, - oslProcess* pProcess, - oslFileHandle* pChildInputWrite, - oslFileHandle* pChildOutputRead, - oslFileHandle* pChildErrorRead); - -/** Terminate a process - @param Process [in] the handle of the process to be terminated - - @see osl_executeProcess - @see osl_getProcess - @see osl_joinProcess - */ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_terminateProcess( - oslProcess Process); - - -/** @deprecated - Retrieve the process handle of a process identifier - @param Ident [in] a process identifier - - @return the process handle on success, NULL in all other cases - */ -SAL_DLLPUBLIC oslProcess SAL_CALL osl_getProcess( - oslProcessIdentifier Ident); - - -/** Free the specified proces-handle. - @param Process [in] -*/ -SAL_DLLPUBLIC void SAL_CALL osl_freeProcessHandle( - oslProcess Process); - - -/** Wait for completation of the specified childprocess. - @param Process [in] - @return ols_Process_E_None - @see osl_executeProcess -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_joinProcess( - oslProcess Process); - -/** Wait with a timeout for the completion of the specified child - process. - - @param Process [in] - A process identifier. - - @param pTimeout [in] - A timeout value or NULL for infinite waiting. - The unit of resolution is second. - - @return - osl_Process_E_None on success - osl_Process_E_TimedOut waiting for the child process timed out - osl_Process_E_Unknown an error occurred or the parameter are invalid - - @see osl_executeProcess -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_joinProcessWithTimeout( - oslProcess Process, const TimeValue* pTimeout); - -/** Retrieves information about a Process - @param[in] Process the process handle of the process - @param[in] Fields the information which is to be retrieved - this can be one or more of - osl_Process_IDENTIFIER - osl_Process_EXITCODE - osl_Process_CPUTIMES - osl_Process_HEAPUSAGE - @param[out] pInfo a pointer to a vaid oslProcessInfo structure. - the Size field has to be initialized with the size - of the oslProcessInfo structure. - on success the Field member holds the (or'ed) - retrieved valid information fields. - @return osl_Process_E_None on success, osl_Process_E_Unknown on failure. - */ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_getProcessInfo( - oslProcess Process, oslProcessData Fields, oslProcessInfo* pInfo); - -/** Get the filename of the executable. - @param strFile [out] the string that receives the executable file path. - @return osl_Process_E_None or does not return. - @see osl_executeProcess -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_getExecutableFile( - rtl_uString **strFile); - -/** @return the number of commandline arguments passed to the main-function of - this process - @see osl_getCommandArg -*/ -SAL_DLLPUBLIC sal_uInt32 SAL_CALL osl_getCommandArgCount(void); - -/** Get the nArg-th command-line argument passed to the main-function of this process. - @param nArg [in] The number of the argument to return. - @param strCommandArg [out] The string receives the nArg-th command-line argument. - @return osl_Process_E_None or does not return. - @see osl_executeProcess -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_getCommandArg( - sal_uInt32 nArg, rtl_uString **strCommandArg); - -/** Set the command-line arguments as passed to the main-function of this process. - - Depricated: This function is only for internal use. Passing the args from main will - only work for Unix, on Windows there's no effect, the full command line will automtically - be taken. This is due to Windows 9x/ME limitation that don't allow UTF-16 wmain to provide - a osl_setCommandArgsU( int argc, sal_Unicode **argv ); - - @param argc [in] The number of elements in the argv array. - @param argv [in] The array of command-line arguments. - @see osl_getExecutableFile - @see osl_getCommandArgCount - @see osl_getCommandArg -*/ -SAL_DLLPUBLIC void SAL_CALL osl_setCommandArgs (int argc, char **argv); - -/** Get the value of one enviroment variable. - @param strVar [in] denotes the name of the variable to get. - @param strValue [out] string that receives the value of environment variable. -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_getEnvironment( - rtl_uString *strVar, rtl_uString **strValue); - -/** Set the value of one enviroment variable. - @param strVar [in] denotes the name of the variable to set. - @param strValue [in] string of the new value of environment variable. - - @since UDK 3.2.13 -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_setEnvironment( - rtl_uString *strVar, rtl_uString *strValue); - -/** Unsets the value of one enviroment variable. - @param strVar [in] denotes the name of the variable to unset. - - @since UDK 3.2.13 -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_clearEnvironment( - rtl_uString *strVar); - -/** Get the working directory of the current process as a file URL. - - The file URL is encoded as common for the OSL file API. - @param pustrWorkingDir [out] string that receives the working directory file URL. -*/ - -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_getProcessWorkingDir( - rtl_uString **pustrWorkingDir ); - -/** Get the locale the process is currently running in. - - The unix implementation caches the value it returns, so if you have to change the locale - your are running in, you will have to use osl_setProcessLocale therefor. - - @param ppLocale [out] a pointer that receives the currently selected locale structure - @see osl_setProcessLocale -*/ - -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_getProcessLocale( - rtl_Locale ** ppLocale ); - -/** Change the locale of the process. - - @param pLocale [in] a pointer to the locale to be set - @see osl_getProcessLocale -*/ - -SAL_DLLPUBLIC oslProcessError SAL_CALL osl_setProcessLocale( - rtl_Locale * pLocale ); - - -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_sendResourcePipe( - oslPipe Pipe, oslSocket Socket ); - -SAL_DLLPUBLIC oslSocket SAL_CALL osl_receiveResourcePipe( - oslPipe Pipe ); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_PROCESS_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/profile.h b/sal/inc/osl/profile.h deleted file mode 100644 index fcbf898c5754..000000000000 --- a/sal/inc/osl/profile.h +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_PROFILE_H_ -#define _OSL_PROFILE_H_ - -#include "sal/config.h" - -#include "rtl/ustring.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef sal_uInt32 oslProfileOption; - -#define osl_Profile_DEFAULT 0x0000 -#define osl_Profile_SYSTEM 0x0001 /* use system depended functinality */ -#define osl_Profile_READLOCK 0x0002 /* lock file for reading */ -#define osl_Profile_WRITELOCK 0x0004 /* lock file for writing */ -#define osl_Profile_FLUSHWRITE 0x0010 /* writing only with flush */ - - -typedef void* oslProfile; - -/** Deprecated API. - Open or create a configuration profile. - @return 0 if the profile could not be created, otherwise a handle to the profile. - @deprecated -*/ -SAL_DLLPUBLIC oslProfile SAL_CALL osl_openProfile( - rtl_uString *strProfileName, oslProfileOption Options); - -/** Deprecated API. - Close the opened profile an flush all data to the disk. - @param Profile handle to a opened profile. - @deprecated -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_closeProfile( - oslProfile Profile); - - -/** Deprecated API. - @deprecated -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_flushProfile( - oslProfile Profile); -/** Deprecated API. - @deprecated -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_readProfileString( - oslProfile Profile, - const sal_Char* pszSection, const sal_Char* pszEntry, - sal_Char* pszString, sal_uInt32 MaxLen, - const sal_Char* pszDefault); -/** Deprecated API. - @deprecated -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_readProfileBool( - oslProfile Profile, - const sal_Char* pszSection, const sal_Char* pszEntry, - sal_Bool Default); -/** Deprecated API. - @deprecated -*/ -SAL_DLLPUBLIC sal_uInt32 SAL_CALL osl_readProfileIdent( - oslProfile Profile, - const sal_Char* pszSection, const sal_Char* pszEntry, - sal_uInt32 FirstId, const sal_Char* Strings[], - sal_uInt32 Default); - -/** Deprecated API. - @deprecated -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_writeProfileString( - oslProfile Profile, - const sal_Char* pszSection, const sal_Char* pszEntry, - const sal_Char* pszString); -/** Deprecated API. - @deprecated -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_writeProfileBool( - oslProfile Profile, - const sal_Char* pszSection, const sal_Char* pszEntry, - sal_Bool Value); -/** Deprecated API. - @deprecated -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_writeProfileIdent( - oslProfile Profile, - const sal_Char* pszSection, const sal_Char* pszEntry, - sal_uInt32 FirstId, const sal_Char* Strings[], - sal_uInt32 Value); - -/** Deprecated API. - Acquire the mutex, block if already acquired by another thread. - @return False if section or entry could not be found. - @deprecated -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_removeProfileEntry( - oslProfile Profile, - const sal_Char *pszSection, const sal_Char *pszEntry); - -/** Deprecated API. - Get all entries belonging to the specified section. - @return Pointer to a array of pointers. - @deprecated -*/ -SAL_DLLPUBLIC sal_uInt32 SAL_CALL osl_getProfileSectionEntries( - oslProfile Profile, const sal_Char *pszSection, - sal_Char* pszBuffer, sal_uInt32 MaxLen); - -/** Deprecated API. - Get all section entries - @return Pointer to a array of pointers. - @deprecated -*/ -SAL_DLLPUBLIC sal_uInt32 SAL_CALL osl_getProfileSections( - oslProfile Profile, sal_Char* pszBuffer, sal_uInt32 MaxLen); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_PROFILE_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/profile.hxx b/sal/inc/osl/profile.hxx deleted file mode 100644 index 452a37cbff39..000000000000 --- a/sal/inc/osl/profile.hxx +++ /dev/null @@ -1,196 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_PROFILE_HXX_ -#define _OSL_PROFILE_HXX_ - -#include "profile.h" -#include <rtl/ustring.hxx> -#include <string.h> -#include <list> - -namespace osl { - - typedef oslProfileOption ProfileOption; - - const int Profile_DEFAULT = osl_Profile_DEFAULT; - const int Profile_SYSTEM = osl_Profile_SYSTEM; /* use system depended functinality */ - const int Profile_READLOCK = osl_Profile_READLOCK; /* lock file for reading */ - const int Profile_WRITELOCK = osl_Profile_WRITELOCK; /* lock file for writing */ - - /** Deprecated API. - @deprecated - */ - class Profile { - oslProfile profile; - - public: - /** Open or create a configuration profile. - @return 0 if the profile could not be created, otherwise a handle to the profile. - */ - Profile(const rtl::OUString strProfileName, oslProfileOption Options = Profile_DEFAULT ) - { - profile = osl_openProfile(strProfileName.pData, Options); - if( ! profile ) - throw std::exception(); - } - - - /** Close the opened profile an flush all data to the disk. - */ - ~Profile() - { - osl_closeProfile(profile); - } - - - sal_Bool flush() - { - return osl_flushProfile(profile); - } - - rtl::OString readString( const rtl::OString& rSection, const rtl::OString& rEntry, - const rtl::OString& rDefault) - { - sal_Char aBuf[1024]; - return osl_readProfileString( profile, - rSection.getStr(), - rEntry.getStr(), - aBuf, - sizeof( aBuf ), - rDefault.getStr() ) ? rtl::OString( aBuf ) : rtl::OString(); - - } - - sal_Bool readBool( const rtl::OString& rSection, const rtl::OString& rEntry, sal_Bool bDefault ) - { - return osl_readProfileBool( profile, rSection.getStr(), rEntry.getStr(), bDefault ); - } - - sal_uInt32 readIdent(const rtl::OString& rSection, const rtl::OString& rEntry, - sal_uInt32 nFirstId, const std::list< rtl::OString >& rStrings, - sal_uInt32 nDefault) - { - int nItems = rStrings.size(); - const sal_Char** pStrings = new const sal_Char*[ nItems+1 ]; - std::list< rtl::OString >::const_iterator it = rStrings.begin(); - nItems = 0; - while( it != rStrings.end() ) - { - pStrings[ nItems++ ] = it->getStr(); - ++it; - } - pStrings[ nItems ] = NULL; - sal_uInt32 nRet = osl_readProfileIdent(profile, rSection.getStr(), rEntry.getStr(), nFirstId, pStrings, nDefault); - delete pStrings; - return nRet; - } - - sal_Bool writeString(const rtl::OString& rSection, const rtl::OString& rEntry, - const rtl::OString& rString) - { - return osl_writeProfileString(profile, rSection.getStr(), rEntry.getStr(), rString.getStr()); - } - - sal_Bool writeBool(const rtl::OString& rSection, const rtl::OString& rEntry, sal_Bool Value) - { - return osl_writeProfileBool(profile, rSection.getStr(), rEntry.getStr(), Value); - } - - sal_Bool writeIdent(const rtl::OString& rSection, const rtl::OString& rEntry, - sal_uInt32 nFirstId, const std::list< rtl::OString >& rStrings, - sal_uInt32 nValue) - { - int nItems = rStrings.size(); - const sal_Char** pStrings = new const sal_Char*[ nItems+1 ]; - std::list< rtl::OString >::const_iterator it = rStrings.begin(); - nItems = 0; - while( it != rStrings.end() ) - { - pStrings[ nItems++ ] = it->getStr(); - ++it; - } - pStrings[ nItems ] = NULL; - sal_Bool bRet = - osl_writeProfileIdent(profile, rSection.getStr(), rEntry.getStr(), nFirstId, pStrings, nValue ); - delete pStrings; - return bRet; - } - - /** Remove an entry from a section. - @param rSection Name of the section. - @param rEntry Name of the entry to remove. - @return False if section or entry could not be found. - */ - sal_Bool removeEntry(const rtl::OString& rSection, const rtl::OString& rEntry) - { - return osl_removeProfileEntry(profile, rSection.getStr(), rEntry.getStr()); - } - - /** Get all entries belonging to the specified section. - @param rSection Name of the section. - @return Pointer to a array of pointers. - */ - std::list< rtl::OString > getSectionEntries(const rtl::OString& rSection ) - { - std::list< rtl::OString > aEntries; - - // count buffer size necessary - int n = osl_getProfileSectionEntries( profile, rSection.getStr(), NULL, 0 ); - if( n > 1 ) - { - sal_Char* pBuf = new sal_Char[ n+1 ]; - osl_getProfileSectionEntries( profile, rSection.getStr(), pBuf, n+1 ); - int nLen; - for( n = 0; ( nLen = strlen( pBuf+n ) ); n += nLen+1 ) - aEntries.push_back( rtl::OString( pBuf+n ) ); - delete pBuf; - } - - return aEntries; - } - - /** Get all section entries - @return Pointer to a array of pointers. - */ - std::list< rtl::OString > getSections() - { - std::list< rtl::OString > aSections; - - // count buffer size necessary - int n = osl_getProfileSections( profile, NULL, 0 ); - if( n > 1 ) - { - sal_Char* pBuf = new sal_Char[ n+1 ]; - osl_getProfileSections( profile, pBuf, n+1 ); - int nLen; - for( n = 0; ( nLen = strlen( pBuf+n ) ); n += nLen+1 ) - aSections.push_back( rtl::OString( pBuf+n ) ); - delete pBuf; - } - - return aSections; - } - }; -} - -#endif /* _OSL_PROFILE_HXX_ */ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/security.h b/sal/inc/osl/security.h deleted file mode 100644 index b24625761731..000000000000 --- a/sal/inc/osl/security.h +++ /dev/null @@ -1,163 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_SECURITY_H_ -#define _OSL_SECURITY_H_ - -#include "sal/config.h" - -#include "rtl/ustring.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - osl_Security_E_None, - osl_Security_E_UserUnknown, - osl_Security_E_WrongPassword, - osl_Security_E_Unknown, - osl_Security_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSecurityError; - -/** Process handle - @see osl_loginUser - @see osl_freeSecurityHandle - @see osl_executeProcess -*/ -typedef void* oslSecurity; - -/** Create a security handle for the current user. - @return a security handle or NULL on failure. - @see osl_freeSecurityHandle - @see osl_executeProcess - @see osl_executeApplication -*/ -SAL_DLLPUBLIC oslSecurity SAL_CALL osl_getCurrentSecurity(void); - -/** Deprecated API - Create a security handle for the denoted user. - Try to log in the user on the local system. - @param[in] strUserName denotes the name of the user to logg in. - @param[in] strPasswd the password for this user. - @param[out] pSecurity returns the security handle if user could be logged in. - @return osl_Security_E_None if user could be logged in, otherwise an error-code. - @see osl_freeSecurityHandle - @see osl_executeProcess - @see osl_executeApplication -*/ -SAL_DLLPUBLIC oslSecurityError SAL_CALL osl_loginUser( - rtl_uString *strUserName, - rtl_uString *strPasswd, - oslSecurity *pSecurity - ); - -/** Create a security handle for the denoted user. - Try to log in the user on the denoted file server. On success the homedir will be - the maped drive on this server. - @param[in] strUserName denotes the name of the user to logg in. - @param[in] strPasswd the password for this user. - @param[in] strFileServer denotes the file server on wich the user is logged in. - @param[out] pSecurity returns the security handle if user could be logged in. - @return osl_Security_E_None if user could be logged in, otherwise an error-code. - @see osl_freeSecurityHandle - @see osl_executeProcess - @see osl_executeApplication -*/ -SAL_DLLPUBLIC oslSecurityError SAL_CALL osl_loginUserOnFileServer( - rtl_uString *strUserName, - rtl_uString *strPasswd, - rtl_uString *strFileServer, - oslSecurity *pSecurity - ); - -/** Query if the user who is denotes by this security has administrator rigths. - @param[in] Security the security handle for th user. - @return True, if the user has adminsitrator rights, otherwise false. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isAdministrator( - oslSecurity Security); - -/** Free the security handle, created by osl_loginUser or osl_getCurrentSecurity. - @param[in] Security the security handle. - @see osl_loginUser -*/ -SAL_DLLPUBLIC void SAL_CALL osl_freeSecurityHandle( - oslSecurity Security); - -/** Get the login ident for the user of this security handle. - @param[in] Security the security handle. - @param[out] strIdent the string that receives the ident on success. - @return True, if the security handle is valid, otherwise False. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getUserIdent( - oslSecurity Security, rtl_uString **strIdent); - -/** Get the login name for the user of this security handle. - @param[in] Security the security handle. - @param[out] strName the string that receives the user name on success. - @return True, if the security handle is valid, otherwise False. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getUserName( - oslSecurity Security, rtl_uString **strName); - -/** Get the home directory of the user of this security handle. - @param[in] Security the security handle. - @param[out] strDirectory the string that receives the directory path on success. - @return True, if the security handle is valid, otherwise False. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getHomeDir( - oslSecurity Security, rtl_uString **strDirectory); - -/** Get the directory for configuration data of the user of this security handle. - @param[in] Security the security handle. - @param[out] strDirectory the string that receives the directory path on success. - @return True, if the security handle is valid, otherwise False. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getConfigDir( - oslSecurity Security, rtl_uString **strDirectory); - - -/** Load Profile of the User - Implemented just for Windows - @param[in] Security previously fetch Security of the User - @return True if the Profile could successfully loaded, False otherwise. -*/ - -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_loadUserProfile( - oslSecurity Security); - - -/** Unload a User Profile - Implemented just for Windows - @param[in] Security previously fetch Security of the User - @return nothing is returned! -*/ - -SAL_DLLPUBLIC void SAL_CALL osl_unloadUserProfile( - oslSecurity Security); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_SECURITY_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/security.hxx b/sal/inc/osl/security.hxx deleted file mode 100644 index 941b2c5980a8..000000000000 --- a/sal/inc/osl/security.hxx +++ /dev/null @@ -1,103 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_SECURITY_HXX_ -#define _OSL_SECURITY_HXX_ - -#include <rtl/ustring.hxx> - -#ifndef _OSL_SECURITY_DECL_HXX -# include <osl/security_decl.hxx> -#endif - -namespace osl -{ - -inline Security::Security() -{ - m_handle = osl_getCurrentSecurity(); -} - -inline Security::~Security() -{ - osl_freeSecurityHandle(m_handle); -} - -inline sal_Bool Security::logonUser(const rtl::OUString& strName, - const rtl::OUString& strPasswd) -{ - osl_freeSecurityHandle(m_handle); - - m_handle = 0; - - return (osl_loginUser( strName.pData, strPasswd.pData, &m_handle) - == osl_Security_E_None); -} - -inline sal_Bool Security::logonUser( const rtl::OUString& strName, - const rtl::OUString& strPasswd, - const rtl::OUString& strFileServer ) -{ - osl_freeSecurityHandle(m_handle); - - m_handle = NULL; - - return (osl_loginUserOnFileServer(strName.pData, strPasswd.pData, strFileServer.pData, &m_handle) - == osl_Security_E_None); -} - -inline sal_Bool Security::getUserIdent( rtl::OUString& strIdent) const -{ - return osl_getUserIdent( m_handle, &strIdent.pData ); -} - - -inline sal_Bool Security::getUserName( rtl::OUString& strName ) const -{ - return osl_getUserName( m_handle, &strName.pData ); -} - - -inline sal_Bool Security::getHomeDir( rtl::OUString& strDirectory) const -{ - return osl_getHomeDir(m_handle, &strDirectory.pData ); -} - - -inline sal_Bool Security::getConfigDir( rtl::OUString& strDirectory ) const -{ - return osl_getConfigDir( m_handle, &strDirectory.pData ); -} - -inline sal_Bool Security::isAdministrator() const -{ - return osl_isAdministrator(m_handle); -} - -inline oslSecurity Security::getHandle() const -{ - return m_handle; -} - - -} - -#endif // _OSL_SECURITY_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/security_decl.hxx b/sal/inc/osl/security_decl.hxx deleted file mode 100644 index ba2f4195d769..000000000000 --- a/sal/inc/osl/security_decl.hxx +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_SECURITY_DECL_HXX_ -#define _OSL_SECURITY_DECL_HXX_ - -#include <rtl/ustring.hxx> -# include <osl/security.h> - -namespace osl -{ - -/** capsulate security information for one user. - A object of this class is used to execute a process with the rights an - security options of a scecified user. - @see Process::executeProcess -*/ -class Security -{ -protected: - oslSecurity m_handle; - -public: - /// constructor - inline Security(); - /// destructor - inline ~Security(); - /** get the security information for one user. - The underlying operating system is asked for this information. - @param[in] strName denotes the name of the user - @param[in] strPasswd denotes the password of this user - @return True, if the specified user is known by the underlying operating system, - otherwise False - */ - inline sal_Bool SAL_CALL logonUser(const rtl::OUString& strName, - const rtl::OUString& strPasswd); - /** get the security information for one user. - - @verbatim - This method will try to login the user at the denoted file server. - If a network resource named \\server\username exists and this resource - could be connected by this user, the methos will return true and getHomeDir - will return \\server\username. - @endverbatim - @param[in] strName denotes the name of the user - @param[in] strPasswd denotes the password of this user - @param[in] strFileServer denotes the file server to login to - @return True, if the specified user is known by file server and the - could be connected, otherwise False - */ - inline sal_Bool SAL_CALL logonUser(const rtl::OUString & strName, - const rtl::OUString & strPasswd, - const rtl::OUString & strFileServer); - - /** get the ident of the logged in user. - @param[out] strIdent is the OUString which returns the name - @return True, if any user is successfully logged in, otherwise False - */ - inline sal_Bool SAL_CALL getUserIdent( rtl::OUString& strIdent) const; - - /** get the name of the logged in user. - @param[out] strName is the OUString which returns the name - @return True, if any user is successfully logged in, otherwise False - */ - inline sal_Bool SAL_CALL getUserName( rtl::OUString& strName) const; - - /** get the home directory of the logged in user. - @param[out] strDirectory is the OUString which returns the directory name - @return True, if any user is successfully logged in, otherwise False - */ - inline sal_Bool SAL_CALL getHomeDir( rtl::OUString& strDirectory) const; - - /** get the directory for configuration data of the logged in user. - @param[out] strDirectory is the OUString which returns the directory name - @return True, if any user is successfully logged in, otherwise False - */ - inline sal_Bool SAL_CALL getConfigDir( rtl::OUString & strDirectory) const; - - /** Query if the user who is logged inhas administrator rigths. - @return True, if the user has administrator rights, otherwise false. - */ - inline sal_Bool SAL_CALL isAdministrator() const; - - /** Returns the underlying oslSecurity handle - */ - inline oslSecurity getHandle() const; - -}; - -} - -#endif // _OSL_SECURITY_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/signal.h b/sal/inc/osl/signal.h deleted file mode 100644 index ca113308cf92..000000000000 --- a/sal/inc/osl/signal.h +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_SIGNAL_H_ -#define _OSL_SIGNAL_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define OSL_SIGNAL_USER_RESERVED 0 - -#define OSL_SIGNAL_USER_RESOURCEFAILURE (OSL_SIGNAL_USER_RESERVED - 1) -#define OSL_SIGNAL_USER_X11SUBSYSTEMERROR (OSL_SIGNAL_USER_RESERVED - 2) -#define OSL_SIGNAL_USER_RVPCONNECTIONERROR (OSL_SIGNAL_USER_RESERVED - 3) - -typedef void* oslSignalHandler; - -typedef enum -{ - osl_Signal_System, - osl_Signal_Terminate, - osl_Signal_AccessViolation, - osl_Signal_IntegerDivideByZero, - osl_Signal_FloatDivideByZero, - osl_Signal_DebugBreak, - osl_Signal_User, - osl_Signal_Alarm, - osl_Signal_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSignal; - -typedef enum -{ - osl_Signal_ActCallNextHdl, - osl_Signal_ActIgnore, - osl_Signal_ActAbortApp, - osl_Signal_ActKillApp, - osl_Signal_Act_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSignalAction; - -#ifdef SAL_W32 -# pragma pack(push, 8) -#endif - -typedef struct -{ - oslSignal Signal; - sal_Int32 UserSignal; - void* UserData; -} oslSignalInfo; - -#if defined( SAL_W32) -# pragma pack(pop) -#endif - -/** the function-ptr. representing the signal handler-function. -*/ -typedef oslSignalAction (SAL_CALL *oslSignalHandlerFunction)(void* pData, oslSignalInfo* pInfo); - -SAL_DLLPUBLIC oslSignalHandler SAL_CALL osl_addSignalHandler( - oslSignalHandlerFunction Handler, void* pData); - -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_removeSignalHandler( - oslSignalHandler hHandler); - -SAL_DLLPUBLIC oslSignalAction SAL_CALL osl_raiseSignal( - sal_Int32 UserSignal, void* UserData); - -/** Enables or disables error reporting - - On default error reporting is enabled after process startup. - - @param bEnable [in] - Enables or disables error reporting. - - @return - sal_True if previous state of error reporting was enabled<br> - sal_False if previous state of error reporting was disbaled<br> -*/ - -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_setErrorReporting( - sal_Bool bEnable ); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_SIGNAL_H_ */ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/socket.h b/sal/inc/osl/socket.h deleted file mode 100644 index 8ccb2c740f53..000000000000 --- a/sal/inc/osl/socket.h +++ /dev/null @@ -1,920 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_SOCKET_H_ -#define _OSL_SOCKET_H_ - -#include <rtl/ustring.h> -#include <rtl/byteseq.h> - -#include <osl/time.h> -#include <rtl/tencinfo.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/* error returns */ -#define OSL_INADDR_NONE 0xffffffff -#define OSL_INVALID_PORT (-1) -#define OSL_INVALID_IPX_SOCKET_NO 0xffffffff - -/** - Opaque datatype SocketAddr. -*/ -typedef struct oslSocketAddrImpl * oslSocketAddr; - - -/** - Represents the address-family of a socket -*/ -typedef enum { - osl_Socket_FamilyInet, /* IP */ - osl_Socket_FamilyIpx, /* Novell IPX/SPX */ - osl_Socket_FamilyInvalid, /* always last entry in enum! */ - osl_Socket_Family_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslAddrFamily; - -/** - represent a specific protocol within a address-family -*/ -typedef enum { - osl_Socket_ProtocolIp, /* for all af_inet */ - osl_Socket_ProtocolIpx, /* af_ipx datagram sockets (IPX) */ - osl_Socket_ProtocolSpx, /* af_ipx seqpacket or stream for SPX */ - osl_Socket_ProtocolSpxII, /* af_ipx seqpacket or stream for SPX II */ - osl_Socket_ProtocolInvalid, - osl_Socket_Protocol_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslProtocol; - - -/** - Represents the type of a socket -*/ -typedef enum { - osl_Socket_TypeStream, - osl_Socket_TypeDgram, - osl_Socket_TypeRaw, - osl_Socket_TypeRdm, - osl_Socket_TypeSeqPacket, - osl_Socket_TypeInvalid, /* always last entry in enum! */ - osl_Socket_Type_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSocketType; - - -/** - Represents socket-options -*/ -typedef enum { - osl_Socket_OptionDebug, - osl_Socket_OptionAcceptConn, - osl_Socket_OptionReuseAddr, - osl_Socket_OptionKeepAlive, - osl_Socket_OptionDontRoute, - osl_Socket_OptionBroadcast, - osl_Socket_OptionUseLoopback, - osl_Socket_OptionLinger, - osl_Socket_OptionOOBinLine, - osl_Socket_OptionSndBuf, - osl_Socket_OptionRcvBuf, - osl_Socket_OptionSndLowat, - osl_Socket_OptionRcvLowat, - osl_Socket_OptionSndTimeo, - osl_Socket_OptionRcvTimeo, - osl_Socket_OptionError, - osl_Socket_OptionType, - osl_Socket_OptionTcpNoDelay, - osl_Socket_OptionInvalid, /* always last entry in enum! */ - osl_Socket_Option_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSocketOption; - -/** - Represents the different socket-option levels -*/ -typedef enum { - osl_Socket_LevelSocket, - osl_Socket_LevelTcp, - osl_Socket_LevelInvalid, /* always last entry in enum! */ - osl_Socket_Level_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSocketOptionLevel; - - -/** - Represents flags to be used with send/recv-calls. -*/ -typedef enum { - osl_Socket_MsgNormal, - osl_Socket_MsgOOB, - osl_Socket_MsgPeek, - osl_Socket_MsgDontRoute, - osl_Socket_MsgMaxIOVLen, - osl_Socket_MsgInvalid, /* always last entry in enum! */ - osl_Socket_Msg_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSocketMsgFlag; - -/** - Used by shutdown to denote which end of the socket to "close". -*/ -typedef enum { - osl_Socket_DirRead, - osl_Socket_DirWrite, - osl_Socket_DirReadWrite, - osl_Socket_DirInvalid, /* always last entry in enum! */ - osl_Socket_Dir_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSocketDirection; - -/** Describes the various error socket error conditions, which may - occur */ -typedef enum { - osl_Socket_E_None, /* no error */ - osl_Socket_E_NotSocket, /* Socket operation on non-socket */ - osl_Socket_E_DestAddrReq, /* Destination address required */ - osl_Socket_E_MsgSize, /* Message too long */ - osl_Socket_E_Prototype, /* Protocol wrong type for socket */ - osl_Socket_E_NoProtocol, /* Protocol not available */ - osl_Socket_E_ProtocolNoSupport, /* Protocol not supported */ - osl_Socket_E_TypeNoSupport, /* Socket type not supported */ - osl_Socket_E_OpNotSupport, /* Operation not supported on socket */ - osl_Socket_E_PfNoSupport, /* Protocol family not supported */ - osl_Socket_E_AfNoSupport, /* Address family not supported by */ - /* protocol family */ - osl_Socket_E_AddrInUse, /* Address already in use */ - osl_Socket_E_AddrNotAvail, /* Can't assign requested address */ - osl_Socket_E_NetDown, /* Network is down */ - osl_Socket_E_NetUnreachable, /* Network is unreachable */ - osl_Socket_E_NetReset, /* Network dropped connection because */ - /* of reset */ - osl_Socket_E_ConnAborted, /* Software caused connection abort */ - osl_Socket_E_ConnReset, /* Connection reset by peer */ - osl_Socket_E_NoBufferSpace, /* No buffer space available */ - osl_Socket_E_IsConnected, /* Socket is already connected */ - osl_Socket_E_NotConnected, /* Socket is not connected */ - osl_Socket_E_Shutdown, /* Can't send after socket shutdown */ - osl_Socket_E_TooManyRefs, /* Too many references: can't splice */ - osl_Socket_E_TimedOut, /* Connection timed out */ - osl_Socket_E_ConnRefused, /* Connection refused */ - osl_Socket_E_HostDown, /* Host is down */ - osl_Socket_E_HostUnreachable, /* No route to host */ - osl_Socket_E_WouldBlock, /* call would block on non-blocking socket */ - osl_Socket_E_Already, /* operation already in progress */ - osl_Socket_E_InProgress, /* operation now in progress */ - osl_Socket_E_InvalidError, /* unmapped error: always last entry in enum! */ - osl_Socket_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSocketError; - -/** Common return codes of socket related functions. - */ -typedef enum { - osl_Socket_Ok, /* successful completion */ - osl_Socket_Error, /* error occurred, check osl_getLastSocketError() for details */ - osl_Socket_TimedOut, /* blocking operation timed out */ - osl_Socket_Interrupted, /* blocking operation was interrupted */ - osl_Socket_InProgress, /* nonblocking operation is in progress */ - osl_Socket_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslSocketResult; - -typedef sal_uInt8 oslSocketIpxNetNumber[4]; -typedef sal_uInt8 oslSocketIpxNodeNumber[6]; - -/**@} end section types -*/ - -/**@{ begin section oslSocketAddr -*/ - -/** Creates a socket-address for the given family. - @param Family If family == osl_Socket_FamilyInet the address is - set to INADDR_ANY port 0. - @return 0 if address could not be created. -*/ -SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_createEmptySocketAddr( - oslAddrFamily Family); - - -/** Creates a new SocketAddress and fills it from Addr. -*/ -SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_copySocketAddr( - oslSocketAddr Addr); - -/** Compares the values of two SocketAddresses. - @return <code>sal_True</code> if both addresses denote the same socket address, - <code>sal_False</code> otherwise. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isEqualSocketAddr( - oslSocketAddr Addr1, oslSocketAddr Addr2); - -/** Uses the systems name-service interface to find an address for strHostname. - @param[in] strHostname The name for which you search for an address. - @return The desired address if one could be found, otherwise 0. - Don't forget to destroy the address if you don't need it any longer. -*/ -SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_resolveHostname( - rtl_uString *strHostname); - -/** Create an internet address usable for sending broadcast datagrams. - To limit the broadcast to your subnet, pass your hosts IP address - in dotted decimal notation as first argument. - @see osl_sendToSocket() - @see oslSocketAddr - @param[in] strDottedAddr dotted decimal internet address, may be 0. - @param[in] Port port number in host byte order. - @return 0 if address could not be created. -*/ -SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_createInetBroadcastAddr ( - rtl_uString *strDottedAddr, sal_Int32 Port); - - -/** Create an internet-address, consisting of hostaddress and port. - We interpret strDottedAddr as a dotted-decimal inet-addr - (e.g. "141.99.128.50"). - @param strDottedAddr [in] String with dotted address. - @param Port [in] portnumber in host byte order. - @return 0 if address could not be created. -*/ -SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_createInetSocketAddr ( - rtl_uString *strDottedAddr, sal_Int32 Port); - - -/** Frees all resources allocated by Addr. The handle Addr must not - be used after the call anymore. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_destroySocketAddr( - oslSocketAddr Addr); - -/** Looks up the port-number designated to the specified service/protocol-pair. - (e.g. "ftp" "tcp"). - @return OSL_INVALID_PORT if no appropriate entry was found, otherwise the port-number. -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_getServicePort( - rtl_uString *strServicename, rtl_uString *strProtocol); - - - -/** Retrieves the address-family from the Addr. - @return the family of the socket-address. - In case of an unknown family you get <code>osl_Socket_FamilyInvalid</code>. -*/ -SAL_DLLPUBLIC oslAddrFamily SAL_CALL osl_getFamilyOfSocketAddr( - oslSocketAddr Addr); - - -/** Retrieves the internet port-number of Addr. - @return the port-number of the address in host-byte order. If Addr - is not an address of type <code>osl_Socket_FamilyInet</code>, it returns <code>OSL_INVALID_PORT</code> -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_getInetPortOfSocketAddr( - oslSocketAddr Addr); - - -/** Sets the Port of Addr. - @param[in] Addr the SocketAddr to perfom the operation on. - @param[in] Port is expected in host byte-order. - @return <code>sal_False</code> if Addr is not an inet-addr. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_setInetPortOfSocketAddr( - oslSocketAddr Addr, sal_Int32 Port); - - -/** Returns the hostname represented by Addr. - @param[in] Addr The socket address from which to extract the hostname. - @param[out] strHostname The hostname represented by the address. If - there is no hostname to be found, it returns 0. -*/ -SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getHostnameOfSocketAddr( - oslSocketAddr Addr, rtl_uString **strHostname); - - -/** Gets the address in dotted decimal format. - @param[in] Addr The socket address from which to extract the dotted decimal address. - @param[out] strDottedInetAddr Contains the dotted decimal address - (e.g. 141.99.20.34) represented by the address. - If the address is invalid or not of type <code>osl_Socket_FamilyInet</code>, - it returns 0. - @return <code>osl_Socket_Ok</code> or <code>osl_Socket_Error</code> -*/ -SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getDottedInetAddrOfSocketAddr( - oslSocketAddr Addr, rtl_uString **strDottedInetAddr); - -/** Sets the addr field in the struct sockaddr with pByteSeq. pByteSeq must be in network byte order. - */ -SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_setAddrOfSocketAddr( - oslSocketAddr Addr, sal_Sequence *pByteSeq ); - -/** Returns the addr field in the struct sockaddr. - @param[in] Addr The socket address from which to extract the ipaddress. - @param[out] ppByteSeq After the call, *ppByteSeq contains the ipaddress - in network byteorder. *ppByteSeq may be 0 in case of an invalid socket handle. - @return <code>osl_Socket_Ok</code> or <code>osl_Socket_Error</code> - */ -SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getAddrOfSocketAddr( - oslSocketAddr Addr, sal_Sequence **ppByteSeq ); - -/* - Opaque datatype HostAddr. -*/ -typedef struct oslHostAddrImpl * oslHostAddr; - - -/** Create an oslHostAddr from given hostname and socket address. - @param[in] strHostname The hostname to be stored. - @param[in] Addr The socket address to be stored. - @return The created address or 0 upon failure. -*/ -SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_createHostAddr( - rtl_uString *strHostname, const oslSocketAddr Addr); - - -/** Create an oslHostAddr by resolving the given strHostname. - Successful name resolution should result in the fully qualified - domain name (FQDN) and it's address as hostname and socket address - members of the resulting oslHostAddr. - @param[in] strHostname The hostname to be resolved. - @return The resulting address or 0 upon failure. -*/ -SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_createHostAddrByName(rtl_uString *strHostname); - - -/** Create an oslHostAddr by reverse resolution of the given Addr. - Successful name resolution should result in the fully qualified - domain name (FQDN) and it's address as hostname and socket address - members of the resulting oslHostAddr. - @param[in] Addr The socket address to be reverse resolved. - @return The resulting address or 0 upon failure. -*/ -SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_createHostAddrByAddr(const oslSocketAddr Addr); - - -/** Create a copy of the given Addr. - @return The copied address or 0 upon failure. -*/ -SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_copyHostAddr(const oslHostAddr Addr); - - -/** Frees all resources allocated by Addr. The handle Addr must not - be used after the call anymore. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_destroyHostAddr(oslHostAddr Addr); - - -/** Get the hostname member of Addr. - @return The hostname or 0 upon failure. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_getHostnameOfHostAddr(const oslHostAddr Addr, rtl_uString **strHostname); - - -/** Get the socket address member of Addr. - @return The socket address or 0 upon failure. -*/ -SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_getSocketAddrOfHostAddr(const oslHostAddr Addr); - -/** Retrieve this machines hostname. - May not always be a fully qualified domain name (FQDN). - @param strLocalHostname out-parameter. The string that receives the local host name. - @return <code>sal_True</code> upon success, <code>sal_False</code> otherwise. -*/ -SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getLocalHostname(rtl_uString **strLocalHostname); - - -/**@} end section oslHostAddr -*/ - -/**@{ begin section oslSocket -*/ - - -/*-***************************************************************************/ -/* oslSocket */ -/*-***************************************************************************/ - -typedef struct oslSocketImpl * oslSocket; - -/** increases the refcount of the socket handle by one - */ -SAL_DLLPUBLIC void SAL_CALL osl_acquireSocket( oslSocket Socket ); - -/** decreases the refcount of the socket handle by one. - - If the refcount drops to zero, the underlying socket handle - is destroyed and becomes invalid. - */ -SAL_DLLPUBLIC void SAL_CALL osl_releaseSocket( oslSocket Socket ); - -/** Create a socket of the specified Family and Type. The semantic of - the Protocol parameter depends on the given family and type. - @return 0 if socket could not be created, otherwise you get a handle - to the allocated socket-datastructure. -*/ -SAL_DLLPUBLIC oslSocket SAL_CALL osl_createSocket( - oslAddrFamily Family, - oslSocketType Type, - oslProtocol Protocol); - -/** Retrieves the Address of the local end of the socket. - Note that a socket must be bound or connected before - a vaild address can be returned. - @return 0 if socket-address could not be created, otherwise you get - the created Socket-Address. -*/ -SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_getLocalAddrOfSocket(oslSocket Socket); - -/** Retrieves the Address of the remote end of the socket. - Note that a socket must be connected before - a vaild address can be returned. - @return 0 if socket-address could not be created, otherwise you get - the created Socket-Address. -*/ -SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_getPeerAddrOfSocket(oslSocket Socket); - -/** Binds the given address to the socket. - @param[in] Socket - @param[in] Addr - @return <code>sal_False</code> if the bind failed, <code> sal_True</code> if successful. - @see osl_getLastSocketError() -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_bindAddrToSocket( - oslSocket Socket, - oslSocketAddr Addr); - -/** Connects the socket to the given address. - - @param[in] Socket a bound socket. - @param[in] Addr the peer address. - @param pTimeout Timeout value or NULL for blocking. - - @return <code>osl_Socket_Ok</code> on successful connection, - <code>osl_Socket_TimedOut</code> if operation timed out, - <code>osl_Socket_Interrupted</code> if operation was interrupted - <code>osl_Socket_Error</code> if the connection failed. -*/ -SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_connectSocketTo( - oslSocket Socket, - oslSocketAddr Addr, - const TimeValue* pTimeout); - - -/** Prepares the socket to act as an acceptor of incoming connections. - You should call "listen" before you use "accept". - @param[in] Socket The socket to listen on. - @param[in] MaxPendingConnections denotes the length of the queue of - pending connections for this socket. If MaxPendingConnections is - -1, the systems default value will be used (Usually 5). - @return <code>sal_False</code> if the listen failed. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_listenOnSocket( - oslSocket Socket, - sal_Int32 MaxPendingConnections); - - -/** Waits for an ingoing connection on the socket. - This call blocks if there is no incoming connection present. - @param[in] Socket The socket to accept the connection on. - @param[in] pAddr if pAddr is != 0, the peers address is returned. - @return 0 if the accept-call failed, otherwise you get a socket - representing the new connection. -*/ -SAL_DLLPUBLIC oslSocket SAL_CALL osl_acceptConnectionOnSocket - (oslSocket Socket, - oslSocketAddr* pAddr); - -/** Tries to receive BytesToRead data from the connected socket, - if no error occurs. Note that incomplete recvs due to - packet boundaries may occur. - - @param[in] Socket A connected socket to be used to listen on. - @param[out] pBuffer Points to a buffer that will be filled with the received - data. - @param[in] BytesToRead The number of bytes to read. pBuffer must have at least - this size. - @param[in] Flag Modifier for the call. Valid values are: - <ul> - <li><code>osl_Socket_MsgNormal</code> - <li><code>osl_Socket_MsgOOB</code> - <li><code>osl_Socket_MsgPeek</code> - <li><code>osl_Socket_MsgDontRoute</code> - <li><code>osl_Socket_MsgMaxIOVLen</code> - </ul> - - @return the number of received bytes. -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_receiveSocket( - oslSocket Socket, - void* pBuffer, - sal_uInt32 BytesToRead, - oslSocketMsgFlag Flag); - -/** Tries to receives BufferSize data from the (usually unconnected) - (datagram-)socket, if no error occurs. - - @param[in] Socket A bound socket to be used to listen for a datagram. - @param[out] SenderAddr A pointer to a created oslSocketAddr handle - or to a null handle. After the call, it will contain the constructed - oslSocketAddr of the datagrams sender. If pSenderAddr itself is 0, - it is ignored. - @param[out] pBuffer Points to a buffer that will be filled with the received - datagram. - @param[in] BufferSize The size of pBuffer. - @param[in] Flag Modifier for the call. Valid values are: - <ul> - <li><code>osl_Socket_MsgNormal</code> - <li><code>osl_Socket_MsgOOB</code> - <li><code>osl_Socket_MsgPeek</code> - <li><code>osl_Socket_MsgDontRoute</code> - <li><code>osl_Socket_MsgMaxIOVLen</code> - </ul> - - @return the number of received bytes. -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_receiveFromSocket( - oslSocket Socket, - oslSocketAddr SenderAddr, - void* pBuffer, - sal_uInt32 BufferSize, - oslSocketMsgFlag Flag); - -/** Tries to send BytesToSend data from the connected socket, - if no error occurs. - - @param[in] Socket A connected socket. - @param[in] pBuffer Points to a buffer that contains the send-data. - @param[in] BytesToSend The number of bytes to send. pBuffer must have at least - this size. - @param[in] Flag Modifier for the call. Valid values are: - <ul> - <li><code>osl_Socket_MsgNormal</code> - <li><code>osl_Socket_MsgOOB</code> - <li><code>osl_Socket_MsgPeek</code> - <li><code>osl_Socket_MsgDontRoute</code> - <li><code>osl_Socket_MsgMaxIOVLen</code> - </ul> - - @return the number of transfered bytes. -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_sendSocket( - oslSocket Socket, - const void* pBuffer, - sal_uInt32 BytesToSend, - oslSocketMsgFlag Flag); - -/** Tries to send one datagram with BytesToSend data to the given ReceiverAddr - via the (implicitly unconnected) datagram-socket. - Since there is only sent one packet, the function sends the data always complete - even with incomplete packet boundaries. - - @param[in] Socket A bound or unbound socket. Socket will be bound - after a successful call. - - @param[in] ReceiverAddr An initialized oslSocketAddress that contains - the destination address for this send. - - @param[in] pBuffer Points to a buffer that contains the send-data. - @param[in] BytesToSend The number of bytes to send. pBuffer must have at least - this size. - @param Flag [in] Modifier for the call. Valid values are: - <ul> - <li><code>osl_Socket_MsgNormal</code> - <li><code>osl_Socket_MsgOOB</code> - <li><code>osl_Socket_MsgPeek</code> - <li><code>osl_Socket_MsgDontRoute</code> - <li><code>osl_Socket_MsgMaxIOVLen</code> - </ul> - - @return the number of transfered bytes. -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_sendToSocket( - oslSocket Socket, - oslSocketAddr ReceiverAddr, - const void* pBuffer, - sal_uInt32 BytesToSend, - oslSocketMsgFlag Flag); - -/** Checks if read operations will block. - - You can specify a timeout-value in seconds/microseconds that denotes - how long the operation will block if the Socket is not ready. - - @return <code>sal_True</code> if read operations (recv, recvFrom, accept) on the Socket - will NOT block; <code>sal_False</code> if it would block or if an error occurred. - - @param Socket the Socket to perfom the operation on. - @param pTimeout if NULL, the operation will block without a timeout. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isReceiveReady( - oslSocket Socket, const TimeValue* pTimeout); - -/** Checks if send operations will block. - You can specify a timeout-value in seconds/microseconds that denotes - how long the operation will block if the Socket is not ready. - @return <code>sal_True</code> if send operations (send, sendTo) on the Socket - will NOT block; <code>sal_False</code> if it would block or if an error occurred. - - @param Socket the Socket to perfom the operation on. - @param pTimeout if NULL, the operation will block without a timeout. Otherwise - the time define by timeout value. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isSendReady( - oslSocket Socket, const TimeValue* pTimeout); - -/** Checks if a request for out-of-band data will block. - You can specify a timeout-value in seconds/microseconds that denotes - how long the operation will block if the Socket has no pending OOB data. - @return <code>sal_True</code> if OOB-request operations (recv with appropriate flags) - on the Socket will NOT block; <code>sal_False</code> if it would block or if an error occurred. - - @param Socket the Socket to perfom the operation on. - @param pTimeout if NULL, the operation will block without a timeout. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isExceptionPending( - oslSocket Socket, const TimeValue* pTimeout); - -/** Shuts down communication on a connected socket. - @param[in] Socket the Socket to perfom the operation on. - @param[in] Direction denotes which end of the socket - should be closed: - <ul> - <li> <code>osl_Socket_DirRead</code> closes read operations. - <li> <code>osl_Socket_DirReadWrite</code> closes write operations. - <li> <code>osl_Socket_DirWrite</code> closes read and write operations. - </ul> - @return <code>sal_True</code> if the socket could be closed down. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_shutdownSocket(oslSocket Socket, - oslSocketDirection Direction); - -/** Retrieves attributes associated with the socket. - @param Socket is the socket to query. - - @param Level selects the level for which an option should be queried. - Valid values are: - <ul> - <li> osl_sol_socket: Socket Level - <li> osl_sol_tcp: Level of Transmission Control Protocol - </ul> - - @param Option denotes the option to query. - Valid values (depending on the Level) are: - <ul> - <li> <code>osl_Socket_Option_Debug</code><br> - (sal_Bool) Socket debug flag 1 = enabled, 0 = disabled. - - <li> <code>osl_Socket_OptionAcceptConn</code><br> - <li> <code>osl_Socket_OptionReuseAddr</code><br> - (sal_Bool) Allows the socket to be bound to an address that is - already in use. - 1 = multiple bound allowed, 0 = no multiple bounds allowed - - <li><code>osl_Socket_OptionKeepAlive</code><br> - (sal_Bool) Keepalive packets are sent by the underlying socket. - 1 = enabled, 0 = disabled - - <li><code>osl_Socket_OptionDontRoute</code><br> - (sal_Bool) Do not route: send directly to interface. - 1 = do not route , 0 = routing possible - - <li><code>osl_Socket_OptionBroadcast</code><br> - (sal_Bool) Transmission of broadcast messages are allowed on the socket. - 1 = transmission allowed, 0 = transmission disallowed - - <li><code>osl_Socket_OptionUseLoopback</code><br> - - <li><code>osl_Socket_OptionLinger</code><br> - (sal_Int32) Linger on close if unsent data is present. - 0 = linger is off, > 0 = timeout in seconds. - - <li><code>osl_Socket_OptionOOBinLine</code><br> - - - <li><code>osl_Socket_OptionSndBuf</code><br> - (sal_Int32) Size of the send buffer in bytes. Data is sent after - SndTimeo or when the buffer is full. This allows faster writing - to the socket. - - <li><code>osl_Socket_OptionRcvBuf</code><br> - (sal_Int32) Size of the receive buffer in bytes. Data is sent after - SndTimeo or when the buffer is full. This allows faster writing - to the socket and larger packet sizes. - - <li><code>osl_Socket_OptionSndLowat</code><br> - - <li><code>osl_Socket_OptionRcvLowat</code><br> - - <li><code>osl_Socket_OptionSndTimeo</code><br> - (sal_Int32) Data is sent after this timeout. This allows gathering - of data to send larger packages but increases latency times. - - <li><code>osl_Socket_OptionRcvTimeo</code><br> - - <li><code>osl_Socket_OptionError</code><br> - <li><code>osl_Socket_OptionType</code><br> - - <li><code>osl_Socket_OptionTcpNoDelay</code><br> - Disables the Nagle algorithm for send coalescing. (Do not - collect data until a packet is full, instead send immediately. - This increases network traffic but might improve latency-times.) - 1 = disables the algorithm, 0 = keeps it enabled. - </ul> - If not above mentioned otherwise, the options are only valid for - level <code>osl_Socket_LevelSocket</code>. - - @param pBuffer Pointer to a buffer large enough to take the desired - attribute-value. - - @param BufferLen contains the length of the Buffer. - - @return -1 if an error occurred or else the size of the data copied into - pBuffer. - @see osl_setSocketOption() -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_getSocketOption( oslSocket Socket, - oslSocketOptionLevel Level, - oslSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen); - -/** Sets the sockets attributes. - - @param Socket is the socket to modify. - - @param Level selects the level for which an option should be changed. - Valid values are: - <ul> - <li> osl_sol_socket: Socket Level - <li> osl_sol_tcp: Level of Transmission Control Protocol - </ul> - - @param Option denotes the option to modify. See osl_setSocketOption() for more - details. - - @param pBuffer Pointer to a Buffer which contains the attribute-value. - - @param BufferLen contains the length of the Buffer. - - @return True if the option could be changed. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_setSocketOption( oslSocket Socket, - oslSocketOptionLevel Level, - oslSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen); - -/** Enables/disables non-blocking-mode of the socket. - @param Socket Change mode for this socket. - @param On <code>sal_True</code> enables non-blocking mode, - <code>sal_False</code> disables non-blocking mode. - @return <code>sal_True</code> if mode could be changed. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_enableNonBlockingMode( - oslSocket Socket, sal_Bool On); - - -/** Query state of non-blocking-mode of the socket. - @param Socket Query mode for this socket. - @return True if non-blocking-mode is enabled. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isNonBlockingMode( - oslSocket Socket); - - -/** Queries the socket for its type. - @param[in] Socket The socket to query. - @return one of: - <ul> - <li> osl_Socket_TypeStream - <li> osl_Socket_TypeDgram - <li> osl_Socket_TypeRaw - <li> osl_Socket_TypeRdm - <li> osl_Socket_TypeSeqPacket - <li> osl_invalid_SocketType, if an error occurred - </ul> -*/ -SAL_DLLPUBLIC oslSocketType SAL_CALL osl_getSocketType( - oslSocket Socket); - -/** returns a string which describes the last socket error. - @param[in] Socket The socket to query. - @param[out] strError The string that receives the error message. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_getLastSocketErrorDescription( - oslSocket Socket, rtl_uString **strError); - -/** returns a constant decribing the last error for the socket system. - @return <code>osl_Socket_E_NONE</code> if no error occurred, - <code>osl_invalid_SocketError</code> if an unknown (unmapped) - error occurred, otherwise an enum describing the error. -*/ -SAL_DLLPUBLIC oslSocketError SAL_CALL osl_getLastSocketError( - oslSocket Socket); - -/** Type for the representation of socket sets. -*/ -typedef struct oslSocketSetImpl * oslSocketSet; - -/** Creates a set of sockets to be used with osl_demultiplexSocketEvents(). - @return A oslSocketSet or 0 if creation failed. -*/ -SAL_DLLPUBLIC oslSocketSet SAL_CALL osl_createSocketSet(void); - -/** Destroys a oslSocketSet. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_destroySocketSet(oslSocketSet Set); - -/** Clears the set from all previously added sockets. - @param Set the set to be cleared. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_clearSocketSet(oslSocketSet Set); - - -/** Adds a socket to the set. - @param Set the set were the socket is added. - @param Socket the socket to be added. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_addToSocketSet(oslSocketSet Set, oslSocket Socket); - -/** Removes a socket from the set. - @param Set the set were the socket is removed from. - @param Socket the socket to be removed. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_removeFromSocketSet(oslSocketSet Set, oslSocket Socket); - -/** Checks if socket is in the set. - @param Set the set to be checked. - @param Socket check if this socket is in the set. - @return <code>sal_True</code> if socket is in the set. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isInSocketSet(oslSocketSet Set, oslSocket Socket); - -/** Checks multiple sockets for events. - @param IncomingSet Checks the sockets in this set - for incoming events (read, accept). If the set is 0, - it is just skipped. - @param OutgoingSet Checks the sockets in this set - for outgoing events (write, connect). If the set is 0, - it is just skipped. - @param OutOfBandSet Checks the sockets in this set - for out-of-band events. If the set is 0, it is just skipped. - @param pTimeout Address of the number of milliseconds to wait for events. If - *pTimeout is -1, the call will block until an event or an error - occurs. - @return -1 on errors, otherwise the number of sockets with - pending events. In case of timeout, the number might be 0. -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_demultiplexSocketEvents(oslSocketSet IncomingSet, - oslSocketSet OutgoingSet, - oslSocketSet OutOfBandSet, - const TimeValue* pTimeout); - -/** Closes the socket terminating any ongoing dataflow. - @param[in] Socket The socket to close. - */ -SAL_DLLPUBLIC void SAL_CALL osl_closeSocket(oslSocket Socket); - - -/** Retrieves n bytes from the stream and copies them into pBuffer. - The function avoids incomplete reads due to packet boundaries. - @param[in] Socket The socket to read from. - @param[out] pBuffer receives the read data. - @param[out] nSize the number of bytes to read. pBuffer must be large enough - to hold the n bytes! - @return the number of read bytes. The number will only be smaller than - n if an exceptional condition (e.g. connection closed) occurs. -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_readSocket( oslSocket Socket, void *pBuffer, sal_Int32 nSize ); - - -/** Writes n bytes from pBuffer to the stream. The method avoids - incomplete writes due to packet boundaries. - @param[out] Socket The socket to write to. - @param[in] pBuffer contains the data to be written. - @param[in] nSize the number of bytes to write. - @return the number of written bytes. The number will only be smaller than - nSize if an exceptional condition (e.g. connection closed) occurs. -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_writeSocket( oslSocket Socket, const void *pBuffer, sal_Int32 nSize ); - -/**@} end section oslSocket -*/ - - - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_SOCKET_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/socket.hxx b/sal/inc/osl/socket.hxx deleted file mode 100644 index f8246c48a448..000000000000 --- a/sal/inc/osl/socket.hxx +++ /dev/null @@ -1,559 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _OSL_SOCKET_HXX_ -#define _OSL_SOCKET_HXX_ - -#include <osl/socket_decl.hxx> - -namespace osl -{ - //______________________________________________________________________________ - inline SocketAddr::SocketAddr() - : m_handle( osl_createEmptySocketAddr( osl_Socket_FamilyInet ) ) - {} - - //______________________________________________________________________________ - inline SocketAddr::SocketAddr(const SocketAddr& Addr) - : m_handle( osl_copySocketAddr( Addr.m_handle ) ) - { - } - - //______________________________________________________________________________ - inline SocketAddr::SocketAddr(oslSocketAddr Addr) - : m_handle( osl_copySocketAddr( Addr ) ) - { - } - - //______________________________________________________________________________ - inline SocketAddr::SocketAddr(oslSocketAddr Addr, __osl_socket_NoCopy ) - : m_handle( Addr ) - { - } - - //______________________________________________________________________________ - inline SocketAddr::SocketAddr( const ::rtl::OUString& strAddrOrHostName, sal_Int32 nPort) - : m_handle( osl_createInetSocketAddr( strAddrOrHostName.pData, nPort ) ) - { - if(! m_handle ) - { - m_handle = osl_resolveHostname(strAddrOrHostName.pData); - - // host found? - if(m_handle) - { - osl_setInetPortOfSocketAddr(m_handle, nPort); - } - else - { - osl_destroySocketAddr( m_handle ); - m_handle = 0; - } - } - } - - //______________________________________________________________________________ - inline SocketAddr::~SocketAddr() - { - if( m_handle ) - osl_destroySocketAddr( m_handle ); - } - - //______________________________________________________________________________ - inline ::rtl::OUString SocketAddr::getHostname( oslSocketResult *pResult ) const - { - ::rtl::OUString hostname; - oslSocketResult result = osl_getHostnameOfSocketAddr( m_handle, &(hostname.pData) ); - if( pResult ) - *pResult = result; - return hostname; - } - - //______________________________________________________________________________ - inline sal_Int32 SAL_CALL SocketAddr::getPort() const - { - return osl_getInetPortOfSocketAddr(m_handle); - } - - //______________________________________________________________________________ - inline sal_Bool SAL_CALL SocketAddr::setPort( sal_Int32 nPort ) - { - return osl_setInetPortOfSocketAddr(m_handle, nPort ); - } - - inline sal_Bool SAL_CALL SocketAddr::setHostname( const ::rtl::OUString &sDottedIpOrHostname ) - { - *this = SocketAddr( sDottedIpOrHostname , getPort() ); - return is(); - } - - //______________________________________________________________________________ - inline sal_Bool SAL_CALL SocketAddr::setAddr( const ::rtl::ByteSequence & address ) - { - return osl_setAddrOfSocketAddr( m_handle, address.getHandle() ) - == osl_Socket_Ok; - } - - inline ::rtl::ByteSequence SAL_CALL SocketAddr::getAddr( oslSocketResult *pResult ) const - { - ::rtl::ByteSequence sequence; - oslSocketResult result = osl_getAddrOfSocketAddr( m_handle,(sal_Sequence **) &sequence ); - if( pResult ) - *pResult = result; - return sequence; - } - - //______________________________________________________________________________ - inline SocketAddr & SAL_CALL SocketAddr::operator= (oslSocketAddr Addr) - { - oslSocketAddr pNewAddr = osl_copySocketAddr( Addr ); - if( m_handle ) - osl_destroySocketAddr( m_handle ); - m_handle = pNewAddr; - return *this; - } - - //______________________________________________________________________________ - inline SocketAddr & SAL_CALL SocketAddr::operator= (const SocketAddr& Addr) - { - *this = (Addr.getHandle()); - return *this; - } - - inline SocketAddr & SAL_CALL SocketAddr::assign( oslSocketAddr Addr, __osl_socket_NoCopy ) - { - if( m_handle ) - osl_destroySocketAddr( m_handle ); - m_handle = Addr; - return *this; - } - - //______________________________________________________________________________ - inline sal_Bool SAL_CALL SocketAddr::operator== (oslSocketAddr Addr) const - { - return osl_isEqualSocketAddr( m_handle, Addr ); - } - - inline oslSocketAddr SocketAddr::getHandle() const - { - return m_handle; - } - - //______________________________________________________________________________ - inline sal_Bool SocketAddr::is() const - { - return m_handle != 0; - } - - // (static method)______________________________________________________________ - inline ::rtl::OUString SAL_CALL SocketAddr::getLocalHostname( oslSocketResult *pResult ) - { - ::rtl::OUString hostname; - oslSocketResult result = osl_getLocalHostname( &(hostname.pData) ); - if(pResult ) - *pResult = result; - return hostname; - } - - // (static method)______________________________________________________________ - inline void SAL_CALL SocketAddr::resolveHostname( - const ::rtl::OUString & strHostName, SocketAddr &Addr) - { - Addr = SocketAddr( osl_resolveHostname( strHostName.pData ) , SAL_NO_COPY ); - } - - // (static method)______________________________________________________________ - inline sal_Int32 SAL_CALL SocketAddr::getServicePort( - const ::rtl::OUString& strServiceName, - const ::rtl::OUString & strProtocolName ) - { - return osl_getServicePort( strServiceName.pData, strProtocolName.pData ); - } - - //______________________________________________________________________________ - inline Socket::Socket(oslSocketType Type, - oslAddrFamily Family, - oslProtocol Protocol) - : m_handle( osl_createSocket(Family, Type, Protocol) ) - {} - - //______________________________________________________________________________ - inline Socket::Socket( oslSocket socketHandle, __sal_NoAcquire ) - : m_handle( socketHandle ) - {} - - //______________________________________________________________________________ - inline Socket::Socket( oslSocket socketHandle ) - : m_handle( socketHandle ) - { - osl_acquireSocket( m_handle ); - } - - //______________________________________________________________________________ - inline Socket::Socket( const Socket & socket ) - : m_handle( socket.getHandle() ) - { - osl_acquireSocket( m_handle ); - } - - //______________________________________________________________________________ - inline Socket::~Socket() - { - osl_releaseSocket( m_handle ); - } - - //______________________________________________________________________________ - inline Socket& Socket::operator= ( oslSocket socketHandle) - { - osl_acquireSocket( socketHandle ); - osl_releaseSocket( m_handle ); - m_handle = socketHandle; - return *this; - } - - //______________________________________________________________________________ - inline Socket& Socket::operator= (const Socket& sock) - { - return (*this) = sock.getHandle(); - } - - //______________________________________________________________________________ - inline sal_Bool Socket::operator==( const Socket& rSocket ) const - { - return m_handle == rSocket.getHandle(); - } - - //______________________________________________________________________________ - inline sal_Bool Socket::operator==( const oslSocket socketHandle ) const - { - return m_handle == socketHandle; - } - - //______________________________________________________________________________ - inline void Socket::shutdown( oslSocketDirection Direction ) - { - osl_shutdownSocket( m_handle , Direction ); - } - - //______________________________________________________________________________ - inline void Socket::close() - { - osl_closeSocket( m_handle ); - } - - //______________________________________________________________________________ - inline void Socket::getLocalAddr( SocketAddr & addr) const - { - addr.assign( osl_getLocalAddrOfSocket( m_handle ) , SAL_NO_COPY ); - } - - //______________________________________________________________________________ - inline sal_Int32 Socket::getLocalPort() const - { - SocketAddr addr( 0 ); - getLocalAddr( addr ); - return addr.getPort(); - } - - //______________________________________________________________________________ - inline ::rtl::OUString Socket::getLocalHost() const - { - SocketAddr addr( 0 ); - getLocalAddr( addr ); - return addr.getHostname(); - } - - //______________________________________________________________________________ - inline void Socket::getPeerAddr( SocketAddr &addr ) const - { - addr.assign( osl_getPeerAddrOfSocket( m_handle ), SAL_NO_COPY ); - } - - //______________________________________________________________________________ - inline sal_Int32 Socket::getPeerPort() const - { - SocketAddr addr( 0 ); - getPeerAddr( addr ); - return addr.getPort(); - } - - //______________________________________________________________________________ - inline ::rtl::OUString Socket::getPeerHost() const - { - SocketAddr addr( 0 ); - getPeerAddr( addr ); - return addr.getHostname(); - } - - //______________________________________________________________________________ - inline sal_Bool Socket::bind(const SocketAddr& LocalInterface) - { - return osl_bindAddrToSocket( m_handle , LocalInterface.getHandle() ); - } - - //______________________________________________________________________________ - inline sal_Bool Socket::isRecvReady(const TimeValue *pTimeout ) const - { - return osl_isReceiveReady( m_handle , pTimeout ); - } - - //______________________________________________________________________________ - inline sal_Bool Socket::isSendReady(const TimeValue *pTimeout ) const - { - return osl_isSendReady( m_handle, pTimeout ); - } - - //______________________________________________________________________________ - inline sal_Bool Socket::isExceptionPending(const TimeValue *pTimeout ) const - { - return osl_isExceptionPending( m_handle, pTimeout ); - } - - //______________________________________________________________________________ - inline oslSocketType Socket::getType() const - { - return osl_getSocketType( m_handle ); - } - - //______________________________________________________________________________ - inline sal_Int32 Socket::getOption( - oslSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen, - oslSocketOptionLevel Level) const - { - return osl_getSocketOption( m_handle, Level, Option, pBuffer , BufferLen ); - } - - //______________________________________________________________________________ - inline sal_Bool Socket::setOption( oslSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen, - oslSocketOptionLevel Level ) const - { - return osl_setSocketOption( m_handle, Level, Option , pBuffer, BufferLen ); - } - - //______________________________________________________________________________ - inline sal_Bool Socket::setOption( oslSocketOption option, sal_Int32 nValue ) - { - return setOption( option, &nValue, sizeof( nValue ) ); - } - - //______________________________________________________________________________ - inline sal_Int32 Socket::getOption( oslSocketOption option ) const - { - sal_Int32 n; - getOption( option, &n, sizeof( n ) ); - return n; - } - - //______________________________________________________________________________ - inline sal_Bool Socket::enableNonBlockingMode( sal_Bool bNonBlockingMode) - { - return osl_enableNonBlockingMode( m_handle , bNonBlockingMode ); - } - - //______________________________________________________________________________ - inline sal_Bool Socket::isNonBlockingMode() const - { - return osl_isNonBlockingMode( m_handle ); - } - - //______________________________________________________________________________ - inline void SAL_CALL Socket::clearError() const - { - sal_Int32 err = 0; - getOption(osl_Socket_OptionError, &err, sizeof(err)); - } - - //______________________________________________________________________________ - inline oslSocketError Socket::getError() const - { - return osl_getLastSocketError( m_handle ); - } - - //______________________________________________________________________________ - inline ::rtl::OUString Socket::getErrorAsString( ) const - { - ::rtl::OUString error; - osl_getLastSocketErrorDescription( m_handle, &(error.pData) ); - return error; - } - - //______________________________________________________________________________ - inline oslSocket Socket::getHandle() const - { - return m_handle; - } - - //______________________________________________________________________________ - inline StreamSocket::StreamSocket(oslAddrFamily Family, - oslProtocol Protocol, - oslSocketType Type ) - : Socket( Type, Family, Protocol ) - {} - - //______________________________________________________________________________ - inline StreamSocket::StreamSocket( oslSocket socketHandle, __sal_NoAcquire noacquire ) - : Socket( socketHandle, noacquire ) - {} - - //______________________________________________________________________________ - inline StreamSocket::StreamSocket( oslSocket socketHandle ) - : Socket( socketHandle ) - {} - - //______________________________________________________________________________ - inline StreamSocket::StreamSocket( const StreamSocket & socket ) - : Socket( socket ) - {} - - //______________________________________________________________________________ - inline sal_Int32 StreamSocket::read(void* pBuffer, sal_uInt32 n) - { - return osl_readSocket( m_handle, pBuffer, n ); - } - - //______________________________________________________________________________ - inline sal_Int32 StreamSocket::write(const void* pBuffer, sal_uInt32 n) - { - return osl_writeSocket( m_handle, pBuffer, n ); - } - - - //______________________________________________________________________________ - inline sal_Int32 StreamSocket::recv(void* pBuffer, - sal_uInt32 BytesToRead, - oslSocketMsgFlag Flag) - { - return osl_receiveSocket( m_handle, pBuffer,BytesToRead, Flag ); - } - - //______________________________________________________________________________ - inline sal_Int32 StreamSocket::send(const void* pBuffer, - sal_uInt32 BytesToSend, - oslSocketMsgFlag Flag) - { - return osl_sendSocket( m_handle, pBuffer, BytesToSend, Flag ); - } - - //______________________________________________________________________________ - inline ConnectorSocket::ConnectorSocket(oslAddrFamily Family, - oslProtocol Protocol, - oslSocketType Type) - : StreamSocket( Family, Protocol ,Type ) - {} - - //______________________________________________________________________________ - inline oslSocketResult ConnectorSocket::connect( const SocketAddr& TargetHost, - const TimeValue* pTimeout ) - { - return osl_connectSocketTo( m_handle , TargetHost.getHandle(), pTimeout ); - } - - //______________________________________________________________________________ - inline AcceptorSocket::AcceptorSocket(oslAddrFamily Family , - oslProtocol Protocol , - oslSocketType Type ) - : Socket( Type, Family, Protocol ) - {} - - //______________________________________________________________________________ - inline sal_Bool AcceptorSocket::listen(sal_Int32 MaxPendingConnections) - { - return osl_listenOnSocket( m_handle, MaxPendingConnections ); - } - - //______________________________________________________________________________ - inline oslSocketResult AcceptorSocket::acceptConnection( StreamSocket& Connection) - { - oslSocket o = osl_acceptConnectionOnSocket( m_handle, 0 ); - oslSocketResult status = osl_Socket_Ok; - if( o ) - { - Connection = StreamSocket( o , SAL_NO_ACQUIRE ); - } - else - { - Connection = StreamSocket(); - status = osl_Socket_Error; - } - return status; - } - - //______________________________________________________________________________ - inline oslSocketResult AcceptorSocket::acceptConnection( - StreamSocket& Connection, SocketAddr & PeerAddr) - { - // TODO change in/OUT parameter - oslSocket o = osl_acceptConnectionOnSocket( m_handle, (oslSocketAddr *)&PeerAddr ); - oslSocketResult status = osl_Socket_Ok; - if( o ) - { - Connection = StreamSocket( o , SAL_NO_ACQUIRE ); - } - else - { - Connection = StreamSocket(); - status = osl_Socket_Error; - } - return status; - } - - //______________________________________________________________________________ - inline DatagramSocket::DatagramSocket(oslAddrFamily Family, - oslProtocol Protocol, - oslSocketType Type) - : Socket( Type, Family, Protocol ) - {} - - //______________________________________________________________________________ - inline sal_Int32 DatagramSocket::recvFrom(void* pBuffer, - sal_uInt32 BufferSize, - SocketAddr* pSenderAddr, - oslSocketMsgFlag Flag ) - { - sal_Int32 nByteRead; - if( pSenderAddr ) - { - // TODO : correct the out-parameter pSenderAddr outparameter - nByteRead = osl_receiveFromSocket( m_handle, pSenderAddr->getHandle() , pBuffer, - BufferSize, Flag); -// nByteRead = osl_receiveFromSocket( m_handle, *(oslSocketAddr**) &pSenderAddr , pBuffer, -// BufferSize, Flag); - } - else - { - nByteRead = osl_receiveFromSocket( m_handle, 0 , pBuffer , BufferSize , Flag ); - } - return nByteRead; - } - - //______________________________________________________________________________ - inline sal_Int32 DatagramSocket::sendTo( const SocketAddr& ReceiverAddr, - const void* pBuffer, - sal_uInt32 BufferSize, - oslSocketMsgFlag Flag ) - { - return osl_sendToSocket( m_handle, ReceiverAddr.getHandle(), pBuffer, BufferSize, Flag ); - } -} -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/socket_decl.hxx b/sal/inc/osl/socket_decl.hxx deleted file mode 100644 index f51cca12e4c3..000000000000 --- a/sal/inc/osl/socket_decl.hxx +++ /dev/null @@ -1,721 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_SOCKET_DECL_HXX_ -#define _OSL_SOCKET_DECL_HXX_ - -#include <osl/socket.h> -#include <rtl/ustring.hxx> -#include <rtl/byteseq.hxx> - -namespace osl -{ - enum __osl_socket_NoCopy { SAL_NO_COPY }; - - /** The class should be understood as a reference to a socket address handle ( struct sockaddr ). - - The handle is mutable. - */ - class SocketAddr - { - protected: - oslSocketAddr m_handle; - public: - - /** Creates socket address of unknown type. - */ - inline SocketAddr(); - - /** Copy constructor. - */ - inline SocketAddr(const SocketAddr& Addr); - - /** The SocketAddr takes over the responsibility of the handle ( which means, - that the handle gets destructed by the destructor of this reference) - @param nocopy use SAL_NO_COPY - */ - inline SocketAddr(const oslSocketAddr , __osl_socket_NoCopy nocopy ); - - /** Copyconstructs the oslSocketAddr handle. - */ - inline SocketAddr(oslSocketAddr Addr); - - /** tcpip-specif constructor. - @param strAddrOrHostName strAddrOrHostName hostname or dotted ip-number of the network - interface, the socket shall be created on. - @param nPort tcp-ip port number - */ - inline SocketAddr( const ::rtl::OUString& strAddrOrHostName, sal_Int32 nPort ); - - /** destroys underlying oslSocketAddress - */ - inline ~SocketAddr(); - - /** checks, if the SocketAddr was created successful. - @return <code>sal_True</code> if there is a valid underlying handle, - otherwise sal_False. - */ - inline sal_Bool is() const; - - /** Converts the address to a (human readable) domain-name. - - @param pResult 0, if you are not interested in errors, - otherwise *pResult contains an error code on failure - or osl_Socket_Ok on success - @return the hostname of this SocketAddr or an empty string on failure. - @see osl_getHostnameOfSocketAddr() - */ - inline ::rtl::OUString SAL_CALL getHostname( oslSocketResult *pResult = 0 ) const; - - /** Sets the ipaddress or hostname of the SocketAddress - */ - inline sal_Bool SAL_CALL setHostname( const ::rtl::OUString &sDottedIpOrHostname ); - - /** Returns the port number of the address. - @return the port in host-byte order or or OSL_INVALID_PORT on errors. - */ - inline sal_Int32 SAL_CALL getPort() const; - - /** Sets the port number of the address. - @return true if successfule. - */ - inline sal_Bool SAL_CALL setPort( sal_Int32 nPort ); - - /** Sets the address of the underlying socket address struct in network byte order. - @return true on success, false signales falure. - */ - inline sal_Bool SAL_CALL setAddr( const ::rtl::ByteSequence & address ); - - /** Returns the address of the underlying socket in network byte order - */ - inline ::rtl::ByteSequence SAL_CALL getAddr( oslSocketResult *pResult = 0 ) const; - - /** assign the handle to this reference. The previous handle is released. - */ - inline SocketAddr & SAL_CALL operator= (oslSocketAddr Addr); - - /** - */ - inline SocketAddr & SAL_CALL operator= (const SocketAddr& Addr); - - /** Assigns the socket addr without copyconstructing it. - @param Addr the socket address. - @param nocopy use SAL_NO_COPY - */ - inline SocketAddr & SAL_CALL assign( oslSocketAddr Addr, __osl_socket_NoCopy nocopy ); - - /** Returns true if the underlying handle is identical to the Addr handle. - */ - inline sal_Bool SAL_CALL operator== (oslSocketAddr Addr) const; - - /** Returns true if the underlying handle is identical to the Addr handle. - */ - inline sal_Bool SAL_CALL operator== (const SocketAddr & Addr) const; - - /** Returns the underlying SocketAddr handle without copyconstructing it. - */ - inline oslSocketAddr SAL_CALL getHandle() const; - - /** Get the hostname for the local interface. - @param pResult after the call *pResult contains osl_Socket_Ok on success or - an error on failure. - @return the hostname - */ - static inline ::rtl::OUString SAL_CALL getLocalHostname( oslSocketResult *pResult = 0); - - /** Tries to find an address for a host. - @see osl_resolveHostname() - @return A new created socket-address or 0 if the name could not be found. - */ - static inline void SAL_CALL resolveHostname( - const ::rtl::OUString & strHostName , SocketAddr & Addr ); - - /** - Tries to find the port associated with the given service/protocol- - pair (e.g. "ftp"/"tcp"). - @return the port number in host-byte order or <code>OSL_INVALID_PORT</code> - if no service/protocol pair could be found. - */ - static inline sal_Int32 SAL_CALL getServicePort( - const ::rtl::OUString& strServiceName, - const ::rtl::OUString & strProtocolName= ::rtl::OUString("tcp") ); - }; - - - class Socket - { - protected: - oslSocket m_handle; - protected: - /** Creates a socket. Note it's protected. - @param Type - @param Family - @param Protocol - */ - inline Socket(oslSocketType Type, - oslAddrFamily Family = osl_Socket_FamilyInet, - oslProtocol Protocol = osl_Socket_ProtocolIp); - public: - inline Socket( ); - - inline Socket( const Socket & socket ); - - inline Socket( oslSocket socketHandle ); - - /** The instance takes over the handle's ownership without acquiring the - handle, but releases it within the dtor. - @param socketHandle the handle - @param noacquire use SAL_NO_ACQUIRE - */ - inline Socket( oslSocket socketHandle, __sal_NoAcquire noacquire ); - - /** Destructor. Releases the underlying handle - */ - inline ~Socket(); - - /** Assignment operator. If socket was already created, the old one will - be discarded. - */ - inline Socket& SAL_CALL operator= ( oslSocket socketHandle); - - /** Assignment operator. If socket was already created, the old one will - be discarded. - */ - inline Socket& SAL_CALL operator= (const Socket& sock); - - /** - @return <code>sal_True</code>, when the underlying handle of both - Socket instances are identical, <code>sal_False</code> otherwise. - */ - inline sal_Bool SAL_CALL operator==( const Socket& rSocket ) const ; - - /** - @return <code>sal_True</code>, when the underlying handle of both - Socket instances are identical, <code>sal_False</code> otherwise. - */ - inline sal_Bool SAL_CALL operator==( const oslSocket socketHandle ) const; - - /** Closes a definite or both directions of the bidirectional stream. - - @param Direction - @see osl_shutdownSocket() - */ - inline void SAL_CALL shutdown( oslSocketDirection Direction = osl_Socket_DirReadWrite ); - - /** Closes a socket. - Note that closing a socket is identical to shutdown( osl_Socket_DirReadWrite ), - as the operating system distinguish both cases, both functions or offered in this API. - @see osl_closeSocket() - */ - inline void SAL_CALL close(); - - /** Retrieves the address of the local interface of this socket. - @param Addr [out] receives the address. - @see osl_getLocalAddrOfSocket() - */ - inline void SAL_CALL getLocalAddr( SocketAddr &Addr ) const; - - /** Get the local port of the socket. Usually used after bind(). - @return the port number or OSL_INVALID_PORT on errors. - */ - inline sal_Int32 SAL_CALL getLocalPort() const; - - /** Get the hostname for the local interface. - @return the hostname or an empty string (""). - */ - inline ::rtl::OUString SAL_CALL getLocalHost() const; - - /** Retrieves the address of the remote host of this socket. - @param Addr [out] receives the address. - */ - inline void SAL_CALL getPeerAddr( SocketAddr & Addr) const; - - /** Get the remote port of the socket. - @return the port number or OSL_INVALID_PORT on errors. - */ - inline sal_Int32 SAL_CALL getPeerPort() const; - - /** Get the hostname for the remote interface. - @return the hostname or an empty string (""). - */ - inline ::rtl::OUString SAL_CALL getPeerHost() const; - - /** Binds the socket to the specified (local) interface. - @param LocalInterface Address of the Interface - @return True if bind was successful. - */ - inline sal_Bool SAL_CALL bind(const SocketAddr& LocalInterface); - - /** Checks if read operations will block. - - You can specify a timeout-value in seconds/nanoseconds that denotes - how the operation will block if the Socket is not ready. - @return <code>sal_True</code> if read operations (recv, recvFrom, accept) on the Socket - will NOT block; <code>sal_False</code> if it would block or if an error occurred. - - @param pTimeout if 0, the operation will block without a timeout. Otherwise - the specified amout of time. - */ - inline sal_Bool SAL_CALL isRecvReady(const TimeValue *pTimeout = 0) const; - - /** Checks if send operations will block. - - You can specify a timeout-value in seconds/nanoseconds that denotes - how the operation will block if the Socket is not ready. - @return <code>sal_True</code> if send operations (send, sendTo) on the Socket - will NOT block; <code>sal_False</code> if it would block or if an error occurred. - - @param pTimeout if 0, the operation will block without a timeout. Otherwise - the specified amout of time. - */ - inline sal_Bool SAL_CALL isSendReady(const TimeValue *pTimeout = 0) const; - - - /** Checks if a request for out-of-band data will block. - - You can specify a timeout-value in seconds/nanoseconds that denotes - how the operation will block if the Socket has no pending OOB data. - - @return <code>sal_True</code> if OOB-request operations (recv with appropriate flags) - on the Socket will NOT block; <code>sal_False</code> if it would block or if - an error occurred. - - @param pTimeout if 0, the operation will block without a timeout. Otherwise - the specified amout of time. - */ - inline sal_Bool SAL_CALL isExceptionPending(const TimeValue *pTimeout = 0) const; - - - /** Queries the socket for its type. - @return one of: - <ul> - <li> <code>osl_Socket_TypeStream</code> - <li> <code>osl_Socket_TypeDgram</code> - <li> <code>osl_Socket_TypeRaw</code> - <li> <code>osl_Socket_TypeRdm</code> - <li> <code>osl_Socket_TypeSeqPacket</code> - <li> <code>osl_invalid_SocketType</code>, if an error occurred - </ul> - */ - inline oslSocketType SAL_CALL getType() const; - - /** Retrieves option-attributes associated with the socket. - @param Option The attribute to query. - Valid values (depending on the Level) are: - <ul> - <li> <code>osl_Socket_Option_Debug</code><br> - (sal_Bool) Socket debug flag 1 = enabled, 0 = disabled. - - <li> <code>osl_Socket_OptionAcceptConn</code><br> - <li> <code>osl_Socket_OptionReuseAddr</code><br> - (sal_Bool) Allows the socket to be bound to an address that is - already in use. - 1 = multiple bound allowed, 0 = no multiple bounds allowed - - <li><code>osl_Socket_OptionKeepAlive</code><br> - (sal_Bool) Keepalive packets are sent by the underlying socket. - 1 = enabled, 0 = disabled - - <li><code>osl_Socket_OptionDontRoute</code><br> - (sal_Bool) Do not route: send directly to interface. - 1 = do not route , 0 = routing possible - - <li><code>osl_Socket_OptionBroadcast</code><br> - (sal_Bool) Transmission of broadcast messages are allowed on the socket. - 1 = transmission allowed, 0 = transmission disallowed - - <li><code>osl_Socket_OptionUseLoopback</code><br> - - <li><code>osl_Socket_OptionLinger</code><br> - (linger) Linger on close if unsent data is present. - linger has two members: l_onoff, l_linger - l_onoff = 0 is off, l_onoff > 0 and l_linger= timeout in seconds. - - <li><code>osl_Socket_OptionOOBinLine</code><br> - - - <li><code>osl_Socket_OptionSndBuf</code><br> - (sal_Int32) Size of the send buffer in bytes. Data is sent after - SndTimeo or when the buffer is full. This allows faster writing - to the socket. - - <li><code>osl_Socket_OptionRcvBuf</code><br> - (sal_Int32) Size of the receive buffer in bytes. Data is sent after - SndTimeo or when the buffer is full. This allows faster writing - to the socket and larger packet sizes. - - <li><code>osl_Socket_OptionSndLowat</code><br> - - <li><code>osl_Socket_OptionRcvLowat</code><br> - - <li><code>osl_Socket_OptionSndTimeo</code><br> - (sal_Int32) Data is sent after this timeout. This allows gathering - of data to send larger packages but increases latency times. - - <li><code>osl_Socket_OptionRcvTimeo</code><br> - - <li><code>osl_Socket_OptionError</code><br> - <li><code>osl_Socket_OptionType</code><br> - - <li><code>osl_Socket_OptionTcpNoDelay</code><br> - Disables the Nagle algorithm for send coalescing. (Do not - collect data until a packet is full, instead send immediately. - This increases network traffic but might improve latency-times.) - 1 = disables the algorithm, 0 = keeps it enabled. - </ul> - - If not above mentioned otherwise, the options are only valid for - level <code>osl_Socket_LevelSocket</code>. - @param pBuffer The Buffer will be filled with the attribute. - - @param BufferLen The size of pBuffer. - - @param Level The option level. - - Valid values are: - <ul> - <li><code>osl_Socket_LevelSocket</code> : Socket Level - <li><code>osl_Socket_LevelTcp</code> : Level of Transmission Control Protocol - </ul> - @return The size of the attribute copied into pBuffer or -1 if an error - occurred. - */ - inline sal_Int32 SAL_CALL getOption( - oslSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen, - oslSocketOptionLevel Level= osl_Socket_LevelSocket) const; - - /** Sets the sockets attributes. - - @param Option denotes the option to modify. - Valid values (depending on the Level) are: - <ul> - <li> osl_Socket_Option_Debug - <li> osl_Socket_OptionAcceptConn - <li> osl_Socket_OptionReuseAddr - <li> osl_Socket_OptionKeepAlive - <li> osl_Socket_OptionDontRoute - <li> osl_Socket_OptionBroadcast - <li> osl_Socket_OptionUseLoopback - <li> osl_Socket_OptionLinger - <li> osl_Socket_OptionOOBinLine - <li> osl_Socket_OptionSndBuf - <li> osl_Socket_OptionRcvBuf - <li> osl_Socket_OptionSndLowat - <li> osl_Socket_OptionRcvLowat - <li> osl_Socket_OptionSndTimeo - <li> osl_Socket_OptionRcvTimeo - <li> osl_Socket_OptionError - <li> osl_Socket_OptionType - <li> osl_Socket_OptionTcpNoDelay - </ul> - - If not above mentioned otherwise, the options are only valid for - level osl_Socket_LevelSocket. - - @param pBuffer Pointer to a Buffer which contains the attribute-value. - - @param BufferLen contains the length of the Buffer. - - @param Level selects the level for which an option should be changed. - Valid values are: - <ul> - <li> osl_Socket_evel_Socket : Socket Level - <li> osl_Socket_Level_Tcp : Level of Transmission Control Protocol - </ul> - - @return True if the option could be changed. - */ - inline sal_Bool SAL_CALL setOption( oslSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen, - oslSocketOptionLevel Level= osl_Socket_LevelSocket ) const; - - /** Convenience function for setting sal_Bool and sal_Int32 option values. - @see setOption() - */ - inline sal_Bool setOption( oslSocketOption option, sal_Int32 nValue ); - - /** Convenience function for retrieving sal_Bool and sal_Int32 option values. - @see setOption() - */ - inline sal_Int32 getOption( oslSocketOption option ) const; - - /** Enables/disables non-blocking mode of the socket. - @param bNonBlockingMode If <code>sal_True</code>, blocking mode will be switched off - If <code>sal_False</code>, the socket will become a blocking - socket (which is the default behaviour of a socket). - @return <code>sal_True</code> if mode could be set. - */ - inline sal_Bool SAL_CALL enableNonBlockingMode( sal_Bool bNonBlockingMode); - - /** Query blocking mode of the socket. - @return <code>sal_True</code> if non-blocking mode is set. - */ - inline sal_Bool SAL_CALL isNonBlockingMode() const; - - - /** clears the error status - */ - inline void SAL_CALL clearError() const; - - /** returns a constant decribing the last error for the socket system. - - @return osl_Socket_E_NONE if no error occurred, invalid_SocketError if - an unknown (unmapped) error occurred, otherwise an enum describing the - error. - @see osl_getLastSocketError() - */ - inline oslSocketError getError() const; - - /** Builds a string with the last error-message for the socket. - */ - inline ::rtl::OUString getErrorAsString( ) const; - - /** Returns the underlying handle unacquired (The caller must acquire it to keep it). - */ - inline oslSocket getHandle() const; - }; - - - class StreamSocket : public Socket - { - public: - /** Creates a socket. - @param Family the Family of the socket (Inet by default) - @param Protocol the Protocon of the socket (IP by default) - @param Type For some protocols it might be desirable to - use a different type than <code>osl_Socket_TypeStream</code> - (like <code>osl_Socket_TypeSeqPacket</code>). - Therefore this parameter is not hidden. - */ - inline StreamSocket(oslAddrFamily Family = osl_Socket_FamilyInet, - oslProtocol Protocol = osl_Socket_ProtocolIp, - oslSocketType Type = osl_Socket_TypeStream); - - inline StreamSocket( const StreamSocket & ); - - inline StreamSocket( oslSocket Socket , __sal_NoAcquire noacquire ); - - inline StreamSocket( oslSocket Socket ); - - /** Retrieves n bytes from the stream and copies them into pBuffer. - The method avoids incomplete reads due to packet boundaries and is thus - blocking. - @param pBuffer receives the read data. pBuffer must be large enough - to hold n bytes. - @param n the number of bytes to read. - @return the number of read bytes. The number will only be smaller than - n if an exceptional condition (e.g. connection closed) occurs. - */ - inline sal_Int32 SAL_CALL read(void* pBuffer, sal_uInt32 n); - - /** Writes n bytes from pBuffer to the stream. The method avoids - incomplete writes due to packet boundaries and is thus blocking. - @param pBuffer contains the data to be written. - @param n the number of bytes to write. - @return the number of written bytes. The number will only be smaller than - n if an exceptional condition (e.g. connection closed) occurs. - */ - inline sal_Int32 SAL_CALL write(const void* pBuffer, sal_uInt32 n); - - - /** Tries to receive BytesToRead data from the connected socket, - - @param[out] pBuffer Points to a buffer that will be filled with the received - data. pBuffer must have at least have a size of BytesToRead. - @param[in] BytesToRead The number of bytes to read. - @param[in] flags Modifier for the call. Valid values are: - - <ul> - <li><code>osl_Socket_MsgNormal</code> - <li><code>osl_Socket_MsgOOB</code> - <li><code>osl_Socket_MsgPeek</code> - <li><code>osl_Socket_MsgDontRoute</code> - <li><code>osl_Socket_MsgMaxIOVLen</code> - </ul> - @return the number of received bytes, which may be less than BytesToRead. - */ - inline sal_Int32 SAL_CALL recv(void* pBuffer, - sal_uInt32 BytesToRead, - oslSocketMsgFlag flags= osl_Socket_MsgNormal); - - /** Tries to send BytesToSend data to the connected socket. - - @param pBuffer [in] Points to a buffer that contains the send-data. - @param BytesToSend [in] The number of bytes to send. pBuffer must have at least - this size. - @param Flag [in] Modifier for the call. Valid values are: - <ul> - <li><code>osl_Socket_MsgNormal</code> - <li><code>osl_Socket_MsgOOB</code> - <li><code>osl_Socket_MsgPeek</code> - <li><code>osl_Socket_MsgDontRoute</code> - <li><code>osl_Socket_MsgMaxIOVLen</code> - </ul> - - @return the number of transfered bytes. It may be less than BytesToSend. - */ - sal_Int32 SAL_CALL send(const void* pBuffer, - sal_uInt32 BytesToSend, - oslSocketMsgFlag= osl_Socket_MsgNormal); - }; - - class ConnectorSocket : public StreamSocket - { - public: - /** Creates a socket that can connect to a (remote) host. - @param Family the Family of the socket (Inet by default) - @param Protocol the Protocon of the socket (IP by default) - @param Type For some protocols it might be desirable to - use a different type than sock_stream <code>osl_Socket_TypeSeqPacket</code> - (like <code>osl_Socket_TypeSeqPacket</code>). - Therefore we do not hide this parameter here. - */ - ConnectorSocket(oslAddrFamily Family = osl_Socket_FamilyInet, - oslProtocol Protocol = osl_Socket_ProtocolIp, - oslSocketType Type = osl_Socket_TypeStream); - - - /** Connects the socket to a (remote) host. - @param TargetHost The address of the target. - @param pTimeout The timeout for blocking. If 0, a default system dependent timeout - us used. - @return <code> osl_Socket_Ok</code> if connected successfully, - <code>osl_Socket_TimedOut</code> on timeout, - <code>osl_Socket_Interrupted</code> if unblocked forcefully (by osl::Socket::close()), - <code>osl_Socket_Error</code> if connect failed. - */ - oslSocketResult SAL_CALL connect(const SocketAddr& TargetHost, const TimeValue* pTimeout = 0); - }; - - /** Allows to accept socket connections. - */ - class AcceptorSocket : public Socket - { - public: - inline AcceptorSocket(oslAddrFamily Family = osl_Socket_FamilyInet, - oslProtocol Protocol = osl_Socket_ProtocolIp, - oslSocketType Type = osl_Socket_TypeStream); - - /** Prepare a socket for the accept-call. The socket must have been - bound before to the local address. - @param MaxPendingConnections The maximum number of pending - connections (waiting to be accepted) on this socket. If you use - -1, a system default value is used. - @return <code>sal_True</code> if call was successful. - */ - inline sal_Bool SAL_CALL listen(sal_Int32 MaxPendingConnections= -1); - - /** Accepts incoming connections on the socket. You must - precede this call with osl::Socket::bind() and listen(). - @param Connection receives the incoming connection. - @return <code>osl_Socket_Ok</code>, if a connection has been accepted, - <code>osl_Socket_TimedOut</code>, if m_RecvTimeout milliseconds passed without connect, - <code>osl_Socket_Error</code> on errors. - */ - inline oslSocketResult SAL_CALL acceptConnection( StreamSocket& Connection); - - /** Accepts incoming connections on the socket. You must - precede this call with osl::Socket::bind() and listen(). - @param PeerAddr receives the address of the connecting entity - (your communication partner). - @param Connection receives the incoming connection. - @return <code>osl_Socket_Ok</code>, if a connection has been accepted, - <code>osl_Socket_TimedOut</code>, if m_RecvTimeout milliseconds passed without connect, - <code>osl_Socket_Error</code> on errors. - */ - inline oslSocketResult SAL_CALL acceptConnection( StreamSocket& Connection, SocketAddr & PeerAddr); - }; - - - - /** A connectionless socket to send and receive datagrams. - */ - class DatagramSocket : public Socket - { - public: - - /** Creates a datagram socket. - @param Family the Family of the socket (Inet by default) - @param Protocol the Protocon of the socket (IP by default) - @param Type is sock_dgram by default. - */ - inline DatagramSocket(oslAddrFamily Family= osl_Socket_FamilyInet, - oslProtocol Protocol= osl_Socket_ProtocolIp, - oslSocketType Type= osl_Socket_TypeDgram); - - /** Tries to receives BufferSize data from the socket, if no error occurs. - - @param pSenderAddr [out] You must provide pointer to a SocketAddr. - It will be filled with the address of the datagrams sender. - If pSenderAddr is 0, it is ignored. - @param pBuffer [out] Points to a buffer that will be filled with the received - datagram. - @param BufferSize [in] The size of pBuffer. - @param Flag [in] Modifier for the call. Valid values are: - <ul> - <li><code>osl_Socket_MsgNormal</code> - <li><code>osl_Socket_MsgOOB</code> - <li><code>osl_Socket_MsgPeek</code> - <li><code>osl_Socket_MsgDontRoute</code> - <li><code>osl_Socket_MsgMaxIOVLen</code> - </ul> - - @return the number of received bytes. - */ - inline sal_Int32 SAL_CALL recvFrom(void* pBuffer, - sal_uInt32 BufferSize, - SocketAddr* pSenderAddr= 0, - oslSocketMsgFlag Flag= osl_Socket_MsgNormal); - - /** Tries to send one datagram with BytesToSend size to the given ReceiverAddr. - Since there is only send one packet, the function doesn't care about - packet boundaries. - - @param ReceiverAddr [in] A SocketAddr that contains - the destination address for this send. - - @param pBuffer [in] Points to a buffer that contains the send-data. - @param BufferSize [in] The number of bytes to send. pBuffer must have at least - this size. - @param Flag [in] Modifier for the call. Valid values are: - - <ul> - <li><code>osl_Socket_MsgNormal</code> - <li><code>osl_Socket_MsgOOB</code> - <li><code>osl_Socket_MsgPeek</code> - <li><code>osl_Socket_MsgDontRoute</code> - <li><code>osl_Socket_MsgMaxIOVLen</code> - </ul> - - @return the number of transfered bytes. - */ - inline sal_Int32 SAL_CALL sendTo( const SocketAddr& ReceiverAddr, - const void* pBuffer, - sal_uInt32 BufferSize, - oslSocketMsgFlag Flag= osl_Socket_MsgNormal); - }; - -} - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/thread.h b/sal/inc/osl/thread.h deleted file mode 100644 index bc93a57b1735..000000000000 --- a/sal/inc/osl/thread.h +++ /dev/null @@ -1,196 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_THREAD_H_ -#define _OSL_THREAD_H_ - -#include "sal/config.h" - -#include "osl/time.h" -#include "rtl/textenc.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - Opaque data type for threads. As with all other osl-handles - you can initialize and/or test it to/for 0. -*/ -typedef void* oslThread; - -/** the function-ptr. representing the threads worker-function. -*/ -typedef void (SAL_CALL *oslWorkerFunction)(void*); - -/** levels of thread-priority - Note that oslThreadPriorityUnknown might be returned - by getPriorityOfThread() (e.g. when it is terminated), - but mustn't be used with setPriority()! -*/ -typedef enum -{ - osl_Thread_PriorityHighest, - osl_Thread_PriorityAboveNormal, - osl_Thread_PriorityNormal, - osl_Thread_PriorityBelowNormal, - osl_Thread_PriorityLowest, - osl_Thread_PriorityUnknown, /* don't use to set */ - osl_Thread_Priority_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} oslThreadPriority; - - -typedef sal_uInt32 oslThreadIdentifier; - -typedef void* oslThreadKey; - -/** Create the thread, using the function-ptr pWorker as - its main (worker) function. This functions receives in - its void* parameter the value supplied by pThreadData. - Once the OS-structures are initialized,the thread starts - running. - @return 0 if creation failed, otherwise a handle to the thread -*/ -SAL_DLLPUBLIC oslThread SAL_CALL osl_createThread(oslWorkerFunction pWorker, void* pThreadData); - -/** Create the thread, using the function-ptr pWorker as - its main (worker) function. This functions receives in - its void* parameter the value supplied by pThreadData. - The thread will be created, but it won't start running. - To wake-up the thread, use resume(). - @return 0 if creation failed, otherwise a handle to the thread -*/ -SAL_DLLPUBLIC oslThread SAL_CALL osl_createSuspendedThread(oslWorkerFunction pWorker, void* pThreadData); - -/** Get the identifier for the specified thread or if parameter - Thread is NULL of the current active thread. - @return identifier of the thread -*/ -SAL_DLLPUBLIC oslThreadIdentifier SAL_CALL osl_getThreadIdentifier(oslThread Thread); - -/** Release the thread handle. - If Thread is NULL, the function won't do anything. - Note that we do not interfere with the actual running of - the thread, we just free up the memory needed by the handle. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_destroyThread(oslThread Thread); - -/** Wake-up a thread that was suspended with suspend() or - createSuspended(). The oslThread must be valid! -*/ -SAL_DLLPUBLIC void SAL_CALL osl_resumeThread(oslThread Thread); - -/** Suspend the execution of the thread. If you want the thread - to continue, call resume(). The oslThread must be valid! -*/ -SAL_DLLPUBLIC void SAL_CALL osl_suspendThread(oslThread Thread); - -/** Changes the threads priority. - The oslThread must be valid! -*/ -SAL_DLLPUBLIC void SAL_CALL osl_setThreadPriority(oslThread Thread, oslThreadPriority Priority); - -/** Retrieves the threads priority. - Returns oslThreadPriorityUnknown for invalid Thread-argument or - terminated thread. (I.e.: The oslThread might be invalid.) -*/ -SAL_DLLPUBLIC oslThreadPriority SAL_CALL osl_getThreadPriority(const oslThread Thread); - -/** Returns True if the thread was created and has not terminated yet. - Note that according to this definition a "running" thread might be - suspended! Also returns False is Thread is NULL. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isThreadRunning(const oslThread Thread); - -/** Blocks the calling thread until Thread has terminated. - Returns immediately if Thread is NULL. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_joinWithThread(oslThread Thread); - -/** Blocks the calling thread at least for the given number - of time. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_waitThread(const TimeValue* pDelay); - -/** The requested thread will get terminate the next time - scheduleThread() is called. -*/ -SAL_DLLPUBLIC void SAL_CALL osl_terminateThread(oslThread Thread); - -/** Offers the rest of the threads time-slice to the OS. - scheduleThread() should be called in the working loop - of the thread, so any other thread could also get the - processor. Returns False if the thread should terminate, so - the thread could free any allocated resources. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_scheduleThread(oslThread Thread); - -/** Offers the rest of the threads time-slice to the OS. - Under POSIX you _need_ to yield(), otherwise, since the - threads are not preempted during execution, NO other thread - (even with higher priority) gets the processor. Control is - only given to another thread if the current thread blocks - or uses yield(). -*/ -SAL_DLLPUBLIC void SAL_CALL osl_yieldThread(void); - -/** Attempts to set the name of the current thread. - - The name of a thread is usually evaluated for debugging purposes. Not all - platforms support this. On Linux, a set thread name can be observed with - "ps -L". On Windows with the Microsoft compiler, a thread name set while a - debugger is attached can be observed within the debugger. - - @param name the name of the thread; must not be null; on Linux, only the - first 16 characters are used -*/ -SAL_DLLPUBLIC void SAL_CALL osl_setThreadName(char const * name); - -/* Callback when data stored in a thread key is no longer needed */ - -typedef void (SAL_CALL *oslThreadKeyCallbackFunction)(void *); - -/** Create a key to an associated thread local storage pointer. */ -SAL_DLLPUBLIC oslThreadKey SAL_CALL osl_createThreadKey(oslThreadKeyCallbackFunction pCallback); - -/** Destroy a key to an associated thread local storage pointer. */ -SAL_DLLPUBLIC void SAL_CALL osl_destroyThreadKey(oslThreadKey Key); - -/** Get to key associated thread specific data. */ -SAL_DLLPUBLIC void* SAL_CALL osl_getThreadKeyData(oslThreadKey Key); - -/** Set to key associated thread specific data. */ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_setThreadKeyData(oslThreadKey Key, void *pData); - -/** Get the current thread local text encoding. */ -SAL_DLLPUBLIC rtl_TextEncoding SAL_CALL osl_getThreadTextEncoding(void); - -/** Set the thread local text encoding. - @return the old text encoding. -*/ -SAL_DLLPUBLIC rtl_TextEncoding SAL_CALL osl_setThreadTextEncoding(rtl_TextEncoding Encoding); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_THREAD_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/thread.hxx b/sal/inc/osl/thread.hxx deleted file mode 100644 index 3a1b73e829ef..000000000000 --- a/sal/inc/osl/thread.hxx +++ /dev/null @@ -1,238 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _THREAD_HXX_ -#define _THREAD_HXX_ - -#include "sal/config.h" - -#include <cassert> - -#include <osl/time.h> - - -#include <osl/diagnose.h> -#include <osl/thread.h> -#include <rtl/alloc.h> - -namespace osl -{ -/** threadFunc is the function which is executed by the threads - created by the osl::Thread class. The function's signature - matches the one of oslWorkerFunction which is declared in - osl/thread.h . -*/ -extern "C" inline void SAL_CALL threadFunc( void* param); - -/** - A thread abstraction. - - @deprecated use ::salhelper::Thread instead. Only the static member - functions ::osl::Thread::getCurrentIdentifier, ::osl::Thread::wait, and - ::osl::Thread::yield are not deprecated. - */ -class Thread -{ - Thread( const Thread& ); - Thread& operator= ( const Thread& ); -public: - // these are here to force memory de/allocation to sal lib. - inline static void * SAL_CALL operator new( size_t nSize ) SAL_THROW (()) - { return ::rtl_allocateMemory( nSize ); } - inline static void SAL_CALL operator delete( void * pMem ) SAL_THROW (()) - { ::rtl_freeMemory( pMem ); } - inline static void * SAL_CALL operator new( size_t, void * pMem ) SAL_THROW (()) - { return pMem; } - inline static void SAL_CALL operator delete( void *, void * ) SAL_THROW (()) - {} - - Thread(): m_hThread(0){} - - virtual ~Thread() - { - osl_destroyThread( m_hThread); - } - - sal_Bool SAL_CALL create() - { - assert(m_hThread == 0); // only one running thread per instance - m_hThread = osl_createSuspendedThread( threadFunc, (void*)this); - if (m_hThread == 0) - { - return false; - } - osl_resumeThread(m_hThread); - return true; - } - - sal_Bool SAL_CALL createSuspended() - { - assert(m_hThread == 0); // only one running thread per instance - if( m_hThread) - return sal_False; - m_hThread= osl_createSuspendedThread( threadFunc, - (void*)this); - return m_hThread != 0; - } - - virtual void SAL_CALL suspend() - { - if( m_hThread ) - osl_suspendThread(m_hThread); - } - - virtual void SAL_CALL resume() - { - if( m_hThread ) - osl_resumeThread(m_hThread); - } - - virtual void SAL_CALL terminate() - { - if( m_hThread ) - osl_terminateThread(m_hThread); - } - - virtual void SAL_CALL join() - { - osl_joinWithThread(m_hThread); - } - - sal_Bool SAL_CALL isRunning() const - { - return osl_isThreadRunning(m_hThread); - } - - void SAL_CALL setPriority( oslThreadPriority Priority) - { - if( m_hThread ) - osl_setThreadPriority(m_hThread, Priority); - } - - oslThreadPriority SAL_CALL getPriority() const - { - return m_hThread ? osl_getThreadPriority(m_hThread) : osl_Thread_PriorityUnknown; - } - - oslThreadIdentifier SAL_CALL getIdentifier() const - { - return osl_getThreadIdentifier(m_hThread); - } - - static oslThreadIdentifier SAL_CALL getCurrentIdentifier() - { - return osl_getThreadIdentifier(0); - } - - static void SAL_CALL wait(const TimeValue& Delay) - { - osl_waitThread(&Delay); - } - - static void SAL_CALL yield() - { - osl_yieldThread(); - } - - static inline void setName(char const * name) throw () { - osl_setThreadName(name); - } - - virtual sal_Bool SAL_CALL schedule() - { - return m_hThread ? osl_scheduleThread(m_hThread) : sal_False; - } - - SAL_CALL operator oslThread() const - { - return m_hThread; - } - -protected: - - /** The thread functions calls the protected functions - run and onTerminated. - */ - friend void SAL_CALL threadFunc( void* param); - - virtual void SAL_CALL run() = 0; - - virtual void SAL_CALL onTerminated() - { - } - -private: - oslThread m_hThread; -}; - -extern "C" inline void SAL_CALL threadFunc( void* param) -{ - Thread* pObj= (Thread*)param; - pObj->run(); - pObj->onTerminated(); -} - -class ThreadData -{ - ThreadData( const ThreadData& ); - ThreadData& operator= (const ThreadData& ); -public: - /// Create a thread specific local data key - ThreadData( oslThreadKeyCallbackFunction pCallback= 0 ) - { - m_hKey = osl_createThreadKey( pCallback ); - } - - /// Destroy a thread specific local data key - ~ThreadData() - { - osl_destroyThreadKey(m_hKey); - } - - /** Set the data associated with the data key. - @returns True if operation was successful - */ - sal_Bool SAL_CALL setData(void *pData) - { - return (osl_setThreadKeyData(m_hKey, pData)); - } - - /** Get the data associated with the data key. - @returns The data asscoitaed with the data key or - NULL if no data was set - */ - void* SAL_CALL getData() - { - return osl_getThreadKeyData(m_hKey); - } - - operator oslThreadKey() const - { - return m_hKey; - } - -private: - oslThreadKey m_hKey; -}; - -} // end namespace osl - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/time.h b/sal/inc/osl/time.h deleted file mode 100644 index 4be9e7278419..000000000000 --- a/sal/inc/osl/time.h +++ /dev/null @@ -1,159 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _OSL_TIME_H_ -#define _OSL_TIME_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************/ -/* TimeValue */ -/****************************************************************************/ - -#ifdef SAL_W32 -# pragma pack(push, 8) -#endif - -/* Time since Jan-01-1970 */ - -typedef struct { - sal_uInt32 Seconds; - sal_uInt32 Nanosec; -} TimeValue; - -#if defined(SAL_W32) -# pragma pack(pop) -#endif - - -/****************************************************************************/ -/* oslDateTime */ -/****************************************************************************/ - -typedef struct _oslDateTime -{ - /*----------------------------------------------------------------------*/ - /** contains the nanoseconds . - */ - sal_uInt32 NanoSeconds; - - /** contains the seconds (0-59). - */ - sal_uInt16 Seconds; - - /*----------------------------------------------------------------------*/ - /** contains the minutes (0-59). - */ - sal_uInt16 Minutes; - - /*----------------------------------------------------------------------*/ - /** contains the hour (0-23). - */ - sal_uInt16 Hours; - - /*----------------------------------------------------------------------*/ - /** is the day of month (1-31). - */ - sal_uInt16 Day; - - /*----------------------------------------------------------------------*/ - /** is the day of week (0-6 , 0 : Sunday). - */ - sal_uInt16 DayOfWeek; - - /*----------------------------------------------------------------------*/ - /** is the month of year (1-12). - */ - sal_uInt16 Month; - - /*----------------------------------------------------------------------*/ - /** is the year. - */ - sal_uInt16 Year; - -} oslDateTime; - - -/** Get the current system time as TimeValue. - @return false if any error occurs. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getSystemTime( - TimeValue* pTimeVal ); - - -/** Get the GMT from a TimeValue and fill a struct oslDateTime - @param[in] pTimeVal TimeValue - @param[out] pDateTime On success it receives a struct oslDateTime - - @return sal_False if any error occurs else sal_True. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getDateTimeFromTimeValue( - TimeValue* pTimeVal, oslDateTime* pDateTime ); - - -/** Get the GMT from a oslDateTime and fill a TimeValue - @param[in] pDateTime oslDateTime - @param[out] pTimeVal On success it receives a TimeValue - - @return sal_False if any error occurs else sal_True. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getTimeValueFromDateTime( - oslDateTime* pDateTime, TimeValue* pTimeVal ); - - -/** Convert GMT to local time - @param[in] pSystemTimeVal system time to convert - @param[out] pLocalTimeVal On success it receives the local time - - @return sal_False if any error occurs else sal_True. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getLocalTimeFromSystemTime( - TimeValue* pSystemTimeVal, TimeValue* pLocalTimeVal ); - - -/** Convert local time to GMT - @param[in] pLocalTimeVal local time to convert - @param[out] pSystemTimeVal On success it receives the system time - - @return sal_False if any error occurs else sal_True. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getSystemTimeFromLocalTime( - TimeValue* pLocalTimeVal, TimeValue* pSystemTimeVal ); - - -/** Get the value of the global timer - @return current timer value in milli seconds - */ - -SAL_DLLPUBLIC sal_uInt32 SAL_CALL osl_getGlobalTimer(void); - -#ifdef __cplusplus -} -#endif - -#endif /* _OSL_TIME_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/osl/util.h b/sal/inc/osl/util.h deleted file mode 100644 index e9afe39ac20f..000000000000 --- a/sal/inc/osl/util.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - - -#ifndef _OSL_UTIL_H_ -#define _OSL_UTIL_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - @param pEthernetAddr 6 bytes of memory - - @return sal_True if the ethernetaddress could be retrieved. <br> - sal_False if no address could be found. This may be either because - there is no ethernet card or there is no appropriate algorithm - implemented on the platform. In this case, pEthernetAddr is - unchanged. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL osl_getEthernetAddress( sal_uInt8 *pEthernetAddr ); - -#ifdef __cplusplus -} -#endif - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/alloc.h b/sal/inc/rtl/alloc.h deleted file mode 100644 index ef48d01719ee..000000000000 --- a/sal/inc/rtl/alloc.h +++ /dev/null @@ -1,257 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_ALLOC_H_ -#define _RTL_ALLOC_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/** Allocate memory. - - A call to this function will return NULL upon the requested - memory size being either zero or larger than currently allocatable. - - @param Bytes [in] memory size. - @return pointer to allocated memory. - */ -SAL_DLLPUBLIC void * SAL_CALL rtl_allocateMemory ( - sal_Size Bytes -) SAL_THROW_EXTERN_C(); - - -/** Reallocate memory. - - A call to this function with parameter 'Ptr' being NULL - is equivalent to a rtl_allocateMemory() call. - A call to this function with parameter 'Bytes' being 0 - is equivalent to a rtl_freeMemory() call. - - @see rtl_allocateMemory() - @see rtl_freeMemory() - - @param Ptr [in] pointer to previously allocated memory. - @param Bytes [in] new memory size. - @return pointer to reallocated memory. May differ from Ptr. - */ -SAL_DLLPUBLIC void * SAL_CALL rtl_reallocateMemory ( - void * Ptr, - sal_Size Bytes -) SAL_THROW_EXTERN_C(); - - -/** Free memory. - @param Ptr [in] pointer to previously allocated memory. - @return none. Memory is released. Ptr is invalid. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_freeMemory ( - void * Ptr -) SAL_THROW_EXTERN_C(); - - -/** Allocate and zero memory. - - A call to this function will return NULL upon the requested - memory size being either zero or larger than currently allocatable. - - @param Bytes [in] memory size. - @return pointer to allocated and zero'ed memory. - */ -SAL_DLLPUBLIC void * SAL_CALL rtl_allocateZeroMemory ( - sal_Size Bytes -) SAL_THROW_EXTERN_C(); - - -/** Zero and free memory. - @param Ptr [in] pointer to previously allocated memory. - @param Bytes [in] memory size. - @return none. Memory is zero'ed and released. Ptr is invalid. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_freeZeroMemory ( - void * Ptr, - sal_Size Bytes -) SAL_THROW_EXTERN_C(); - - -/** Opaque rtl_arena_type. - */ -typedef struct rtl_arena_st rtl_arena_type; - -#define RTL_ARENA_NAME_LENGTH 31 - - -/** rtl_arena_create() - * - * @param pName [in] descriptive name; for debugging purposes. - * @param quantum [in] resource allocation unit / granularity; rounded up to next power of 2. - * @param quantum_cache_max [in] max resources to cache; rounded up to next multiple of quantum; usually 0. - * @param source_arena [in] passed as argument to source_alloc, source_free; usually NULL. - * @param source_alloc [in] function to allocate resources; usually rtl_arena_alloc. - * @param source_free [in] function to free resources; usually rtl_arena_free. - * @param nFlags [in] flags; usually 0. - * - * @return pointer to rtl_arena_type, or NULL upon failure. - * - * @see rtl_arena_destroy() - */ -SAL_DLLPUBLIC rtl_arena_type * SAL_CALL rtl_arena_create ( - const char * pName, - sal_Size quantum, - sal_Size quantum_cache_max, - rtl_arena_type * source_arena, - void * (SAL_CALL * source_alloc)(rtl_arena_type *, sal_Size *), - void (SAL_CALL * source_free) (rtl_arena_type *, void *, sal_Size), - int nFlags -) SAL_THROW_EXTERN_C(); - - -/** rtl_arena_destroy() - * - * @param pArena [in] the arena to destroy. - * @return None - * - * @see rtl_arena_create() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_arena_destroy ( - rtl_arena_type * pArena -) SAL_THROW_EXTERN_C(); - - -/** rtl_arena_alloc() - * - * @param pArena [in] arena from which resource is allocated. - * @param pBytes [inout] size of resource to allocate. - * - * @return allocated resource, or NULL upon failure. - * - * @see rtl_arena_free() - */ -SAL_DLLPUBLIC void * SAL_CALL rtl_arena_alloc ( - rtl_arena_type * pArena, - sal_Size * pBytes -) SAL_THROW_EXTERN_C(); - - -/** rtl_arena_free() - * - * @param pArena [in] arena from which resource was allocated. - * @param pAddr [in] resource to free. - * @param nBytes [in] size of resource. - * - * @return None. - * - * @see rtl_arena_alloc() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_arena_free ( - rtl_arena_type * pArena, - void * pAddr, - sal_Size nBytes -) SAL_THROW_EXTERN_C(); - - -/** Opaque rtl_cache_type. - */ -typedef struct rtl_cache_st rtl_cache_type; - -#define RTL_CACHE_NAME_LENGTH 31 - -#define RTL_CACHE_FLAG_BULKDESTROY 1 - -/** rtl_cache_create() - * - * @param pName [in] descriptive name; for debugging purposes. - * @param nObjSize [in] object size. - * @param nObjAlign [in] object alignment; usually 0 for suitable default. - * @param constructor [in] object constructor callback function; returning 1 for success or 0 for failure. - * @param destructor [in] object destructor callback function. - * @param reclaim [in] reclaim callback function. - * @param pUserArg [in] opaque argument passed to callback functions. - * @param pSource [in] opaque argument passed to callback functions. - * @param nFlags [in] flags. - * - * @return pointer to rtl_cache_type, or NULL upon failure. - * - * @see rtl_cache_destroy() - */ -SAL_DLLPUBLIC rtl_cache_type * SAL_CALL rtl_cache_create ( - const char * pName, - sal_Size nObjSize, - sal_Size nObjAlign, - int (SAL_CALL * constructor)(void * pObj, void * pUserArg), - void (SAL_CALL * destructor) (void * pObj, void * pUserArg), - void (SAL_CALL * reclaim) (void * pUserArg), - void * pUserArg, - rtl_arena_type * pSource, - int nFlags -) SAL_THROW_EXTERN_C(); - - -/** rtl_cache_destroy() - * - * @param pCache [in] the cache to destroy. - * - * @return None. - * - * @see rtl_cache_create() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_cache_destroy ( - rtl_cache_type * pCache -) SAL_THROW_EXTERN_C(); - - -/** rtl_cache_alloc() - * - * @param pCache [in] cache from which object is allocated. - * - * @return pointer to allocated object, or NULL upon failure. - */ -SAL_DLLPUBLIC void * SAL_CALL rtl_cache_alloc ( - rtl_cache_type * pCache -) SAL_THROW_EXTERN_C(); - - -/** rtl_cache_free() - * - * @param pCache [in] cache from which object was allocated. - * @param pObj [in] object to free. - * - * @return None. - * - * @see rtl_cache_alloc() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_cache_free ( - rtl_cache_type * pCache, - void * pObj -) SAL_THROW_EXTERN_C(); - - -#ifdef __cplusplus -} -#endif - -#endif /*_RTL_ALLOC_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/allocator.hxx b/sal/inc/rtl/allocator.hxx deleted file mode 100644 index 05575c247fe9..000000000000 --- a/sal/inc/rtl/allocator.hxx +++ /dev/null @@ -1,175 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef INCLUDED_RTL_ALLOCATOR_HXX -#define INCLUDED_RTL_ALLOCATOR_HXX - -#include "sal/config.h" - -#include "sal/types.h" -#include "rtl/alloc.h" -#include <cstddef> - -/// @cond INTERNAL - -//###################################################### -// This is no general purpose STL allocator but one -// necessary to use STL for some implementation but -// avoid linking sal against the STLPort library!!! -// For more information on when and how to define a -// custom stl allocator have a look at Scott Meyers: -// "Effective STL", Nicolai M. Josuttis: -// "The C++ Standard Library - A Tutorial and Reference" -// and at http://www.josuttis.com/cppcode/allocator.html - -namespace rtl { - -template<class T> -class Allocator -{ -public: - typedef T value_type; - typedef T* pointer; - typedef const T* const_pointer; - typedef T& reference; - typedef const T& const_reference; - typedef ::std::size_t size_type; - typedef ::std::ptrdiff_t difference_type; - - //----------------------------------------- - template<class U> - struct rebind - { - typedef Allocator<U> other; - }; - - //----------------------------------------- - pointer address (reference value) const - { - return &value; - } - - //----------------------------------------- - const_pointer address (const_reference value) const - { - return &value; - } - - //----------------------------------------- - Allocator() SAL_THROW(()) - {} - - //----------------------------------------- - template<class U> - Allocator (SAL_UNUSED_PARAMETER const Allocator<U>&) SAL_THROW(()) - {} - - //----------------------------------------- - Allocator(const Allocator&) SAL_THROW(()) - {} - - //----------------------------------------- - ~Allocator() SAL_THROW(()) - {} - - //----------------------------------------- - size_type max_size() const SAL_THROW(()) - { - return size_type(-1)/sizeof(T); - } - - //----------------------------------------- - /* Normally the code for allocate should - throw a std::bad_alloc exception if the - requested memory could not be allocated: - (C++ standard 20.4.1.1): - - pointer allocate (size_type n, const void* hint = 0) - { - pointer p = reinterpret_cast<pointer>( - rtl_allocateMemory(sal_uInt32(n * sizeof(T)))); - - if (NULL == p) - throw ::std::bad_alloc(); - - return p; - } - - but some compilers do not compile it if exceptions - are not enabled, e.g. GCC under Linux and it is - in general not desired to compile sal with exceptions - enabled. */ - pointer allocate (size_type n, SAL_UNUSED_PARAMETER const void* = 0) - { - return reinterpret_cast<pointer>( - rtl_allocateMemory(sal_uInt32(n * sizeof(T)))); - } - - //----------------------------------------- - void deallocate (pointer p, SAL_UNUSED_PARAMETER size_type /* n */) - { - rtl_freeMemory(p); - } - - //----------------------------------------- -#if HAVE_CXX11_PERFECT_FORWARDING - template< typename... Args > - void construct (pointer p, Args &&... value) - { - new ((void*)p)T(std::forward< Args >(value)...); - } -#else - void construct (pointer p, const T& value) - { - new ((void*)p)T(value); - } -#endif - - //----------------------------------------- - void destroy (pointer p) - { - p->~T(); - (void)p; //MSVC2005 annoyingly warns this is unused - } -}; - -//###################################################### -// Custom STL allocators must be stateless (see -// references above) that's why the operators below -// return always true or false - -template<class T, class U> inline bool operator ==( - SAL_UNUSED_PARAMETER const Allocator<T>&, - SAL_UNUSED_PARAMETER const Allocator<U>&) SAL_THROW(()) -{ - return true; -} - -template<class T, class U> -inline bool operator!= (const Allocator<T>&, const Allocator<U>&) SAL_THROW(()) -{ - return false; -} - -} /* namespace rtl */ - -/// @endcond - -#endif /* INCLUDED_RTL_ALLOCATOR_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/bootstrap.h b/sal/inc/rtl/bootstrap.h deleted file mode 100644 index 67fed2d92660..000000000000 --- a/sal/inc/rtl/bootstrap.h +++ /dev/null @@ -1,234 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _RTL_BOOTSTRAP_H_ -#define _RTL_BOOTSTRAP_H_ - -#include "sal/config.h" - -#include "rtl/ustring.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - @file - - The described concept provides a platform independent way to access - minimum bootstrap settings for every application by excplitly or - implicitly passing the values to the application.<p> - - MULTI-LEVEL STRATEGY FOR RETRIEVAL OF BOOTSTRAP VALUES :<p> - - The 1st level is tried first. On failure, - the next level is tried. Every query starts at the first level again, so - that one setting may be taken from the 3rd and one from the 1st level.<p> - - 1st level: explicitly set variables via rtl_bootstrap_set() - - 2nd level: command line arguments. A "-env:SETTINGNAME=value" is given on - command line. This allows to give an application a certain setting, even - if an ini-file exists (espicially useful for e.g. daemons that want to - start an executable with dynamical changing settings).<p> - - 3rd level: environment variables. The application tries to get the - setting from the environment.<p> - - 4th level: executable ini-file. Every application looks for an ini-file. - The filename defaults to /absoulte/path/to/executable[rc|.ini] - (without .bin or .exe suffix). The ini-filename can be - set by the special command line parameter - '-env:INIFILENAME=/absolute/path/to/inifile' at runtime or it may - be set at compiletime by an API-call.<p> - - 5th level: URE_BOOTSTRAP ini-file. If the bootstrap variable URE_BOOTSTRAP - expands to the URL of an ini-file, that ini-file is searched.<p> - - 6th level: default. An application can have some default settings decided - at compile time, which allow the application to run even with no - deployment settings. <p> - - If neither of the above levels leads to an successful retrieval of the value - (no default possible), the application may fail to start.<p> - - NAMING CONVENTIONS <p> - - Naming conventions for names of bootstrap values : - Names may only include characters, that are allowed characters for - environment variables. This excludes '.', ' ', ';', ':' and any non-ascii - character. Names are case insensitive.<p> - - An ini-file is only allowed to have one section, which must be named '[Bootstrap]'. - The section may be omitted. - The section name does not appear in the name of the corresponding - environment variable or commandline arg. - Values maybe arbitrary unicode strings, they must be encoded in UTF8.<p> - - Example:<p> - - in an ini-file: - <code> - [Sectionname] - Name=value - </code><p> - - as commandline arg: - <code>-env:Name=value</code><p> - - as environment - <code> - setenv Name value - set Name=value - </code><p> - - SPECIAL VARIABLES: - - <ul> - <li> INIFILENAME<br> - This variable allows to set the inifilename. This makes only sense, if the filename - is different than the executable file name. It must be given on command line. If it is - given the executable ini-file is ignored. - </li> - </ul> -*/ - -/** may be called by an application to set an ini-filename. - - <p> - Must be called before rtl_bootstrap_get(). May not be called twice. - If it is never called, the filename is based on the name of the executable, - with the suffix ".ini" on Windows or "rc" on Unix. - - @param pFileUri URL of the inifile with path but WITHOUT suffix (.ini or rc) -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_bootstrap_setIniFileName( rtl_uString *pFileUri ) - SAL_THROW_EXTERN_C(); - -/** - @param ppValue - out parameter. Contains always a valid rtl_uString pointer. - @param pName - The name of the bootstrap setting to be retrieved. - @param pDefault - maybe NULL. If once the default is - returned, successive calls always return this - default value, even when called with different - defaults. - - @return <code>sal_True</code>, when a value could be retrieved successfully, - <code>sal_False</code>, when none of the 4 methods gave a value. ppValue - then contains ane empty string. - When a pDefault value is given, the function returns always - <code>sal_True</code>. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_bootstrap_get( - rtl_uString *pName, rtl_uString **ppValue, rtl_uString *pDefault ) - SAL_THROW_EXTERN_C(); - -/** Sets a bootstrap parameter. - - @param pName - name of bootstrap parameter - @param pValue - value of bootstrap parameter -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_bootstrap_set( - rtl_uString * pName, rtl_uString * pValue ) - SAL_THROW_EXTERN_C(); - - -typedef void * rtlBootstrapHandle; - -/** - Opens a bootstrap argument container. - @param pIniName [in] The name of the ini-file to use, if <code>NULL</code> defaults - to the excutables name - @return Handle for a boostrap argument container -*/ -SAL_DLLPUBLIC rtlBootstrapHandle SAL_CALL rtl_bootstrap_args_open(rtl_uString * pIniName) - SAL_THROW_EXTERN_C(); - -/** - Closes a boostrap agument container. - @param handle [in] The handle got by <code>rtl_bootstrap_args_open()</code> -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_bootstrap_args_close(rtlBootstrapHandle handle) - SAL_THROW_EXTERN_C(); - -/** - @param handle [in] The handle got by <code>rtl_bootstrap_args_open()</code> - @param pName [in] The name of the variable to be retrieved - @param ppValue [out] The result of the retrieval. *ppValue may be null in case of failure. - @param pDefault [in] The default value for the retrieval, may be <code>NULL</code> - - @return The status of the retrieval, <code>sal_True</code> on success. -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_bootstrap_get_from_handle( - rtlBootstrapHandle handle, rtl_uString *pName, rtl_uString **ppValue, rtl_uString *pDefault) - SAL_THROW_EXTERN_C(); - - -/** Returns the name of the inifile associated with this handle. - - @param handle [in] The handle got by <code>rtl_bootstrap_args_open()</code> - @param ppIniName [out] contains after the call the name of the ini-filename. -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_bootstrap_get_iniName_from_handle( - rtlBootstrapHandle handle, rtl_uString ** ppIniName) - SAL_THROW_EXTERN_C(); - -/** Expands a macro using bootstrap variables. - - @param handle [in] The handle got by <code>rtl_bootstrap_args_open()</code> - @param macro [inout] The macro to be expanded -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_bootstrap_expandMacros_from_handle( - rtlBootstrapHandle handle, rtl_uString ** macro ) - SAL_THROW_EXTERN_C(); -/** Expands a macro using default bootstrap variables. - - @param macro [inout] The macro to be expanded -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_bootstrap_expandMacros( - rtl_uString ** macro ) - SAL_THROW_EXTERN_C(); - -/** Escapes special characters ("$" and "\"). - - @param value - an arbitrary, non-NULL value - - @param encoded - non-NULL out parameter, receiving the given value with all occurrences of - special characters ("$" and "\") escaped - - @since UDK 3.2.9 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_bootstrap_encode( - rtl_uString const * value, rtl_uString ** encoded ) - SAL_THROW_EXTERN_C(); - -#ifdef __cplusplus -} -#endif - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/bootstrap.hxx b/sal/inc/rtl/bootstrap.hxx deleted file mode 100644 index 057e60625021..000000000000 --- a/sal/inc/rtl/bootstrap.hxx +++ /dev/null @@ -1,226 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _RTL_BOOTSTRAP_HXX_ -#define _RTL_BOOTSTRAP_HXX_ -#include <rtl/ustring.hxx> -#include <rtl/bootstrap.h> - -namespace rtl -{ - class Bootstrap - { - void * _handle; - - inline Bootstrap( Bootstrap const & ); // not impl - inline Bootstrap & operator = ( Bootstrap const & ); // not impl - - public: - /** - * @see rtl_bootstrap_setIniFileName() - */ - static inline void SAL_CALL setIniFilename( const ::rtl::OUString &sFileUri ); - - /** Retrieves a bootstrap parameter - @param sName name of the bootstrap value. case insensitive. - @param outValue (out parameter). On success contains the value, otherwise - an empty string. - @return sal_False, if no value could be retrieved, otherwise sal_True - @see rtl_bootstrap_get() - */ - static inline sal_Bool get( - const ::rtl::OUString &sName, - ::rtl::OUString &outValue ); - - /** Retrieves a bootstrap parameter - - @param sName name of the bootstrap value. case insensitive. - @param outValue (out parameter). Contains the value associated with sName. - @param aDefault if none of the other methods retrieved a value, outValue - is assigned to a Default. - - @see rtl_bootstrap_get() - */ - static inline void get( - const ::rtl::OUString &sName, - ::rtl::OUString &outValue, - const ::rtl::OUString &aDefault ); - - /** Sets a bootstrap parameter. - - @param name - name of bootstrap parameter - @param value - value of bootstrap parameter - - @see rtl_bootstrap_set() - */ - static inline void set( ::rtl::OUString const & name, ::rtl::OUString const & value ) - SAL_THROW(()); - - /** default ctor. - */ - inline Bootstrap(); - - /** Opens a bootstrap argment container - @see rtl_bootstrap_args_open() - */ - inline Bootstrap(const OUString & iniName); - - /** Closes a bootstrap argument container - @see rtl_bootstrap_args_close() - */ - inline ~Bootstrap(); - - /** Retrieves a bootstrap argument. - - It is first tried to retrieve the value via the global function - and second via the special bootstrap container. - @see rtl_bootstrap_get_from_handle() - */ - - inline sal_Bool getFrom(const ::rtl::OUString &sName, - ::rtl::OUString &outValue) const; - - /** Retrieves a bootstrap argument. - - It is first tried to retrieve the value via the global function - and second via the special bootstrap container. - @see rtl_bootstrap_get_from_handle() - */ - inline void getFrom(const ::rtl::OUString &sName, - ::rtl::OUString &outValue, - const ::rtl::OUString &aDefault) const; - - /** Retrieves the name of the underlying ini-file. - @see rtl_bootstrap_get_iniName_from_handle() - */ - inline void getIniName(::rtl::OUString & iniName) const; - - /** Expands a macro using bootstrap variables. - - @param macro [inout] The macro to be expanded - */ - inline void expandMacrosFrom( ::rtl::OUString & macro ) const SAL_THROW(()) - { rtl_bootstrap_expandMacros_from_handle( _handle, ¯o.pData ); } - - /** Expands a macro using default bootstrap variables. - - @param macro [inout] The macro to be expanded - */ - static inline void expandMacros( ::rtl::OUString & macro ) SAL_THROW(()) - { rtl_bootstrap_expandMacros( ¯o.pData ); } - - /** Provides the bootstrap internal handle. - - @return bootstrap handle - */ - inline rtlBootstrapHandle getHandle() const SAL_THROW(()) - { return _handle; } - - /** Escapes special characters ("$" and "\"). - - @param value - an arbitrary value - - @return - the given value, with all occurrences of special characters ("$" and - "\") escaped - - @since UDK 3.2.9 - */ - static inline ::rtl::OUString encode( ::rtl::OUString const & value ) - SAL_THROW(()); - }; - - //---------------------------------------------------------------------------- - // IMPLEMENTATION - //---------------------------------------------------------------------------- - inline void Bootstrap::setIniFilename( const ::rtl::OUString &sFile ) - { - rtl_bootstrap_setIniFileName( sFile.pData ); - } - - inline sal_Bool Bootstrap::get( const ::rtl::OUString &sName, - ::rtl::OUString & outValue ) - { - return rtl_bootstrap_get( sName.pData , &(outValue.pData) , 0 ); - } - - inline void Bootstrap::get( const ::rtl::OUString &sName, - ::rtl::OUString & outValue, - const ::rtl::OUString & sDefault ) - { - rtl_bootstrap_get( sName.pData , &(outValue.pData) , sDefault.pData ); - } - - inline void Bootstrap::set( ::rtl::OUString const & name, ::rtl::OUString const & value ) - SAL_THROW(()) - { - rtl_bootstrap_set( name.pData, value.pData ); - } - - inline Bootstrap::Bootstrap() - { - _handle = 0; - } - - inline Bootstrap::Bootstrap(const OUString & iniName) - { - if(!iniName.isEmpty()) - _handle = rtl_bootstrap_args_open(iniName.pData); - - else - _handle = 0; - } - - inline Bootstrap::~Bootstrap() - { - rtl_bootstrap_args_close(_handle); - } - - - inline sal_Bool Bootstrap::getFrom(const ::rtl::OUString &sName, - ::rtl::OUString &outValue) const - { - return rtl_bootstrap_get_from_handle(_handle, sName.pData, &outValue.pData, 0); - } - - inline void Bootstrap::getFrom(const ::rtl::OUString &sName, - ::rtl::OUString &outValue, - const ::rtl::OUString &aDefault) const - { - rtl_bootstrap_get_from_handle(_handle, sName.pData, &outValue.pData, aDefault.pData); - } - - inline void Bootstrap::getIniName(::rtl::OUString & iniName) const - { - rtl_bootstrap_get_iniName_from_handle(_handle, &iniName.pData); - } - - inline ::rtl::OUString Bootstrap::encode( ::rtl::OUString const & value ) - SAL_THROW(()) - { - ::rtl::OUString encoded; - rtl_bootstrap_encode(value.pData, &encoded.pData); - return encoded; - } -} -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/byteseq.h b/sal/inc/rtl/byteseq.h deleted file mode 100644 index 99107143b601..000000000000 --- a/sal/inc/rtl/byteseq.h +++ /dev/null @@ -1,317 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _RTL_BYTESEQ_H_ -#define _RTL_BYTESEQ_H_ - -#include "sal/config.h" - -#include "rtl/alloc.h" -#include "rtl/ustring.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** Assures that the reference count of the given byte sequence is one. Otherwise a new copy - of the sequence is created with a reference count of one. - - @param ppSequence sequence -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_byte_sequence_reference2One( - sal_Sequence ** ppSequence ) - SAL_THROW_EXTERN_C(); - -/** Reallocates length of byte sequence. - - @param ppSequence sequence - @param nSize new size of sequence -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_byte_sequence_realloc( - sal_Sequence ** ppSequence, sal_Int32 nSize ) - SAL_THROW_EXTERN_C(); - -/** Acquires the byte sequence - - @param pSequence sequence, that is to be acquired -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_byte_sequence_acquire( - sal_Sequence *pSequence ) - SAL_THROW_EXTERN_C(); - -/** Releases the byte sequence. If the refcount drops to zero, the sequence is freed. - - @param pSequence sequence, that is to be released; invalid after call -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_byte_sequence_release( - sal_Sequence *pSequence ) - SAL_THROW_EXTERN_C(); - -/** Constructs a bytes sequence with length nLength. All bytes are set to zero. - - @param ppSequence inout sequence; on entry *ppSequence may be null, otherwise it is released; - after the call, *ppSequence contains the newly constructed sequence - @param nLength length of new sequence -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_byte_sequence_construct( - sal_Sequence **ppSequence , sal_Int32 nLength ) - SAL_THROW_EXTERN_C(); - -/** Constructs a bytes sequence with length nLength. The data is not initialized. - - @param ppSequence inout sequence; on entry *ppSequence may be null, otherwise it is released; - after the call, *ppSequence contains the newly constructed sequence - @param nLength length of new sequence -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_byte_sequence_constructNoDefault( - sal_Sequence **ppSequence , sal_Int32 nLength ) - SAL_THROW_EXTERN_C(); - -/** Constructs a byte sequence with length nLength and copies nLength bytes from pData. - - @param ppSequence inout sequence; on entry *ppSequence may be null, otherwise it is released; - after the call, *ppSequence contains the newly constructed sequence - @param pData initial data - @param nLength length of new sequence -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_byte_sequence_constructFromArray( - sal_Sequence **ppSequence, const sal_Int8 *pData , sal_Int32 nLength ) - SAL_THROW_EXTERN_C(); - -/** Assigns the byte sequence pSequence to *ppSequence. - - @param ppSequence inout sequence; on entry *ppSequence may be null, otherwise it is released; - after the call, *ppSequence references pSequence - @param pSequence the source sequence -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_byte_sequence_assign( - sal_Sequence **ppSequence , sal_Sequence *pSequence ) - SAL_THROW_EXTERN_C(); - -/** Compares two byte sequences. - - @return true, if the data within the sequences are identical; false otherwise -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_byte_sequence_equals( - sal_Sequence *pSequence1 , sal_Sequence *pSequence2 ) - SAL_THROW_EXTERN_C(); - -/** Returns the data array pointer of the sequence. - - @return read-pointer to the data array of the sequence. If rtl_byte_sequence_reference2One() - has been called before, the pointer may be casted to a non const pointer and - the sequence may be modified -*/ -SAL_DLLPUBLIC const sal_Int8 *SAL_CALL rtl_byte_sequence_getConstArray( - sal_Sequence *pSequence ) - SAL_THROW_EXTERN_C(); - -/** Returns the length of the sequence - - @param pSequence sequence handle - @return length of the sequence -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_byte_sequence_getLength( - sal_Sequence *pSequence ) - SAL_THROW_EXTERN_C(); - -#ifdef __cplusplus -} -namespace rtl -{ - -enum __ByteSequence_NoDefault -{ - /** This enum value can be used to create a bytesequence with uninitalized data - */ - BYTESEQ_NODEFAULT = 0xcafe -}; - -enum __ByteSequence_NoAcquire -{ - /** This enum value can be used to create a bytesequence from a C-Handle without - acquiring the handle. - */ - BYTESEQ_NOACQUIRE = 0xcafebabe -}; - -/** C++ class representing a SAL byte sequence. - C++ Sequences are reference counted and shared, so the sequence keeps a handle to its data. - To keep value semantics, copies are only generated if the sequence is to be modified - (new handle). -*/ -class SAL_WARN_UNUSED ByteSequence -{ - /** sequence handle - */ - sal_Sequence * _pSequence; - -public: - /// @cond INTERNAL - // these are here to force memory de/allocation to sal lib. - inline static void * SAL_CALL operator new ( size_t nSize ) SAL_THROW(()) - { return ::rtl_allocateMemory( nSize ); } - inline static void SAL_CALL operator delete ( void * pMem ) SAL_THROW(()) - { ::rtl_freeMemory( pMem ); } - inline static void * SAL_CALL operator new ( size_t, void * pMem ) SAL_THROW(()) - { return pMem; } - inline static void SAL_CALL operator delete ( void *, void * ) SAL_THROW(()) - {} - /// @endcond - - /** Default constructor: Creates an empty sequence. - */ - inline ByteSequence() SAL_THROW(()); - /** Copy constructor: Creates a copy of given sequence. - - @param rSeq another byte sequence - */ - inline ByteSequence( const ByteSequence & rSeq ) SAL_THROW(()); - /** Copy constructor Creates a copy from the C-Handle. - - @param pSequence another byte sequence handle - */ - inline ByteSequence( sal_Sequence *pSequence ) SAL_THROW(()); - /** Constructor: Creates a copy of given data bytes. - - @param pElements an array of bytes - @param len number of bytes - */ - inline ByteSequence( const sal_Int8 * pElements, sal_Int32 len ); - /** Constructor: Creates sequence of given length and initializes all bytes to 0. - - @param len initial sequence length - */ - inline ByteSequence( sal_Int32 len ); - /** Constructor: Creates sequence of given length and does NOT initialize data. - Use this ctor for performance optimization only. - - @param len initial sequence length - @param nodefault dummy parameter forcing explicit BYTESEQ_NODEFAULT - */ - inline ByteSequence( sal_Int32 len , enum __ByteSequence_NoDefault nodefault ); - /** Constructor: - Creates a sequence from a C-Handle without acquiring the handle, thus taking - over owenership. Eitherway the handle is release by the destructor. - This ctor is useful, when working with a c-interface (it safes a pair of - acquire and release call and is thus a performance optimization only). - - @param pSequence sequence handle to be taken over - @param noacquire dummy parameter forcing explicit BYTESEQ_NOACQUIRE - */ - inline ByteSequence( sal_Sequence *pSequence , enum __ByteSequence_NoAcquire noacquire ) SAL_THROW(()); - /** Destructor: Releases sequence handle. Last handle will free memory. - */ - inline ~ByteSequence() SAL_THROW(()); - - /** Assignment operator: Acquires given sequence handle and releases a previously set handle. - - @param rSeq another byte sequence - @return this sequence - */ - inline ByteSequence & SAL_CALL operator = ( const ByteSequence & rSeq ) SAL_THROW(()); - - /** Gets the length of sequence. - - @return length of sequence - */ - inline sal_Int32 SAL_CALL getLength() const SAL_THROW(()) - { return _pSequence->nElements; } - - /** Gets a pointer to byte array for READING. If the sequence has a length of 0, then the - returned pointer is undefined. - - @return pointer to byte array - */ - inline const sal_Int8 * SAL_CALL getConstArray() const SAL_THROW(()) - { return (const sal_Int8 *)_pSequence->elements; } - /** Gets a pointer to elements array for READING AND WRITING. In general if the sequence - has a handle acquired by other sequences (reference count > 1), then a new sequence is - created copying all bytes to keep value semantics! - If the sequence has a length of 0, then the returned pointer is undefined. - - @return pointer to elements array - */ - inline sal_Int8 * SAL_CALL getArray(); - - /** Non-const index operator: - Obtains a reference to byte indexed at given position. - In general if the sequence has a handle acquired by other - sequences (reference count > 1), then a new sequence is created - copying all bytes to keep value semantics! - - @attention - The implementation does NOT check for array bounds! - - @param nIndex index - @return non-const C++ reference to element at index nIndex - */ - inline sal_Int8 & SAL_CALL operator [] ( sal_Int32 nIndex ); - - /** Const index operator: Obtains a reference to byte indexed at given position. - The implementation does NOT check for array bounds! - - @param nIndex index - @return const C++ reference to byte at element of indenx nIndex - */ - inline const sal_Int8 & SAL_CALL operator [] ( sal_Int32 nIndex ) const SAL_THROW(()) - { return getConstArray()[ nIndex ]; } - - /** Equality operator: Compares two sequences. - - @param rSeq another byte sequence (right side) - @return true if both sequences are equal, false otherwise - */ - inline sal_Bool SAL_CALL operator == ( const ByteSequence & rSeq ) const SAL_THROW(()); - /** Unequality operator: Compares two sequences. - - @param rSeq another byte sequence (right side) - @return false if both sequences are equal, true otherwise - */ - inline sal_Bool SAL_CALL operator != ( const ByteSequence & rSeq ) const SAL_THROW(()); - - /** Reallocates sequence to new length. If the sequence has a handle acquired by other sequences - (reference count > 1), then the remaining elements are copied to a new sequence handle to - keep value semantics! - - @param nSize new size of sequence - */ - inline void SAL_CALL realloc( sal_Int32 nSize ); - - /** Returns the UNnacquired C handle of the sequence - - @return UNacquired handle of the sequence - */ - inline sal_Sequence * SAL_CALL getHandle() const SAL_THROW(()) - { return _pSequence; } - /** Returns the UNnacquired C handle of the sequence (for compatibility reasons) - - @return UNacquired handle of the sequence - */ - inline sal_Sequence * SAL_CALL get() const SAL_THROW(()) - { return _pSequence; } -}; - -} -#endif -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/byteseq.hxx b/sal/inc/rtl/byteseq.hxx deleted file mode 100644 index 800447395178..000000000000 --- a/sal/inc/rtl/byteseq.hxx +++ /dev/null @@ -1,136 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _RTL_BYTESEQ_HXX_ -#define _RTL_BYTESEQ_HXX_ - -#include <osl/interlck.h> -#include <rtl/byteseq.h> -#include <rtl/alloc.h> - -#if ! defined EXCEPTIONS_OFF -#include <new> -#endif - - -namespace rtl -{ - -//__________________________________________________________________________________________________ -inline ByteSequence::ByteSequence() SAL_THROW(()) - : _pSequence( 0 ) -{ - ::rtl_byte_sequence_construct( &_pSequence, 0 ); -} -//__________________________________________________________________________________________________ -inline ByteSequence::ByteSequence( const ByteSequence & rSeq ) SAL_THROW(()) - : _pSequence( 0 ) -{ - ::rtl_byte_sequence_assign( &_pSequence, rSeq._pSequence ); -} -//__________________________________________________________________________________________________ -inline ByteSequence::ByteSequence( sal_Sequence *pSequence) SAL_THROW(()) - : _pSequence( pSequence ) -{ - ::rtl_byte_sequence_acquire( pSequence ); -} -//__________________________________________________________________________________________________ -inline ByteSequence::ByteSequence( const sal_Int8 * pElements, sal_Int32 len ) - : _pSequence( 0 ) -{ - ::rtl_byte_sequence_constructFromArray( &_pSequence, pElements, len ); -#if ! defined EXCEPTIONS_OFF - if (_pSequence == 0) - throw ::std::bad_alloc(); -#endif -} -//__________________________________________________________________________________________________ -inline ByteSequence::ByteSequence( sal_Int32 len, enum __ByteSequence_NoDefault ) - : _pSequence( 0 ) -{ - ::rtl_byte_sequence_constructNoDefault( &_pSequence, len ); -#if ! defined EXCEPTIONS_OFF - if (_pSequence == 0) - throw ::std::bad_alloc(); -#endif -} -//__________________________________________________________________________________________________ -inline ByteSequence::ByteSequence( sal_Sequence *pSequence, enum __ByteSequence_NoAcquire ) SAL_THROW(()) - : _pSequence( pSequence ) -{ -} -//__________________________________________________________________________________________________ -inline ByteSequence::ByteSequence( sal_Int32 len ) - : _pSequence( 0 ) -{ - ::rtl_byte_sequence_construct( &_pSequence, len ); -#if ! defined EXCEPTIONS_OFF - if (_pSequence == 0) - throw ::std::bad_alloc(); -#endif -} -//__________________________________________________________________________________________________ -inline ByteSequence::~ByteSequence() SAL_THROW(()) -{ - ::rtl_byte_sequence_release( _pSequence ); -} -//__________________________________________________________________________________________________ -inline ByteSequence & ByteSequence::operator = ( const ByteSequence & rSeq ) SAL_THROW(()) -{ - ::rtl_byte_sequence_assign( &_pSequence, rSeq._pSequence ); - return *this; -} -//__________________________________________________________________________________________________ -inline sal_Bool ByteSequence::operator == ( const ByteSequence & rSeq ) const SAL_THROW(()) -{ - return ::rtl_byte_sequence_equals( _pSequence, rSeq._pSequence ); -} -//__________________________________________________________________________________________________ -inline sal_Int8 * ByteSequence::getArray() -{ - ::rtl_byte_sequence_reference2One( &_pSequence ); -#if ! defined EXCEPTIONS_OFF - if (_pSequence == 0) - throw ::std::bad_alloc(); -#endif - return (sal_Int8 *)_pSequence->elements; -} -//__________________________________________________________________________________________________ -inline void ByteSequence::realloc( sal_Int32 nSize ) -{ - ::rtl_byte_sequence_realloc( &_pSequence, nSize ); -#if ! defined EXCEPTIONS_OFF - if (_pSequence == 0) - throw ::std::bad_alloc(); -#endif -} -//__________________________________________________________________________________________________ -inline sal_Int8 & ByteSequence::operator [] ( sal_Int32 nIndex ) -{ - return getArray()[ nIndex ]; -} -//__________________________________________________________________________________________________ -inline sal_Bool ByteSequence::operator != ( const ByteSequence & rSeq ) const SAL_THROW(()) -{ - return (! operator == ( rSeq )); -} - -} -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/character.hxx b/sal/inc/rtl/character.hxx deleted file mode 100644 index 0ba86d6c065b..000000000000 --- a/sal/inc/rtl/character.hxx +++ /dev/null @@ -1,144 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_RTL_CHARACTER_HXX -#define INCLUDED_RTL_CHARACTER_HXX - -#include "sal/config.h" - -#include "sal/types.h" - -namespace rtl -{ -/** Check for ASCII character. - - @param nUtf32 A Unicode scalar value (represented as a UTF-32 code unit). - - @return True if nChar is a ASCII character (0x00--0x7F). - - @since LibreOffice 4.1 - */ -inline bool isAscii(sal_uInt32 nUtf32) -{ - return nUtf32 <= 0x7F; -} - -/** Check for ASCII lower case character. - - @param nUtf32 A Unicode scalar value (represented as a UTF-32 code unit). - - @return True if nChar is a US-ASCII lower case alphabetic character - (ASCII 'a'--'z'). - - @since LibreOffice 4.1 - */ -inline bool isAsciiLowerCase(sal_uInt32 nUtf32) -{ - return nUtf32 >= 'a' && nUtf32 <= 'z'; -} - -/** Check for US-ASCII upper case character. - - @param nUtf32 A Unicode scalar value (represented as a UTF-32 code unit). - - @return True if nChar is a US-ASCII upper case alphabetic character - (US-ASCII 'A'--'Z'). - - @since LibreOffice 4.1 - */ -inline bool isAsciiUpperCase(sal_uInt32 nUtf32) -{ - return nUtf32 >= 'A' && nUtf32 <= 'Z'; -} - -/** Check for ASCII alphanumeric character. - - @param nUtf32 A Unicode scalar value (represented as a UTF-32 code unit). - - @return True if nUtf32 is a US-ASCII alphanumeric character - (ASCII '0'--'9', 'A'--'Z' or 'a'--'z'). - - @since LibreOffice 4.1 - */ -inline bool isAsciiAlpha(sal_uInt32 nUtf32) -{ - return isAsciiLowerCase(nUtf32) || isAsciiUpperCase(nUtf32); -} - -/** Check for ASCII digit character. - - @param nUtf32 A Unicode scalar value (represented as a UTF-32 code unit). - - @return True if nChar is a ASCII (decimal) digit character - (ASCII '0'--'9'). - - @since LibreOffice 4.1 - */ -inline bool isAsciiDigit(sal_uInt32 nUtf32) -{ - return nUtf32 >= '0' && nUtf32 <= '9'; -} - -/** Check for US-ASCII alphanumeric character. - - @param nUtf32 A Unicode scalar value (represented as a UTF-32 code unit). - - @return True if nChar is a US-ASCII alphanumeric character (US-ASCII - '0'--'9', 'A'--'Z' or 'a'--'z'). - - @since LibreOffice 4.1 - */ -inline bool isAsciiAlphanumeric(sal_uInt32 nUtf32) -{ - return isAsciiDigit(nUtf32) || isAsciiAlpha(nUtf32); -} - -/** Check for US-ASCII canonic hexadecimal digit character. - - @param nUtf32 A Unicode scalar value (represented as a UTF-32 code unit). - - @return True if nChar is a US-ASCII canonic (i.e., upper case) - hexadecimal digit character (US-ASCII '0'--'9' or 'A'--'F'). - - @since LibreOffice 4.1 - */ -inline bool isAsciiCanonicHexDigit(sal_uInt32 nUtf32) -{ - return isAsciiDigit(nUtf32) || (nUtf32 >= 'A' && nUtf32 <= 'F'); -} - -/** Check for US-ASCII hexadecimal digit character. - - @param nUtf32 A Unicode scalar value (represented as a UTF-32 code unit). - - @return True if nChar is a US-ASCII hexadecimal digit character (US- - ASCII '0'--'9', 'A'--'F', 'a'--'f'). - - @since LibreOffice 4.1 - */ -inline bool isAsciiHexDigit(sal_uInt32 nUtf32) -{ - return isAsciiCanonicHexDigit(nUtf32) || (nUtf32 >= 'a' && nUtf32 <= 'f'); -} - -}//rtl namespace - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/cipher.h b/sal/inc/rtl/cipher.h deleted file mode 100644 index a116e57ba071..000000000000 --- a/sal/inc/rtl/cipher.h +++ /dev/null @@ -1,317 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_CIPHER_H_ -#define _RTL_CIPHER_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*======================================================================== - * - * rtlCipher interface. - * - *======================================================================*/ -/** Cipher Handle opaque type. - */ -typedef void* rtlCipher; - - -/** Cipher Algorithm enumeration. - @see rtl_cipher_create() - */ -enum __rtl_CipherAlgorithm -{ - rtl_Cipher_AlgorithmBF, - rtl_Cipher_AlgorithmARCFOUR, - rtl_Cipher_AlgorithmInvalid, - rtl_Cipher_Algorithm_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -}; - -/** Cipher Algorithm type. - */ -typedef enum __rtl_CipherAlgorithm rtlCipherAlgorithm; - - -/** Cipher Mode enumeration. - @see rtl_cipher_create() - */ -enum __rtl_CipherMode -{ - rtl_Cipher_ModeECB, - rtl_Cipher_ModeCBC, - rtl_Cipher_ModeStream, - rtl_Cipher_ModeInvalid, - rtl_Cipher_Mode_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -}; - -/** Cipher Mode type. - */ -typedef enum __rtl_CipherMode rtlCipherMode; - - -/** Cipher Direction enumeration. - @see rtl_cipher_init() - */ -enum __rtl_CipherDirection -{ - rtl_Cipher_DirectionBoth, - rtl_Cipher_DirectionDecode, - rtl_Cipher_DirectionEncode, - rtl_Cipher_DirectionInvalid, - rtl_Cipher_Direction_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -}; - -/** Cipher Direction type. - */ -typedef enum __rtl_CipherDirection rtlCipherDirection; - - -/** Error Code enumeration. - */ -enum __rtl_CipherError -{ - rtl_Cipher_E_None, - rtl_Cipher_E_Argument, - rtl_Cipher_E_Algorithm, - rtl_Cipher_E_Direction, - rtl_Cipher_E_Mode, - rtl_Cipher_E_BufferSize, - rtl_Cipher_E_Memory, - rtl_Cipher_E_Unknown, - rtl_Cipher_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -}; - -/** Error Code type. - */ -typedef enum __rtl_CipherError rtlCipherError; - - -/** Create a cipher handle for the given algorithm and mode. - @see rtlCipherAlgorithm - @see rtlCipherMode - - @param Algorithm [in] cipher algorithm. - @param Mode [in] cipher mode. - @return Cipher handle, or 0 upon failure. - */ -SAL_DLLPUBLIC rtlCipher SAL_CALL rtl_cipher_create ( - rtlCipherAlgorithm Algorithm, - rtlCipherMode Mode -) SAL_THROW_EXTERN_C(); - - -/** Inititialize a cipher for the given direction. - @see rtlCipherDirection - - @param Cipher [in] cipher handle. - @param Direction [in] cipher direction. - @param pKeyData [in] key material buffer. - @param nKeyLen [in] key material length in bytes. - @param pArgData [in] initialization vector buffer. - @param nArgLen [in] initialization vector length in bytes. - @return rtl_Cipher_E_None upon success. - */ -SAL_DLLPUBLIC rtlCipherError SAL_CALL rtl_cipher_init ( - rtlCipher Cipher, - rtlCipherDirection Direction, - const sal_uInt8 *pKeyData, sal_Size nKeyLen, - const sal_uInt8 *pArgData, sal_Size nArgLen -) SAL_THROW_EXTERN_C(); - - -/** Encode a buffer under a given cipher algorithm. - @pre Initialized for a compatible cipher direction. - @see rtl_cipher_init() - - @param Cipher [in] cipher handle. - @param pData [in] plaintext buffer. - @param nDatLen [in] plaintext length in bytes. - @param pBuffer [out] ciphertext buffer. - @param nBufLen [in] ciphertext length in bytes. - @return rtl_Cipher_E_None upon success. - */ -SAL_DLLPUBLIC rtlCipherError SAL_CALL rtl_cipher_encode ( - rtlCipher Cipher, - const void *pData, sal_Size nDatLen, - sal_uInt8 *pBuffer, sal_Size nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Decode a buffer under a given cipher algorithm. - @pre Initialized for a compatible cipher direction. - @see rtl_cipher_init() - - @param Cipher [in] cipher handle. - @param pData [in] ciphertext buffer. - @param nDatLen [in] ciphertext length in bytes. - @param pBuffer [out] plaintext buffer. - @param nBufLen [in] plaintext length in bytes. - @return rtl_Cipher_E_None upon success. - */ -SAL_DLLPUBLIC rtlCipherError SAL_CALL rtl_cipher_decode ( - rtlCipher Cipher, - const void *pData, sal_Size nDatLen, - sal_uInt8 *pBuffer, sal_Size nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Destroy a cipher handle. - @param Cipher [in] cipher handle to be destroyed. - @return None. Cipher handle destroyed and invalid. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_cipher_destroy ( - rtlCipher Cipher -) SAL_THROW_EXTERN_C(); - - -/*======================================================================== - * - * rtl_cipherBF (Blowfish) interface. - * - *======================================================================*/ -/** Create a Blowfish cipher handle for the given mode. - - The Blowfish block cipher algorithm is specified in - Bruce Schneier: Applied Cryptography, 2nd edition, ch. 14.3 - - @see rtl_cipher_create() - */ -SAL_DLLPUBLIC rtlCipher SAL_CALL rtl_cipher_createBF ( - rtlCipherMode Mode -) SAL_THROW_EXTERN_C(); - - -/** Inititialize a Blowfish cipher for the given direction. - @see rtl_cipher_init() - */ -SAL_DLLPUBLIC rtlCipherError SAL_CALL rtl_cipher_initBF ( - rtlCipher Cipher, - rtlCipherDirection Direction, - const sal_uInt8 *pKeyData, sal_Size nKeyLen, - const sal_uInt8 *pArgData, sal_Size nArgLen -) SAL_THROW_EXTERN_C(); - - -/** Encode a buffer under the Blowfish cipher algorithm. - @see rtl_cipher_encode() - */ -SAL_DLLPUBLIC rtlCipherError SAL_CALL rtl_cipher_encodeBF ( - rtlCipher Cipher, - const void *pData, sal_Size nDatLen, - sal_uInt8 *pBuffer, sal_Size nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Decode a buffer under the Blowfish cipher algorithm. - @see rtl_cipher_decode() - */ -SAL_DLLPUBLIC rtlCipherError SAL_CALL rtl_cipher_decodeBF ( - rtlCipher Cipher, - const void *pData, sal_Size nDatLen, - sal_uInt8 *pBuffer, sal_Size nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Destroy a Blowfish cipher handle. - @see rtl_cipher_destroy() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_cipher_destroyBF ( - rtlCipher Cipher -) SAL_THROW_EXTERN_C(); - - -/*======================================================================== - * - * rtl_cipherARCFOUR (RC4) interface. - * - *======================================================================*/ -/** Create a RC4 cipher handle for the given mode. - - The RC4 symmetric stream cipher algorithm is specified in - Bruce Schneier: Applied Cryptography, 2nd edition, ch. 17.1 - - @see rtl_cipher_create() - - @param Mode [in] cipher mode. Must be rtl_Cipher_ModeStream. - @return Cipher handle, or 0 upon failure. - */ -SAL_DLLPUBLIC rtlCipher SAL_CALL rtl_cipher_createARCFOUR ( - rtlCipherMode Mode -) SAL_THROW_EXTERN_C(); - - -/** Inititialize a RC4 cipher for the given direction. - @see rtl_cipher_init() - */ -SAL_DLLPUBLIC rtlCipherError SAL_CALL rtl_cipher_initARCFOUR ( - rtlCipher Cipher, - rtlCipherDirection Direction, - const sal_uInt8 *pKeyData, sal_Size nKeyLen, - const sal_uInt8 *pArgData, sal_Size nArgLen -) SAL_THROW_EXTERN_C(); - - -/** Encode a buffer under the RC4 cipher algorithm. - @see rtl_cipher_encode() - */ -SAL_DLLPUBLIC rtlCipherError SAL_CALL rtl_cipher_encodeARCFOUR ( - rtlCipher Cipher, - const void *pData, sal_Size nDatLen, - sal_uInt8 *pBuffer, sal_Size nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Decode a buffer under the RC4 cipher algorithm. - @see rtl_cipher_decode() - */ -SAL_DLLPUBLIC rtlCipherError SAL_CALL rtl_cipher_decodeARCFOUR ( - rtlCipher Cipher, - const void *pData, sal_Size nDatLen, - sal_uInt8 *pBuffer, sal_Size nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Destroy a RC4 cipher handle. - @see rtl_cipher_destroy() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_cipher_destroyARCFOUR ( - rtlCipher Cipher -) SAL_THROW_EXTERN_C(); - - -/*======================================================================== - * - * The End. - * - *======================================================================*/ - -#ifdef __cplusplus -} -#endif - -#endif /* !_RTL_CIPHER_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/crc.h b/sal/inc/rtl/crc.h deleted file mode 100644 index 7fad87ef4f37..000000000000 --- a/sal/inc/rtl/crc.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_CRC_H_ -#define _RTL_CRC_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*======================================================================== - * - * rtl_crc32 interface. - * - *======================================================================*/ -/** Evaluate CRC32 over given data. - - This function evaluates the CRC polynomial 0xEDB88320. - - @param Crc [in] CRC32 over previous data or zero. - @param Data [in] data buffer. - @param DatLen [in] data buffer length. - @return new CRC32 value. - */ -SAL_DLLPUBLIC sal_uInt32 SAL_CALL rtl_crc32 ( - sal_uInt32 Crc, - const void *Data, sal_uInt32 DatLen -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * The End. - * - *======================================================================*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_CRC_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/digest.h b/sal/inc/rtl/digest.h deleted file mode 100644 index cc49838821f7..000000000000 --- a/sal/inc/rtl/digest.h +++ /dev/null @@ -1,643 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_DIGEST_H_ -#define _RTL_DIGEST_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*======================================================================== - * - * rtlDigest. - * - *======================================================================*/ -/** Digest Handle opaque type. - */ -typedef void* rtlDigest; - - -/** Digest Algorithm enumeration. - @see rtl_digest_create() - */ -enum __rtl_DigestAlgorithm -{ - rtl_Digest_AlgorithmMD2, - rtl_Digest_AlgorithmMD5, - rtl_Digest_AlgorithmSHA, - rtl_Digest_AlgorithmSHA1, - - rtl_Digest_AlgorithmHMAC_MD5, - rtl_Digest_AlgorithmHMAC_SHA1, - - rtl_Digest_AlgorithmInvalid, - rtl_Digest_Algorithm_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -}; - -/** Digest Algorithm type. - */ -typedef enum __rtl_DigestAlgorithm rtlDigestAlgorithm; - - -/** Error Code enumeration. - */ -enum __rtl_DigestError -{ - rtl_Digest_E_None, - rtl_Digest_E_Argument, - rtl_Digest_E_Algorithm, - rtl_Digest_E_BufferSize, - rtl_Digest_E_Memory, - rtl_Digest_E_Unknown, - rtl_Digest_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -}; - -/** Error Code type. - */ -typedef enum __rtl_DigestError rtlDigestError; - - -/** Create a digest handle for the given algorithm. - @see rtlDigestAlgorithm - - @param Algorithm [in] digest algorithm. - @return Digest handle, or 0 upon failure. - */ -SAL_DLLPUBLIC rtlDigest SAL_CALL rtl_digest_create ( - rtlDigestAlgorithm Algorithm -) SAL_THROW_EXTERN_C(); - - -/** Destroy a digest handle. - @post Digest handle destroyed and invalid. - @param Digest [in] digest handle to be destroyed. - @return None. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_digest_destroy ( - rtlDigest Digest -) SAL_THROW_EXTERN_C(); - - -/** Query the algorithm of a given digest. - @param Digest [in] digest handle. - @return digest algorithm, or rtl_Digest_AlgorithmInvalid upon failure. - */ -SAL_DLLPUBLIC rtlDigestAlgorithm SAL_CALL rtl_digest_queryAlgorithm ( - rtlDigest Digest -) SAL_THROW_EXTERN_C(); - - -/** Query the length of a given digest. - @param Digest [in] digest handle. - @return digest length, or 0 upon failure. - */ -SAL_DLLPUBLIC sal_uInt32 SAL_CALL rtl_digest_queryLength ( - rtlDigest Digest -) SAL_THROW_EXTERN_C(); - - -/** Initialize a digest with given data. - @param Digest [in] digest handle. - @param pData [in] data buffer. - @param nDatLen [in] data length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_init ( - rtlDigest Digest, - const sal_uInt8 *pData, sal_uInt32 nDatLen -) SAL_THROW_EXTERN_C(); - - -/** Update a digest with given data. - @param Digest [in] digest handle. - @param pData [in] data buffer. - @param nDatLen [in] data length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_update ( - rtlDigest Digest, - const void *pData, sal_uInt32 nDatLen -) SAL_THROW_EXTERN_C(); - - -/** Finalize a digest and retrieve the digest value. - @pre Digest value length must not be less than digest length. - @post Digest initialized to accept another update sequence. - @see rtl_digest_queryLength() - @see rtl_digest_update() - - @param Digest [in] digest handle. - @param pBuffer [in] digest value buffer. - @param nBufLen [in] digest value length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_get ( - rtlDigest Digest, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * rtl_digest_MD2 interface. - * - *======================================================================*/ -#define RTL_DIGEST_LENGTH_MD2 16 - -/** Create a MD2 digest handle. - - The MD2 digest algorithm is specified in - RFC 1319 (Informational) - The MD2 Message-Digest Algorithm - - @see rtl_digest_create() - */ -SAL_DLLPUBLIC rtlDigest SAL_CALL rtl_digest_createMD2 (void) SAL_THROW_EXTERN_C(); - - -/** Destroy a MD2 digest handle. - @see rtl_digest_destroy() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_digest_destroyMD2 ( - rtlDigest Digest -) SAL_THROW_EXTERN_C(); - - -/** Update a MD2 digest with given data. - @see rtl_digest_update() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_updateMD2 ( - rtlDigest Digest, - const void *pData, sal_uInt32 nDatLen -) SAL_THROW_EXTERN_C(); - - -/** Finalize a MD2 digest and retrieve the digest value. - @see rtl_digest_get() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_getMD2 ( - rtlDigest Digest, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Evaluate a MD2 digest value from given data. - - This function performs an optimized call sequence on a - single data buffer, avoiding digest creation and destruction. - - @see rtl_digest_updateMD2() - @see rtl_digest_getMD2() - - @param pData [in] data buffer. - @param nDatLen [in] data length. - @param pBuffer [in] digest value buffer. - @param nBufLen [in] digest value length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_MD2 ( - const void *pData, sal_uInt32 nDatLen, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * rtl_digest_MD5 interface. - * - *======================================================================*/ -#define RTL_DIGEST_LENGTH_MD5 16 - -/** Create a MD5 digest handle. - - The MD5 digest algorithm is specified in - RFC 1321 (Informational) - The MD5 Message-Digest Algorithm - - @see rtl_digest_create() - */ -SAL_DLLPUBLIC rtlDigest SAL_CALL rtl_digest_createMD5 (void) SAL_THROW_EXTERN_C(); - - -/** Destroy a MD5 digest handle. - @see rtl_digest_destroy() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_digest_destroyMD5 ( - rtlDigest Digest -) SAL_THROW_EXTERN_C(); - - -/** Update a MD5 digest with given data. - @see rtl_digest_update() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_updateMD5 ( - rtlDigest Digest, - const void *pData, sal_uInt32 nDatLen -) SAL_THROW_EXTERN_C(); - - -/** Finalize a MD5 digest and retrieve the digest value. - @see rtl_digest_get() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_getMD5 ( - rtlDigest Digest, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Retrieve the raw (not finalized) MD5 digest value. - - This function is a non-standard replacement for - rtl_digest_getMD5() and must be used with caution. - - @post Digest initialized to accept another update sequence. - @see rtl_digest_get() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_rawMD5 ( - rtlDigest Digest, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Evaluate a MD5 digest value from given data. - - This function performs an optimized call sequence on a - single data buffer, avoiding digest creation and destruction. - - @see rtl_digest_updateMD5() - @see rtl_digest_getMD5() - - @param pData [in] data buffer. - @param nDatLen [in] data length. - @param pBuffer [in] digest value buffer. - @param nBufLen [in] digest value length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_MD5 ( - const void *pData, sal_uInt32 nDatLen, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * rtl_digest_SHA interface. - * - *======================================================================*/ -#define RTL_DIGEST_LENGTH_SHA 20 - -/** Create a SHA digest handle. - - The SHA digest algorithm is specified in - FIPS PUB 180 (Superseded by FIPS PUB 180-1) - Secure Hash Standard - - @see rtl_digest_create() - */ -SAL_DLLPUBLIC rtlDigest SAL_CALL rtl_digest_createSHA (void) SAL_THROW_EXTERN_C(); - - -/** Destroy a SHA digest handle. - @see rtl_digest_destroy() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_digest_destroySHA ( - rtlDigest Digest -) SAL_THROW_EXTERN_C(); - - -/** Update a SHA digest with given data. - @see rtl_digest_update() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_updateSHA ( - rtlDigest Digest, - const void *pData, sal_uInt32 nDatLen -) SAL_THROW_EXTERN_C(); - - -/** Finalize a SHA digest and retrieve the digest value. - @see rtl_digest_get() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_getSHA ( - rtlDigest Digest, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Evaluate a SHA digest value from given data. - - This function performs an optimized call sequence on a - single data buffer, avoiding digest creation and destruction. - - @see rtl_digest_updateSHA() - @see rtl_digest_getSHA() - - @param pData [in] data buffer. - @param nDatLen [in] data length. - @param pBuffer [in] digest value buffer. - @param nBufLen [in] digest value length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_SHA ( - const void *pData, sal_uInt32 nDatLen, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * rtl_digest_SHA1 interface. - * - *======================================================================*/ -#define RTL_DIGEST_LENGTH_SHA1 20 - -/** Create a SHA1 digest handle. - - The SHA1 digest algorithm is specified in - FIPS PUB 180-1 (Supersedes FIPS PUB 180) - Secure Hash Standard - - @see rtl_digest_create() - */ -SAL_DLLPUBLIC rtlDigest SAL_CALL rtl_digest_createSHA1 (void) SAL_THROW_EXTERN_C(); - - -/** Destroy a SHA1 digest handle. - @see rtl_digest_destroy() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_digest_destroySHA1 ( - rtlDigest Digest -) SAL_THROW_EXTERN_C(); - - -/** Update a SHA1 digest with given data. - @see rtl_digest_update() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_updateSHA1 ( - rtlDigest Digest, - const void *pData, sal_uInt32 nDatLen -) SAL_THROW_EXTERN_C(); - - -/** Finalize a SHA1 digest and retrieve the digest value. - @see rtl_digest_get() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_getSHA1 ( - rtlDigest Digest, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Evaluate a SHA1 digest value from given data. - - This function performs an optimized call sequence on a - single data buffer, avoiding digest creation and destruction. - - @see rtl_digest_updateSHA1() - @see rtl_digest_getSHA1() - - @param pData [in] data buffer. - @param nDatLen [in] data length. - @param pBuffer [in] digest value buffer. - @param nBufLen [in] digest value length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_SHA1 ( - const void *pData, sal_uInt32 nDatLen, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * rtl_digest_HMAC_MD5 interface. - * - *======================================================================*/ -#define RTL_DIGEST_LENGTH_HMAC_MD5 RTL_DIGEST_LENGTH_MD5 - -/** Create a HMAC_MD5 digest handle. - - The HMAC_MD5 digest algorithm is specified in - - RFC 2104 (Informational) - HMAC: Keyed-Hashing for Message Authentication - - @see rtl_digest_create() - */ -SAL_DLLPUBLIC rtlDigest SAL_CALL rtl_digest_createHMAC_MD5 (void) SAL_THROW_EXTERN_C(); - - -/** Destroy a HMAC_MD5 digest handle. - @see rtl_digest_destroy() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_digest_destroyHMAC_MD5 ( - rtlDigest Digest -) SAL_THROW_EXTERN_C(); - - -/** Initialize a HMAC_MD5 digest. - @see rtl_digest_init() - - @param Digest [in] digest handle. - @param pKeyData [in] key material buffer. - @param nKeyLen [in] key material length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_initHMAC_MD5 ( - rtlDigest Digest, - const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen -) SAL_THROW_EXTERN_C(); - - -/** Update a HMAC_MD5 digest with given data. - @see rtl_digest_update() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_updateHMAC_MD5 ( - rtlDigest Digest, - const void *pData, sal_uInt32 nDatLen -) SAL_THROW_EXTERN_C(); - - -/** Finalize a HMAC_MD5 digest and retrieve the digest value. - @see rtl_digest_get() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_getHMAC_MD5 ( - rtlDigest Digest, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Evaluate a HMAC_MD5 digest value from given data. - - This function performs an optimized call sequence on a - single data buffer, avoiding digest creation and destruction. - - @see rtl_digest_initHMAC_MD5() - @see rtl_digest_updateHMAC_MD5() - @see rtl_digest_getHMAC_MD5() - - @param pKeyData [in] key material buffer. - @param nKeyLen [in] key material length. - @param pData [in] data buffer. - @param nDatLen [in] data length. - @param pBuffer [in] digest value buffer. - @param nBufLen [in] digest value length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_HMAC_MD5 ( - const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen, - const void *pData, sal_uInt32 nDatLen, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * rtl_digest_HMAC_SHA1 interface. - * - *======================================================================*/ -#define RTL_DIGEST_LENGTH_HMAC_SHA1 RTL_DIGEST_LENGTH_SHA1 - -/** Create a HMAC_SHA1 digest handle. - - The HMAC_SHA1 digest algorithm is specified in - RFC 2104 (Informational) - HMAC: Keyed-Hashing for Message Authentication - RFC 2898 (Informational) - PKCS #5: Password-Based Cryptography Specification Version 2.0 - - @see rtl_digest_create() - */ -SAL_DLLPUBLIC rtlDigest SAL_CALL rtl_digest_createHMAC_SHA1 (void) SAL_THROW_EXTERN_C(); - - -/** Destroy a HMAC_SHA1 digest handle. - @see rtl_digest_destroy() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_digest_destroyHMAC_SHA1 ( - rtlDigest Digest -) SAL_THROW_EXTERN_C(); - - -/** Initialize a HMAC_SHA1 digest. - @see rtl_digest_init() - - @param Digest [in] digest handle. - @param pKeyData [in] key material buffer. - @param nKeyLen [in] key material length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_initHMAC_SHA1 ( - rtlDigest Digest, - const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen -) SAL_THROW_EXTERN_C(); - - -/** Update a HMAC_SHA1 digest with given data. - @see rtl_digest_update() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_updateHMAC_SHA1 ( - rtlDigest Digest, - const void *pData, sal_uInt32 nDatLen -) SAL_THROW_EXTERN_C(); - - -/** Finalize a HMAC_SHA1 digest and retrieve the digest value. - @see rtl_digest_get() - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_getHMAC_SHA1 ( - rtlDigest Digest, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - - -/** Evaluate a HMAC_SHA1 digest value from given data. - - This function performs an optimized call sequence on a - single data buffer, avoiding digest creation and destruction. - - @see rtl_digest_initHMAC_SHA1() - @see rtl_digest_updateHMAC_SHA1() - @see rtl_digest_getHMAC_SHA1() - - @param pKeyData [in] key material buffer. - @param nKeyLen [in] key material length. - @param pData [in] data buffer. - @param nDatLen [in] data length. - @param pBuffer [in] digest value buffer. - @param nBufLen [in] digest value length. - - @return rtl_Digest_E_None upon success. - */ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_HMAC_SHA1 ( - const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen, - const void *pData, sal_uInt32 nDatLen, - sal_uInt8 *pBuffer, sal_uInt32 nBufLen -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * rtl_digest_PBKDF2 interface. - * - *======================================================================*/ -/** Password-Based Key Derivation Function. - - The PBKDF2 key derivation function is specified in - RFC 2898 (Informational) - PKCS #5: Password-Based Cryptography Specification Version 2.0 - - @param pKeyData [out] derived key - @param nKeyLen [in] derived key length - @param pPassData [in] password - @param nPassLen [in] password length - @param pSaltData [in] salt - @param nSaltLen [in] salt length - @param nCount [in] iteration count - - @return rtl_Digest_E_None upon success. -*/ -SAL_DLLPUBLIC rtlDigestError SAL_CALL rtl_digest_PBKDF2 ( - sal_uInt8 *pKeyData , sal_uInt32 nKeyLen, - const sal_uInt8 *pPassData, sal_uInt32 nPassLen, - const sal_uInt8 *pSaltData, sal_uInt32 nSaltLen, - sal_uInt32 nCount -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * The End. - * - *======================================================================*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_DIGEST_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/instance.hxx b/sal/inc/rtl/instance.hxx deleted file mode 100644 index 1efda808abec..000000000000 --- a/sal/inc/rtl/instance.hxx +++ /dev/null @@ -1,637 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_RTL_INSTANCE_HXX -#define INCLUDED_RTL_INSTANCE_HXX - -#include "sal/config.h" - -#include "osl/doublecheckedlocking.h" -#include "osl/getglobalmutex.hxx" - -namespace { - -/** A non-broken version of the double-checked locking pattern. - - See - <http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html> - for a description of double-checked locking, why it is broken, and how it - can be fixed. Always use this template instead of spelling out the - double-checked locking pattern explicitly, and only in those rare cases - where that is not possible and you have to spell it out explicitly, at - least call OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER() at the right - places. That way, all platform-dependent code to make double-checked - locking work can be kept in one place. - - Usage scenarios: - - 1 Static instance (most common case) - - Pattern: - - T * getInstance() - { - static T * pInstance = 0; - if (!pInstance) - { - ::osl::MutexGuard aGuard(::osl::Mutex::getGlobalMutex()); - if (!pInstance) - { - static T aInstance; - pInstance = &aInstance; - } - } - return pInstance; - } - - Code: - - #include "rtl/instance.hxx" - #include "osl/getglobalmutex.hxx" - - namespace { - struct Init - { - T * operator()() - { - static T aInstance; - return &aInstance; - } - }; - } - - T * getInstance() - { - return rtl_Instance< T, Init, ::osl::MutexGuard, - ::osl::GetGlobalMutex >::create( - Init(), ::osl::GetGlobalMutex()); - } - - 2 Dynamic instance - - Pattern: - - T * getInstance() - { - static T * pInstance = 0; - if (!pInstance) - { - ::osl::MutexGuard aGuard(::osl::Mutex::getGlobalMutex()); - if (!pInstance) - pInstance = new T; - } - return pInstance; - } - - Code: - - #include "rtl/instance.hxx" - #include "osl/getglobalmutex.hxx" - - namespace { - struct Init - { - T * operator()() - { - return new T; - } - }; - } - - T * getInstance() - { - return rtl_Instance< T, Init, ::osl::MutexGuard, - ::osl::GetGlobalMutex >::create( - Init(), ::osl::GetGlobalMutex()); - } - - 3 Other guard/mutex - - Pattern: - - T * getInstance() - { - static T * pInstance = 0; - if (!pInstance) - { - SomeGuard aGuard(pSomeMutex); - if (!pInstance) - { - static T aInstance; - pInstance = &aInstance; - } - } - return pInstance; - } - - Code: - - #include "rtl/instance.hxx" - - namespace { - struct InitInstance - { - T * operator()() - { - static T aInstance; - return &aInstance; - } - }; - - struct InitGuard - { - SomeMutex * operator()() - { - return pSomeMutex; - } - }; - } - - T * getInstance() - { - return rtl_Instance< T, InitInstance, - SomeGuard, InitGuard >::create( - InitInstance(), InitMutex()); - } - - 4 Calculate extra data - - Pattern: - - T * getInstance() - { - static T * pInstance = 0; - if (!pInstance) - { - Data aData(...); - ::osl::MutexGuard aGuard(::osl::Mutex::getGlobalMutex()); - if (!pInstance) - { - static T aInstance(aData); - pInstance = &aInstance; - } - } - return pInstance; - } - - Code: - - #include "rtl/instance.hxx" - #include "osl/getglobalmutex.hxx" - - namespace { - struct InitInstance - { - T * operator()() - { - static T aInstance; - return &aInstance; - } - } - - struct InitData - { - Data const & operator()() - { - return ...; - } - } - } - - T * getInstance() - { - return rtl_Instance< T, InitInstance, - ::osl::Mutex, ::osl::GetGlobalMutex, - Data, InitData >::create( - InitInstance(), ::osl::GetGlobalMutex(), InitData()); - } - - Some comments: - - For any instantiation of rtl_Instance, at most one call to a create method - may occur in the program code: Each occurrence of a create method within - the program code is supposed to return a fresh object instance on the - first call, and that same object instance on subsequent calls; but - independent occurrences of create methods are supposed to return - independent object instances. Since there is a one-to-one correspondence - between object instances and instantiations of rtl_Instance, the - requirement should be clear. One measure to enforce the requirement is - that rtl_Instance lives in an unnamed namespace, so that instantiations of - rtl_Instance in different translation units will definitely be different - instantiations. A drawback of that measure is that the name of the class - needs a funny "hand coded" prefix "rtl_" instead of a proper namespace - prefix like "::rtl::". - - A known problem with this template is when two occurrences of calls to - create methods with identical template arguments appear in one translation - unit. Those two places will share a single object instance. This can be - avoided by using different Init structs (see the above code samples) in - the two places. - - There is no need to make m_pInstance volatile, in order to avoid usage of - stale copies of m_pInstance: At the first check, a thread will see that - m_pInstance contains either 0 or a valid pointer. If it contains a valid - pointer, it cannot be stale, and that pointer is used. If it contains 0, - acquiring the mutex will ensure that the second check sees a non-stale - value in all cases. - - On some compilers, the create methods would not be inlined if they - contained any static variables, so m_pInstance is made a class member - instead (and the create methods are inlined). But on MSC, the definition - of the class member m_pInstance would cause compilation to fail with an - internal compiler error. Since MSC is able to inline methods containing - static variables, m_pInstance is moved into the methods there. Note that - this only works well because for any instantiation of rtl_Instance at most - one call to a create method should be present, anyway. - */ -template< typename Inst, typename InstCtor, - typename Guard, typename GuardCtor, - typename Data = int, typename DataCtor = int > -class rtl_Instance -{ -public: - static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor) - { -#if defined _MSC_VER - static Inst * m_pInstance = 0; -#endif // _MSC_VER - Inst * p = m_pInstance; - if (!p) - { - Guard aGuard(aGuardCtor()); - p = m_pInstance; - if (!p) - { - p = aInstCtor(); - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - m_pInstance = p; - } - } - else - { - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - } - return p; - } - - static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor, - DataCtor aDataCtor) - { -#if defined _MSC_VER - static Inst * m_pInstance = 0; -#endif // _MSC_VER - Inst * p = m_pInstance; - if (!p) - { - Data aData(aDataCtor()); - Guard aGuard(aGuardCtor()); - p = m_pInstance; - if (!p) - { - p = aInstCtor(aData); - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - m_pInstance = p; - } - } - else - { - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - } - return p; - } - - static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor, - const Data &rData) - { -#if defined _MSC_VER - static Inst * m_pInstance = 0; -#endif // _MSC_VER - Inst * p = m_pInstance; - if (!p) - { - Guard aGuard(aGuardCtor()); - p = m_pInstance; - if (!p) - { - p = aInstCtor(rData); - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - m_pInstance = p; - } - } - else - { - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - } - return p; - } - -private: -#if !defined _MSC_VER - static Inst * m_pInstance; -#endif // _MSC_VER -}; - -#if !defined _MSC_VER -template< typename Inst, typename InstCtor, - typename Guard, typename GuardCtor, - typename Data, typename DataCtor > -Inst * -rtl_Instance< Inst, InstCtor, Guard, GuardCtor, Data, DataCtor >::m_pInstance -= 0; -#endif // _MSC_VER - -} - -namespace rtl { - -/** Helper base class for a late-initialized (default-constructed) - static variable, implementing the double-checked locking pattern correctly. - - @derive - Derive from this class (common practice), e.g. - <pre> - struct MyStatic : public rtl::Static<MyType, MyStatic> {}; - ... - MyType & rStatic = MyStatic::get(); - ... - </pre> - - @tparam T - variable's type - @tparam Unique - Implementation trick to make the inner static holder unique, - using the outer class - (the one that derives from this base class) -*/ -#if HAVE_THREADSAFE_STATICS -template<typename T, typename Unique> -class Static { -public: - /** Gets the static. Mutual exclusion is implied by a functional - -fthreadsafe-statics - - @return - static variable - */ - static T & get() { - static T instance; - return instance; - } -}; -#else -template<typename T, typename Unique> -class Static { -public: - /** Gets the static. Mutual exclusion is performed using the - osl global mutex. - - @return - static variable - */ - static T & get() { - return *rtl_Instance< - T, StaticInstance, - ::osl::MutexGuard, ::osl::GetGlobalMutex >::create( - StaticInstance(), ::osl::GetGlobalMutex() ); - } -private: - struct StaticInstance { - T * operator () () { - static T instance; - return &instance; - } - }; -}; -#endif - -/** Helper base class for a late-initialized (default-constructed) - static variable, implementing the double-checked locking pattern correctly. - - @derive - Derive from this class (common practice), e.g. - <pre> - struct MyStatic : public rtl::Static<MyType, MyStatic> {}; - ... - MyType & rStatic = MyStatic::get(); - ... - </pre> - - @tparam T - variable's type - @tparam Unique - Implementation trick to make the inner static holder unique, - using the outer class - (the one that derives from this base class) -*/ -#if HAVE_THREADSAFE_STATICS -template<typename T, typename Data, typename Unique> -class StaticWithArg { -public: - /** Gets the static. Mutual exclusion is implied by a functional - -fthreadsafe-statics - - @return - static variable - */ - static T & get(const Data& rData) { - static T instance(rData); - return instance; - } - - /** Gets the static. Mutual exclusion is implied by a functional - -fthreadsafe-statics - - @return - static variable - */ - static T & get(Data& rData) { - static T instance(rData); - return instance; - } -}; -#else -template<typename T, typename Data, typename Unique> -class StaticWithArg { -public: - /** Gets the static. Mutual exclusion is performed using the - osl global mutex. - - @return - static variable - */ - static T & get(const Data& rData) { - return *rtl_Instance< - T, StaticInstanceWithArg, - ::osl::MutexGuard, ::osl::GetGlobalMutex, - Data >::create( StaticInstanceWithArg(), - ::osl::GetGlobalMutex(), - rData ); - } - - /** Gets the static. Mutual exclusion is performed using the - osl global mutex. - - @return - static variable - */ - static T & get(Data& rData) { - return *rtl_Instance< - T, StaticInstanceWithArg, - ::osl::MutexGuard, ::osl::GetGlobalMutex, - Data >::create( StaticInstanceWithArg(), - ::osl::GetGlobalMutex(), - rData ); - } -private: - struct StaticInstanceWithArg { - T * operator () (const Data& rData) { - static T instance(rData); - return &instance; - } - - T * operator () (Data& rData) { - static T instance(rData); - return &instance; - } - }; -}; -#endif - -/** Helper class for a late-initialized static aggregate, e.g. an array, - implementing the double-checked locking pattern correctly. - - @tparam T - aggregate's element type - @tparam InitAggregate - initializer functor class -*/ -#if HAVE_THREADSAFE_STATICS -template<typename T, typename InitAggregate> -class StaticAggregate { -public: - /** Gets the static aggregate, late-initializing. - Mutual exclusion is implied by a functional - -fthreadsafe-statics - - @return - aggregate - */ - static T * get() { - static T *instance = InitAggregate()(); - return instance; - } -}; -#else -template<typename T, typename InitAggregate> -class StaticAggregate { -public: - /** Gets the static aggregate, late-initializing. - Mutual exclusion is performed using the osl global mutex. - - @return - aggregate - */ - static T * get() { - return rtl_Instance< - T, InitAggregate, - ::osl::MutexGuard, ::osl::GetGlobalMutex >::create( - InitAggregate(), ::osl::GetGlobalMutex() ); - } -}; -#endif -/** Helper base class for a late-initialized static variable, - implementing the double-checked locking pattern correctly. - - @derive - Derive from this class (common practice), - providing an initializer functor class, e.g. - <pre> - struct MyStatic : public rtl::StaticWithInit<MyType, MyStatic> { - MyType operator () () { - ... - return MyType( ... ); - } - }; - ... - MyType & rStatic = MyStatic::get(); - ... - </pre> - - @tparam T - variable's type - @tparam InitData - initializer functor class - @tparam Unique - Implementation trick to make the inner static holder unique, - using the outer class - (the one that derives from this base class). - Default is InitData (common practice). - @tparam Data - Initializer functor's return type. - Default is T (common practice). -*/ -#if HAVE_THREADSAFE_STATICS -template<typename T, typename InitData, - typename Unique = InitData, typename Data = T> -class StaticWithInit { -public: - /** Gets the static. Mutual exclusion is implied by a functional - -fthreadsafe-statics - - @return - static variable - */ - static T & get() { - static T instance = InitData()(); - return instance; - } -}; -#else -template<typename T, typename InitData, - typename Unique = InitData, typename Data = T> -class StaticWithInit { -public: - /** Gets the static. Mutual exclusion is performed using the - osl global mutex. - - @return - static variable - */ - static T & get() { - return *rtl_Instance< - T, StaticInstanceWithInit, - ::osl::MutexGuard, ::osl::GetGlobalMutex, - Data, InitData >::create( StaticInstanceWithInit(), - ::osl::GetGlobalMutex(), - InitData() ); - } -private: - struct StaticInstanceWithInit { - T * operator () ( Data d ) { - static T instance(d); - return &instance; - } - }; -}; -#endif -} // namespace rtl - -#endif // INCLUDED_RTL_INSTANCE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/locale.h b/sal/inc/rtl/locale.h deleted file mode 100644 index 197a9152284d..000000000000 --- a/sal/inc/rtl/locale.h +++ /dev/null @@ -1,136 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_LOCALE_H_ -#define _RTL_LOCALE_H_ - -#include "sal/config.h" - -#include "rtl/ustring.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SAL_W32 -# pragma pack(push, 8) -#endif - -/** - The implementation structur of a locale. Do not create this structure - direct. Only use the functions rtl_locale_register and - rtl_locale_setDefault. The strings Language, Country and Variant - are constants, so it is not necessary to acquire and release them. - */ -typedef struct _rtl_Locale -{ - /** - Lowercase two-letter ISO 639-1 or three-letter ISO 639-3 code. - */ - rtl_uString * Language; - /** - uppercase two-letter ISO-3166 code. - */ - rtl_uString * Country; - /** - Lowercase vendor and browser specific code. - */ - rtl_uString * Variant; - /** - The merged hash value of the Language, Country and Variant strings. - */ - sal_Int32 HashCode; -} rtl_Locale; - -#if defined( SAL_W32) -#pragma pack(pop) -#endif - -/** - Register a locale from language, country and variant. - @param language lowercase two-letter ISO 639-1 or three-letter ISO 639-3 code. - @param country uppercase two-letter ISO-3166 code. May be null. - @param variant vendor and browser specific code. May be null. - */ -SAL_DLLPUBLIC rtl_Locale * SAL_CALL rtl_locale_register( - const sal_Unicode * language, const sal_Unicode * country, const sal_Unicode * variant ); - -/** - Common method of getting the current default Locale. - Used for the presentation: menus, dialogs, etc. - Generally set once when your applet or application is initialized, - then never reset. (If you do reset the default locale, you - probably want to reload your GUI, so that the change is reflected - in your interface.) - <p>More advanced programs will allow users to use different locales - for different fields, e.g. in a spreadsheet. - <BR>Note that the initial setting will match the host system. - */ -SAL_DLLPUBLIC rtl_Locale * SAL_CALL rtl_locale_getDefault(); - -/** - Sets the default. - Normally set once at the beginning of applet or application, - then never reset. <code>setDefault</code> does not reset the host locale. - @param language lowercase two-letter ISO 639-1 or three-letter ISO 639-3 code. - @param country uppercase two-letter ISO-3166 code. - @param variant vendor and browser specific code. See class description. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_locale_setDefault( - const sal_Unicode * language, const sal_Unicode * country, const sal_Unicode * variant ); - -/** - Getter for programmatic name of field, - a lowercased two-letter ISO 639-1 or three-letter ISO 639-3 code. - @see getDisplayLanguage - */ -SAL_DLLPUBLIC rtl_uString * SAL_CALL rtl_locale_getLanguage( rtl_Locale * This ); - -/** - Getter for programmatic name of field, - an uppercased two-letter ISO-3166 code. - @see getDisplayCountry - */ -SAL_DLLPUBLIC rtl_uString * SAL_CALL rtl_locale_getCountry( rtl_Locale * This ); - -/** - Getter for programmatic name of field. - @see getDisplayVariant - */ -SAL_DLLPUBLIC rtl_uString * SAL_CALL rtl_locale_getVariant( rtl_Locale * This ); - -/** - Returns the hash code of the locale This. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_locale_hashCode( rtl_Locale * This ); - -/** - Returns true if the locals are equal, otherwis false. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_locale_equals( rtl_Locale * This, rtl_Locale * obj ); - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_LOCALE_H_ */ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/logfile.h b/sal/inc/rtl/logfile.h deleted file mode 100644 index c14c5c118abd..000000000000 --- a/sal/inc/rtl/logfile.h +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _RTL_LOGFILE_H_ -#define _RTL_LOGFILE_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/** This function allows to log arbitrary messages even in a product-environment. - - The logfile is created on first access and closed, when the sal-library gets unloaded. - The file is line buffered. A log file is not created if no log messages are - written. - - The first time, rtl_logfile_trace is called, it checks for the bootstrap variable - RTL_LOGFILE. If the variable is not empty, it creates a file with the name - $(RTL_LOGFILE)_$(PID).log, where $(PID) is the process id of the running process. - - @param pszFormat A format string with fprintf-syntax - @param ... An arbitrary number of arguments for fprintf, matching the - format string. -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_logfile_trace( const sal_Char* pszFormat, ... ); - -/** Like rtl_logfile_trace, but prefixing every log entry with the current time - and thread ID. - - @param format - a format string with fprintf-like syntax - - @param ... - an arbitrary number of arguments for fprintf, matching the given format - string - - @since UDK 3.2.0 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_logfile_longTrace(char const * format, ...); - -/** Return if a log file is written. - - @return true if a log file is written - - @since UDK 3.2.11 -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_logfile_hasLogFile( void ); - -#ifdef __cplusplus -} -#endif - -#ifdef TIMELOG -#define RTL_LOGFILE_TRACE( string ) \ - rtl_logfile_longTrace( "| : %s\n", string ) -#define RTL_LOGFILE_TRACE1( frmt, arg1 ) \ - rtl_logfile_longTrace( "| : " ); \ - rtl_logfile_trace( frmt, arg1 ); \ - rtl_logfile_trace( "\n" ) - -#define RTL_LOGFILE_TRACE2( frmt, arg1 , arg2 ) \ - rtl_logfile_longTrace( "| : " ); \ - rtl_logfile_trace( frmt, arg1 , arg2 ); \ - rtl_logfile_trace( "\n" ) -#define RTL_LOGFILE_TRACE3( frmt, arg1 , arg2 , arg3 ) \ - rtl_logfile_longTrace( "| : " ); \ - rtl_logfile_trace( frmt, arg1 , arg2 , arg3 ); \ - rtl_logfile_trace( "\n" ) - -// Now the macros with project and author arguments. The strings -// are formatted in a way, so that the log file can be parsed by -// post processing scripts. -#define RTL_LOGFILE_TRACE_AUTHOR( project, author, string ) \ - rtl_logfile_longTrace( "| %s (%s) : %s\n", \ - project,\ - author,\ - string ) -#define RTL_LOGFILE_TRACE_AUTHOR1( project, author, frmt, arg1 ) \ - rtl_logfile_longTrace( "| %s (%s) : ", \ - project,\ - author );\ - rtl_logfile_trace( frmt, arg1 ); \ - rtl_logfile_trace( "\n" ) - -#define RTL_LOGFILE_TRACE_AUTHOR2( project, author, frmt, arg1 , arg2 ) \ - rtl_logfile_longTrace( "| %s (%s) : ", \ - project,\ - author ); \ - rtl_logfile_trace( frmt, arg1 , arg2 ); \ - rtl_logfile_trace( "\n" ) -#define RTL_LOGFILE_TRACE_AUTHOR3( project, author, frmt, arg1 , arg2 , arg3 ) \ - rtl_logfile_longTrace( "| %s (%s) : ", \ - project,\ - author ); \ - rtl_logfile_trace( frmt, arg1 , arg2 , arg3 ); \ - rtl_logfile_trace( "\n" ) -#else -#define RTL_LOGFILE_TRACE( string ) ((void)0) -#define RTL_LOGFILE_TRACE1( frmt, arg1 ) ((void)0) -#define RTL_LOGFILE_TRACE2( frmt, arg1 , arg2 ) ((void)0) -#define RTL_LOGFILE_TRACE3( frmt, arg1 , arg2 , arg3 ) ((void)0) - -#define RTL_LOGFILE_TRACE_AUTHOR( project, author, string ) ((void)0) -#define RTL_LOGFILE_TRACE_AUTHOR1( project, author, frmt, arg1 ) ((void)0) -#define RTL_LOGFILE_TRACE_AUTHOR2( project, author, frmt, arg1 , arg2 ) ((void)0) -#define RTL_LOGFILE_TRACE_AUTHOR3( project, author, frmt, arg1 , arg2 , arg3 ) ((void)0) -#endif // TIMELOG -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/logfile.hxx b/sal/inc/rtl/logfile.hxx deleted file mode 100644 index d911f5664f92..000000000000 --- a/sal/inc/rtl/logfile.hxx +++ /dev/null @@ -1,205 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _RTL_LOGFILE_HXX_ -#define _RTL_LOGFILE_HXX_ - -#include <rtl/logfile.h> -#include <rtl/string.hxx> -#include <sal/detail/log.h> - -namespace rtl -{ -/** -@brief The intended use for class Logfile is to write time stamp information - for profiling purposes. - - Profiling output should only be generated for a special product version of OpenOffice - which is compiled with a defined preprocessor symbol 'TIMELOG'. - Therefore we have provided a set of macros that uses the class Logfile only if - this symbol is defined. If the macros are not sufficient, i.e. you need more - then three arguments for a printf style message, then you have to insert an - \#ifdef TIMELOG/\#endif brace yourself. - - Additionally the environment variable RTL_LOGFILE has to be defined in order to generate - logging information. If the variable is not empty, it creates a file with the name - $(RTL_LOGFILE)_$(PID).log, where $(PID) is the process id of the running process. - It can be used as a run time switch for enabling or disabling the logging. - Note that this variable is evaluated only once at the first attempt to write a message. - - The class LogFile collects runtime data within its constructor and destructor. It can be - used for timing whole functions. - If you want to write timing data without context you can use the RTL_LOGFILE_TRACE-macros - which are defined inside <rtl/logfile.h>. - - The class LogFile should not be used directly, instead use the RTL_LOGFILE_CONTEXT/ - RTL_LOGFILE_TRACE-macros. - - Macro usage: - ------------ - RTL_LOGFILE_CONTEXT( instance, name ); - This macro creates an instance of class LogFile with the name "instance" and writes the current time, - thread id and "name" to the log file. - - Example: RTL_LOGFILE_CONTEXT( aLog, "Timing for foo-method" ); - - RTL_LOGFILE_CONTEXT_TRACE( instance, message ); - RTL_LOGFILE_CONTEXT_TRACEn( instance, frmt, arg1, .., arg3 ); - These macros can be used to log information in a "instance" context. The "instance" object - is used to log message information. All macros with "frmt" uses printf notation to log timing infos. - - Example: RTL_LOGFILE_CONTEXT_TRACE( aLog, "Now we call an expensive function" ); - RTL_LOGFIlE_CONTEXT_TRACE1( aLog, "Config entries read: %u", (unsigned short)i ); - - RTL_LOGFILE_TRACE( string ); - RTL_LOGFILE_TRACEn( frmt, arg1, .., arg3 ); - These macros can be used to log information outside a context. The macro directly calls - rtl_logfile_trace to write the info to the log file. All macros with "frmt" uses printf - notation to log timing infos. - - Example: RTL_LOGFILE_TRACE( "Timing for loading a file" ); - RTL_LOGFILE_TRACE1( aLog, "Timing for loading file: %s", aFileName ); - - The lines written to the log file consist of the following space separated elements: - 1. The time relative to the start of the global timer in milliseconds. The times is - started typically for the first logged line. - 2. Thread id. It's absolut value is probably of less interest than providing a way to - distinguish different threads. - 3. a. An opening or closing curly brace indicating the start or end of a scope. - 4a. Function name or general scope identifier. - b. A vertical line indicating an arbitrary message. - 4b optional function name or general scope identifier. - 5b A colon followed by a space and a free form message terminated by a newline. - - There is a second version of creating a context. RTL_LOGFILE_CONTEXT_AUTHOR takes - two more arguments, the name of the project and the author's sign who is responsible - for the code in which the macro is used. -*/ - class Logfile - { - public: - inline Logfile( const sal_Char *name ); - /** Create a log file context - - Create a log file context where the message field consists of a project - name, the author's shortcut, and the actual message. These three strings - are written in a format that is understood by script that later parses the - log file and that so can extract the three strings. - @param project Short name of the project, like sw for writer or sc for calc. - @param author The sign of the person responsible for the code. - @param name The actual message, typically a method name. - */ - inline Logfile( const sal_Char *project, const sal_Char *author, const sal_Char *name ); - inline ~Logfile(); - inline const sal_Char *getName(); - private: - ::rtl::OString m_sName; - }; - - inline Logfile::Logfile( const sal_Char *name ) - : m_sName( name ) - { - rtl_logfile_longTrace( "{ %s\n", name ); - } - - inline Logfile::Logfile( const sal_Char *project, const sal_Char *author, const sal_Char *name ) - : m_sName( project) - { - m_sName += " ("; - m_sName += author; - m_sName += ") "; - m_sName += name; - rtl_logfile_longTrace( "{ %s\n", m_sName.pData->buffer ); - } - - inline Logfile::~Logfile() - { - rtl_logfile_longTrace( "} %s\n", m_sName.pData->buffer ); - } - - inline const sal_Char * Logfile::getName() - { - return m_sName.getStr(); - } -} - -#ifdef TIMELOG -#define RTL_LOGFILE_CONTEXT( instance, name ) ::rtl::Logfile instance( name ) -#define RTL_LOGFILE_CONTEXT_AUTHOR( instance, project, author, name ) ::rtl::Logfile instance(project, author, name ) -#define RTL_LOGFILE_CONTEXT_TRACE( instance, message ) \ - rtl_logfile_longTrace( "| %s : %s\n", \ - instance.getName(), \ - message ) -#define RTL_LOGFILE_CONTEXT_TRACE1( instance , frmt, arg1 ) \ - rtl_logfile_longTrace( "| %s : ", \ - instance.getName() ); \ - rtl_logfile_trace( frmt , arg1 ); \ - rtl_logfile_trace( "\n" ) -#define RTL_LOGFILE_CONTEXT_TRACE2( instance , frmt, arg1 , arg2 ) \ - rtl_logfile_longTrace( "| %s : ", \ - instance.getName() ); \ - rtl_logfile_trace( frmt , arg1 , arg2 ); \ - rtl_logfile_trace( "\n" ) -#define RTL_LOGFILE_CONTEXT_TRACE3( instance , frmt, arg1 , arg2 , arg3 ) \ - rtl_logfile_longTrace( "| %s : ", \ - instance.getName() ); \ - rtl_logfile_trace( frmt , arg1 , arg2 , arg3 ); \ - rtl_logfile_trace( "\n" ) - -#else - -#define RTL_LOGFILE_FORWARD_VIA_SAL_LOG(area, message) \ - SAL_DETAIL_INFO_IF_FORMAT(SAL_DETAIL_ENABLE_LOG_INFO, area, "%s", message) - -#define RTL_LOGFILE_CONTEXT( instance, name ) RTL_LOGFILE_FORWARD_VIA_SAL_LOG("logfile", name) -#define RTL_LOGFILE_CONTEXT_AUTHOR( instance, project, author, name ) RTL_LOGFILE_FORWARD_VIA_SAL_LOG(project ".logfile", name) -#define RTL_LOGFILE_CONTEXT_TRACE( instance, message ) RTL_LOGFILE_FORWARD_VIA_SAL_LOG("logfile", message) -#define RTL_LOGFILE_CONTEXT_TRACE1( instance, frmt, arg1 ) ((void)arg1,(void)0) -#define RTL_LOGFILE_CONTEXT_TRACE2( instance, frmt, arg1, arg2 ) ((void)arg1,(void)arg2,(void)0) -#define RTL_LOGFILE_CONTEXT_TRACE3( instance, frmt, arg1, arg2 , arg3 ) ((void)arg1,(void)arg2,(void)arg3,(void)0) -#endif - -// Normal RTL_LOGFILE_* entries will not make it into release versions, -// TIMELOG is disabled a few versions prior relase build. -// -// We need some logs also in these builds, eg. for making performance regression tests. -// -// POLICY: Don't use RTL_LOGFILE_PRODUCT_* for your personal logging information. -// Be aware that these logs make it into the product shipped to customers. -// If you have good reasons for doing this, please contact product management. - -#define RTL_LOGFILE_PRODUCT_TRACE( string ) \ - rtl_logfile_longTrace( "| : %s\n", string ) -#define RTL_LOGFILE_PRODUCT_TRACE1( frmt, arg1 ) \ - rtl_logfile_longTrace( "| : " ); \ - rtl_logfile_trace( frmt, arg1 ); \ - rtl_logfile_trace( "\n" ) -#define RTL_LOGFILE_PRODUCT_CONTEXT( instance, name ) \ - ::rtl::Logfile instance( name ) -#define RTL_LOGFILE_PRODUCT_CONTEXT_TRACE1( instance, frmt, arg1 ) \ - rtl_logfile_longTrace( "| %s : ", \ - instance.getName() ); \ - rtl_logfile_trace( frmt, arg1 ); \ - rtl_logfile_trace( "\n" ) -#define RTL_LOGFILE_HASLOGFILE() \ - rtl_logfile_hasLogFile() - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/malformeduriexception.hxx b/sal/inc/rtl/malformeduriexception.hxx deleted file mode 100644 index 24635ed26c2e..000000000000 --- a/sal/inc/rtl/malformeduriexception.hxx +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_RTL_MALFORMEDURIEXCEPTION_HXX -#define INCLUDED_RTL_MALFORMEDURIEXCEPTION_HXX - -#include "rtl/ustring.hxx" - -namespace rtl { - -/** An exception indicating a malformed URI. - - <P>Used when parsing (part of) a URI fails for syntactical reasons.</P> - */ -class SAL_EXCEPTION_DLLPUBLIC_EXPORT MalformedUriException -{ -public: - /** Create a MalformedUriException. - - @param rMessage - A message containing any details about the exception. - */ - inline SAL_EXCEPTION_DLLPRIVATE MalformedUriException( - rtl::OUString const & rMessage): m_aMessage(rMessage) {} - - inline SAL_EXCEPTION_DLLPRIVATE MalformedUriException( - MalformedUriException const & other): m_aMessage(other.m_aMessage) {} - - inline SAL_EXCEPTION_DLLPRIVATE ~MalformedUriException() {} - - inline SAL_EXCEPTION_DLLPRIVATE MalformedUriException operator =( - MalformedUriException const & rOther) - { m_aMessage = rOther.m_aMessage; return *this; } - - /** Get the message. - - @return - A reference to the message. The reference is valid for the lifetime of - this MalformedUriException. - */ - inline SAL_EXCEPTION_DLLPRIVATE rtl::OUString const & getMessage() const - { return m_aMessage; } - -private: - rtl::OUString m_aMessage; -}; - -} - -#endif // INCLUDED_RTL_MALFORMEDURIEXCEPTION_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/math.h b/sal/inc/rtl/math.h deleted file mode 100644 index ebe0a84003bd..000000000000 --- a/sal/inc/rtl/math.h +++ /dev/null @@ -1,475 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_RTL_MATH_H -#define INCLUDED_RTL_MATH_H - -#include "sal/config.h" - -#include "rtl/ustring.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -#if defined __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** Formatting modes for rtl_math_doubleToString and rtl_math_doubleToUString - and rtl_math_doubleToUStringBuffer. - */ -enum rtl_math_StringFormat -{ - /** Like sprintf() %E. - */ - rtl_math_StringFormat_E, - - /** Like sprintf() %f. - */ - rtl_math_StringFormat_F, - - /** Like sprintf() %G, 'F' or 'E' format is used depending on which one is - more compact. - */ - rtl_math_StringFormat_G, - - /** Automatic, 'F' or 'E' format is used depending on the numeric value to - be formatted. - */ - rtl_math_StringFormat_Automatic, - - /** @cond INTERNAL */ - rtl_math_StringFormat_FORCE_EQUAL_SIZE = SAL_MAX_ENUM - /** @endcond */ -}; - -/** Status for rtl_math_stringToDouble and rtl_math_uStringToDouble. - */ -enum rtl_math_ConversionStatus -{ - /** Conversion was successful. - */ - rtl_math_ConversionStatus_Ok, - - /** Conversion caused overflow or underflow. - */ - rtl_math_ConversionStatus_OutOfRange, - - /** @cond INTERNAL */ - rtl_math_ConversionStatus_FORCE_EQUAL_SIZE = SAL_MAX_ENUM - /** @endcond */ -}; - -/** Rounding modes for rtl_math_round. - */ -enum rtl_math_RoundingMode -{ - /** Like HalfUp, but corrects roundoff errors, preferred. - */ - rtl_math_RoundingMode_Corrected, - - /** Floor of absolute value, signed return (commercial). - */ - rtl_math_RoundingMode_Down, - - /** Ceil of absolute value, signed return (commercial). - */ - rtl_math_RoundingMode_Up, - - /** Floor of signed value. - */ - rtl_math_RoundingMode_Floor, - - /** Ceil of signed value. - */ - rtl_math_RoundingMode_Ceiling, - - /** Frac <= 0.5 ? floor of abs : ceil of abs, signed return. - */ - rtl_math_RoundingMode_HalfDown, - - /** Frac < 0.5 ? floor of abs : ceil of abs, signed return (mathematical). - */ - rtl_math_RoundingMode_HalfUp, - - /** IEEE rounding mode (statistical). - */ - rtl_math_RoundingMode_HalfEven, - - /** @cond INTERNAL */ - rtl_math_RoundingMode_FORCE_EQUAL_SIZE = SAL_MAX_ENUM - /** @endcond */ -}; - -/** Special decimal places constants for rtl_math_doubleToString and - rtl_math_doubleToUString and rtl_math_doubleToUStringBuffer. - */ -enum rtl_math_DecimalPlaces -{ - /** Value to be used with rtl_math_StringFormat_Automatic. - */ - rtl_math_DecimalPlaces_Max = 0x7ffffff, - - /** Value to be used with rtl_math_StringFormat_G. - In fact the same value as rtl_math_DecimalPlaces_Max, just an alias for - better understanding. - */ - rtl_math_DecimalPlaces_DefaultSignificance = rtl_math_DecimalPlaces_Max -}; - - -/** Conversions analogous to sprintf() using internal rounding. - - +/-HUGE_VAL are converted to "INF" and "-INF", NAN values are - converted to "NaN". - - @param pResult - Returns the resulting byte string. Must itself not be null, and must point - to either null or a valid string. - - @param pResultCapacity - If null, pResult is considered to point to immutable strings, and a new - string will be allocated in pResult. - If non-null, it points to the current capacity of pResult, which is - considered to point to a string buffer (pResult must not itself be null in - this case, and must point to a string that has room for the given capacity). - The string representation of the given double value is inserted into pResult - at position nResultOffset. If pResult's current capacity is too small, a - new string buffer will be allocated in pResult as necessary, and - pResultCapacity will contain the new capacity on return. - - @param nResultOffset - If pResult is used as a string buffer (i.e., pResultCapacity is non-null), - nResultOffset specifies the insertion offset within the buffer. Ignored - otherwise. - - @param fValue - The value to convert. - - @param eFormat - The format to use, one of rtl_math_StringFormat. - - @param nDecPlaces - The number of decimals to be generated. Effectively fValue is rounded at - this position, specifying nDecPlaces <= 0 accordingly rounds the value - before the decimal point and fills with zeros. - If eFormat == rtl_math_StringFormat_Automatic and nDecPlaces == - rtl_math_DecimalPlaces_Max, the highest number of significant decimals - possible is generated. - If eFormat == rtl_math_StringFormat_G, nDecPlaces specifies the number of - significant digits instead. If nDecPlaces == - rtl_math_DecimalPlaces_DefaultSignificance, the default number (currently 6 - as implemented by most libraries) of significant digits is generated. - According to the ANSI C90 standard the E style will be used only if the - exponent resulting from the conversion is less than -4 or greater than or - equal to the precision. However, as opposed to the ANSI standard, trailing - zeros are not necessarily removed from the fractional portion of the result - unless bEraseTrailingDecZeros == true was specified. - - @param cDecSeparator - The decimal separator. - - @param pGroups - Either null (no grouping is used), or a null-terminated list of group - lengths. Each group length must be strictly positive. If the number of - digits in a conversion exceeds the specified range, the last (highest) group - length is repeated as needed. Values are applied from right to left, for a - grouping of 1,00,00,000 you'd have to specify pGroups={3,2,0}. - - @param cGroupSeparator - The group separator. Ignored if pGroups is null. - - @param bEraseTrailingDecZeros - Trailing zeros in decimal places are erased. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_math_doubleToString(rtl_String ** pResult, - sal_Int32 * pResultCapacity, - sal_Int32 nResultOffset, double fValue, - enum rtl_math_StringFormat eFormat, - sal_Int32 nDecPlaces, - sal_Char cDecSeparator, - sal_Int32 const * pGroups, - sal_Char cGroupSeparator, - sal_Bool bEraseTrailingDecZeros) - SAL_THROW_EXTERN_C(); - -/** Conversions analogous to sprintf() using internal rounding. - - +/-HUGE_VAL are converted to "INF" and "-INF", NAN values are - converted to "NaN". - - @param pResult - Returns the resulting Unicode string. Must itself not be null, and must - point to either null or a valid string. - - @param pResultCapacity - If null, pResult is considered to point to immutable strings, and a new - string will be allocated in pResult. - If non-null, it points to the current capacity of pResult, which is - considered to point to a string buffer (pResult must not itself be null in - this case, and must point to a string that has room for the given capacity). - The string representation of the given double value is inserted into pResult - at position nResultOffset. If pResult's current capacity is too small, a - new string buffer will be allocated in pResult as necessary, and - pResultCapacity will contain the new capacity on return. - - @param nResultOffset - If pResult is used as a string buffer (i.e., pResultCapacity is non-null), - nResultOffset specifies the insertion offset within the buffer. Ignored - otherwise. - - @param fValue - The value to convert. - - @param eFormat - The format to use, one of rtl_math_StringFormat. - - @param nDecPlaces - The number of decimals to be generated. Effectively fValue is rounded at - this position, specifying nDecPlaces <= 0 accordingly rounds the value - before the decimal point and fills with zeros. - If eFormat == rtl_math_StringFormat_Automatic and nDecPlaces == - rtl_math_DecimalPlaces_Max, the highest number of significant decimals - possible is generated. - If eFormat == rtl_math_StringFormat_G, nDecPlaces specifies the number of - significant digits instead. If nDecPlaces == - rtl_math_DecimalPlaces_DefaultSignificance, the default number (currently 6 - as implemented by most libraries) of significant digits is generated. - According to the ANSI C90 standard the E style will be used only if the - exponent resulting from the conversion is less than -4 or greater than or - equal to the precision. However, as opposed to the ANSI standard, trailing - zeros are not necessarily removed from the fractional portion of the result - unless bEraseTrailingDecZeros == true was specified. - - @param cDecSeparator - The decimal separator. - - @param pGroups - Either null (no grouping is used), or a null-terminated list of group - lengths. Each group length must be strictly positive. If the number of - digits in a conversion exceeds the specified range, the last (highest) group - length is repeated as needed. Values are applied from right to left, for a - grouping of 1,00,00,000 you'd have to specify pGroups={3,2,0}. - - @param cGroupSeparator - The group separator. Ignored if pGroups is null. - - @param bEraseTrailingDecZeros - Trailing zeros in decimal places are erased. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_math_doubleToUString(rtl_uString ** pResult, - sal_Int32 * pResultCapacity, - sal_Int32 nResultOffset, double fValue, - enum rtl_math_StringFormat eFormat, - sal_Int32 nDecPlaces, - sal_Unicode cDecSeparator, - sal_Int32 const * pGroups, - sal_Unicode cGroupSeparator, - sal_Bool bEraseTrailingDecZeros) - SAL_THROW_EXTERN_C(); - -/** Conversion analogous to strtod(), convert a string representing a - decimal number into a double value. - - Leading tabs (0x09) and spaces (0x20) are eaten. Overflow returns - +/-HUGE_VAL, underflow 0. In both cases pStatus is set to - rtl_math_ConversionStatus_OutOfRange, otherwise to - rtl_math_ConversionStatus_Ok. "INF", "-INF" and "+/-1.#INF" are - recognized as +/-HUGE_VAL, pStatus is set to - rtl_math_ConversionStatus_OutOfRange. "NaN" and "+/-1.#NAN" are - recognized and the value is set to +/-NAN, pStatus is set to - rtl_math_ConversionStatus_Ok. - - @param pBegin - Points to the start of the byte string to convert. Must not be null. - - @param pEnd - Points one past the end of the byte string to convert. The condition - pEnd >= pBegin must hold. - - @param cDecSeparator - The decimal separator. - - @param cGroupSeparator - The group (aka thousands) separator. - - @param pStatus - If non-null, returns the status of the conversion. - - @param pParsedEnd - If non-null, returns one past the position of the last character parsed - away. Thus if [pBegin..pEnd) only contains the numerical string to be - parsed, *pParsedEnd == pEnd on return. If no numerical (sub-)string is - found, *pParsedEnd == pBegin on return, even if there was leading - whitespace. - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_stringToDouble( - sal_Char const * pBegin, sal_Char const * pEnd, sal_Char cDecSeparator, - sal_Char cGroupSeparator, enum rtl_math_ConversionStatus * pStatus, - sal_Char const ** pParsedEnd) SAL_THROW_EXTERN_C(); - -/** Conversion analogous to strtod(), convert a string representing a - decimal number into a double value. - - Leading tabs (U+0009) and spaces (U+0020) are eaten. Overflow returns - +/-HUGE_VAL, underflow 0. In both cases pStatus is set to - rtl_math_ConversionStatus_OutOfRange, otherwise to - rtl_math_ConversionStatus_Ok. "INF", "-INF" and "+/-1.#INF" are - recognized as +/-HUGE_VAL, pStatus is set to - rtl_math_ConversionStatus_OutOfRange. "NaN" and "+/-1.#NAN" are - recognized and the value is set to +/-NAN, pStatus is set to - rtl_math_ConversionStatus_Ok. - - @param pBegin - Points to the start of the Unicode string to convert. Must not be null. - - @param pEnd - Points one past the end of the Unicode string to convert. The condition - pEnd >= pBegin must hold. - - @param cDecSeparator - The decimal separator. - - @param cGroupSeparator - The group (aka thousands) separator. - - @param pStatus - If non-null, returns the status of the conversion. - - @param pParsedEnd - If non-null, returns one past the position of the last character parsed - away. Thus if [pBegin..pEnd) only contains the numerical string to be - parsed, *pParsedEnd == pEnd on return. If no numerical (sub-)string is - found, *pParsedEnd == pBegin on return, even if there was leading - whitespace. - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_uStringToDouble( - sal_Unicode const * pBegin, sal_Unicode const * pEnd, - sal_Unicode cDecSeparator, sal_Unicode cGroupSeparator, - enum rtl_math_ConversionStatus * pStatus, sal_Unicode const ** pParsedEnd) - SAL_THROW_EXTERN_C(); - -/** Rounds a double value. - - @param fValue - Specifies the value to be rounded. - - @param nDecPlaces - Specifies the decimal place where rounding occurs. Must be in the range - -20 to +20, inclusive. Negative if rounding occurs before the decimal - point. - - @param eMode - Specifies the rounding mode. - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_round(double fValue, int nDecPlaces, - enum rtl_math_RoundingMode eMode) - SAL_THROW_EXTERN_C(); - -/** Scales fVal to a power of 10 without calling pow() or div() for nExp values - between -16 and +16, providing a faster method. - - @param fValue - The value to be raised. - - @param nExp - The exponent. - - @return - fVal * pow(10.0, nExp) - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_pow10Exp(double fValue, int nExp) SAL_THROW_EXTERN_C(); - -/** Rounds value to 15 significant decimal digits. - - @param fValue - The value to be rounded. - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_approxValue(double fValue) SAL_THROW_EXTERN_C(); - -/** Returns more accurate e^x-1 for x near 0 than calculating directly. - - expm1 is part of the C99 standard, but not provided by some compilers. - - @param fValue - The value x in the term e^x-1. - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_expm1(double fValue) SAL_THROW_EXTERN_C(); - -/** Returns more accurate log(1+x) for x near 0 than calculating directly. - - log1p is part of the C99 standard, but not provided by some compilers. - - @param fValue - The value x in the term log(1+x). - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_log1p(double fValue) SAL_THROW_EXTERN_C(); - -/** Returns more accurate atanh(x) for x near 0 than calculating - 0.5*log((1+x)/(1-x)). - - atanh is part of the C99 standard, but not provided by some compilers. - - @param fValue - The value x in the term atanh(x). - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_atanh(double fValue) SAL_THROW_EXTERN_C(); - -/** Returns values of the Errorfunction erf. - - erf is part of the C99 standard, but not provided by some compilers. - - @param fValue - The value x in the term erf(x). - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_erf(double fValue) SAL_THROW_EXTERN_C(); - -/** Returns values of the complement Errorfunction erfc. - - erfc is part of the C99 standard, but not provided by some compilers. - - @param fValue - The value x in the term erfc(x). - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_erfc(double fValue) SAL_THROW_EXTERN_C(); - -/** Returns values of the inverse hyperbolic sine. - - asinh is part of the C99 standard, but not provided by some compilers. - - @param fValue - The value x in the term asinh(x). - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_asinh(double fValue) SAL_THROW_EXTERN_C(); - -/** Returns values of the inverse hyperbolic cosine. - - acosh is part of the C99 standard, but not provided by some compilers. - - @param fValue - The value x in the term acosh(x). - */ -SAL_DLLPUBLIC double SAL_CALL rtl_math_acosh(double fValue) SAL_THROW_EXTERN_C(); - -#if defined __cplusplus -} -#endif /* __cplusplus */ - -#endif /* INCLUDED_RTL_MATH_H */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/math.hxx b/sal/inc/rtl/math.hxx deleted file mode 100644 index d0055c0c66e9..000000000000 --- a/sal/inc/rtl/math.hxx +++ /dev/null @@ -1,439 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_RTL_MATH_HXX -#define INCLUDED_RTL_MATH_HXX - -#include "rtl/math.h" -#include "rtl/string.hxx" -#include "rtl/ustring.hxx" -#include "rtl/ustrbuf.hxx" -#include "sal/mathconf.h" -#include "sal/types.h" - -#include <math.h> - -namespace rtl { - -namespace math { - -/** A wrapper around rtl_math_doubleToString. - */ -inline rtl::OString doubleToString(double fValue, rtl_math_StringFormat eFormat, - sal_Int32 nDecPlaces, - sal_Char cDecSeparator, - sal_Int32 const * pGroups, - sal_Char cGroupSeparator, - bool bEraseTrailingDecZeros = false) -{ - rtl::OString aResult; - rtl_math_doubleToString(&aResult.pData, 0, 0, fValue, eFormat, nDecPlaces, - cDecSeparator, pGroups, cGroupSeparator, - bEraseTrailingDecZeros); - return aResult; -} - -/** A wrapper around rtl_math_doubleToString, with no grouping. - */ -inline rtl::OString doubleToString(double fValue, rtl_math_StringFormat eFormat, - sal_Int32 nDecPlaces, - sal_Char cDecSeparator, - bool bEraseTrailingDecZeros = false) -{ - rtl::OString aResult; - rtl_math_doubleToString(&aResult.pData, 0, 0, fValue, eFormat, nDecPlaces, - cDecSeparator, 0, 0, bEraseTrailingDecZeros); - return aResult; -} - -/** A wrapper around rtl_math_doubleToUString. - */ -inline rtl::OUString doubleToUString(double fValue, - rtl_math_StringFormat eFormat, - sal_Int32 nDecPlaces, - sal_Unicode cDecSeparator, - sal_Int32 const * pGroups, - sal_Unicode cGroupSeparator, - bool bEraseTrailingDecZeros = false) -{ - rtl::OUString aResult; - rtl_math_doubleToUString(&aResult.pData, 0, 0, fValue, eFormat, nDecPlaces, - cDecSeparator, pGroups, cGroupSeparator, - bEraseTrailingDecZeros); - return aResult; -} - -/** A wrapper around rtl_math_doubleToUString, with no grouping. - */ -inline rtl::OUString doubleToUString(double fValue, - rtl_math_StringFormat eFormat, - sal_Int32 nDecPlaces, - sal_Unicode cDecSeparator, - bool bEraseTrailingDecZeros = false) -{ - rtl::OUString aResult; - rtl_math_doubleToUString(&aResult.pData, 0, 0, fValue, eFormat, nDecPlaces, - cDecSeparator, 0, 0, bEraseTrailingDecZeros); - return aResult; -} - -/** A wrapper around rtl_math_doubleToUString that appends to an - rtl::OUStringBuffer. - */ -inline void doubleToUStringBuffer( rtl::OUStringBuffer& rBuffer, double fValue, - rtl_math_StringFormat eFormat, - sal_Int32 nDecPlaces, - sal_Unicode cDecSeparator, - sal_Int32 const * pGroups, - sal_Unicode cGroupSeparator, - bool bEraseTrailingDecZeros = false) -{ - rtl_uString ** pData; - sal_Int32 * pCapacity; - rBuffer.accessInternals( &pData, &pCapacity ); - rtl_math_doubleToUString( pData, pCapacity, rBuffer.getLength(), fValue, - eFormat, nDecPlaces, cDecSeparator, pGroups, - cGroupSeparator, bEraseTrailingDecZeros); -} - -/** A wrapper around rtl_math_doubleToUString that appends to an - rtl::OUStringBuffer, with no grouping. - */ -inline void doubleToUStringBuffer( rtl::OUStringBuffer& rBuffer, double fValue, - rtl_math_StringFormat eFormat, - sal_Int32 nDecPlaces, - sal_Unicode cDecSeparator, - bool bEraseTrailingDecZeros = false) -{ - rtl_uString ** pData; - sal_Int32 * pCapacity; - rBuffer.accessInternals( &pData, &pCapacity ); - rtl_math_doubleToUString( pData, pCapacity, rBuffer.getLength(), fValue, - eFormat, nDecPlaces, cDecSeparator, 0, 0, - bEraseTrailingDecZeros); -} - -/** A wrapper around rtl_math_stringToDouble. - */ -inline double stringToDouble(rtl::OString const & rString, - sal_Char cDecSeparator, sal_Char cGroupSeparator, - rtl_math_ConversionStatus * pStatus = 0, - sal_Int32 * pParsedEnd = 0) -{ - sal_Char const * pBegin = rString.getStr(); - sal_Char const * pEnd; - double fResult = rtl_math_stringToDouble(pBegin, - pBegin + rString.getLength(), - cDecSeparator, cGroupSeparator, - pStatus, &pEnd); - if (pParsedEnd != 0) - *pParsedEnd = (sal_Int32)(pEnd - pBegin); - return fResult; -} - -/** A wrapper around rtl_math_uStringToDouble. - */ -inline double stringToDouble(rtl::OUString const & rString, - sal_Unicode cDecSeparator, - sal_Unicode cGroupSeparator, - rtl_math_ConversionStatus * pStatus = 0, - sal_Int32 * pParsedEnd = 0) -{ - sal_Unicode const * pBegin = rString.getStr(); - sal_Unicode const * pEnd; - double fResult = rtl_math_uStringToDouble(pBegin, - pBegin + rString.getLength(), - cDecSeparator, cGroupSeparator, - pStatus, &pEnd); - if (pParsedEnd != 0) - *pParsedEnd = (sal_Int32)(pEnd - pBegin); - return fResult; -} - -/** A wrapper around rtl_math_round. - */ -inline double round( - double fValue, int nDecPlaces = 0, - rtl_math_RoundingMode eMode = rtl_math_RoundingMode_Corrected) -{ - return rtl_math_round(fValue, nDecPlaces, eMode); -} - -/** A wrapper around rtl_math_pow10Exp. - */ -inline double pow10Exp(double fValue, int nExp) -{ - return rtl_math_pow10Exp(fValue, nExp); -} - -/** A wrapper around rtl_math_approxValue. - */ -inline double approxValue(double fValue) -{ - return rtl_math_approxValue(fValue); -} - -/** A wrapper around rtl_math_expm1. - */ -inline double expm1(double fValue) -{ - return rtl_math_expm1(fValue); -} - -/** A wrapper around rtl_math_log1p. - */ -inline double log1p(double fValue) -{ - return rtl_math_log1p(fValue); -} - -/** A wrapper around rtl_math_atanh. - */ -inline double atanh(double fValue) -{ - return rtl_math_atanh(fValue); -} - -/** A wrapper around rtl_math_erf. - */ -inline double erf(double fValue) -{ - return rtl_math_erf(fValue); -} - -/** A wrapper around rtl_math_erfc. - */ -inline double erfc(double fValue) -{ - return rtl_math_erfc(fValue); -} - -/** A wrapper around rtl_math_asinh. - */ -inline double asinh(double fValue) -{ - return rtl_math_asinh(fValue); -} - -/** A wrapper around rtl_math_acosh. - */ -inline double acosh(double fValue) -{ - return rtl_math_acosh(fValue); -} - - -/** Test equality of two values with an accuracy of the magnitude of the - given values scaled by 2^-48 (4 bits roundoff stripped). - - @attention - approxEqual( value!=0.0, 0.0 ) _never_ yields true. - */ -inline bool approxEqual(double a, double b) -{ - if ( a == b ) - return true; - double x = a - b; - return (x < 0.0 ? -x : x) - < ((a < 0.0 ? -a : a) * (1.0 / (16777216.0 * 16777216.0))); -} - -/** Test equality of two values with an accuracy defined by nPrec - - @attention - approxEqual( value!=0.0, 0.0 ) _never_ yields true. - */ -inline bool approxEqual(double a, double b, sal_Int16 nPrec) -{ - if ( a == b ) - return true; - double x = a - b; - return (x < 0.0 ? -x : x) - < ((a < 0.0 ? -a : a) * (1.0 / (pow(static_cast<double>(2.0), nPrec)))); -} -/** Add two values. - - If signs differ and the absolute values are equal according to approxEqual() - the method returns 0.0 instead of calculating the sum. - - If you wanted to sum up multiple values it would be convenient not to call - approxAdd() for each value but instead remember the first value not equal to - 0.0, add all other values using normal + operator, and with the result and - the remembered value call approxAdd(). - */ -inline double approxAdd(double a, double b) -{ - if ( ((a < 0.0 && b > 0.0) || (b < 0.0 && a > 0.0)) - && approxEqual( a, -b ) ) - return 0.0; - return a + b; -} - -/** Substract two values (a-b). - - If signs are identical and the values are equal according to approxEqual() - the method returns 0.0 instead of calculating the substraction. - */ -inline double approxSub(double a, double b) -{ - if ( ((a < 0.0 && b < 0.0) || (a > 0.0 && b > 0.0)) && approxEqual( a, b ) ) - return 0.0; - return a - b; -} - -/** floor() method taking approxValue() into account. - - Use for expected integer values being calculated by double functions. - */ -inline double approxFloor(double a) -{ - return floor( approxValue( a )); -} - -/** ceil() method taking approxValue() into account. - - Use for expected integer values being calculated by double functions. - */ -inline double approxCeil(double a) -{ - return ceil( approxValue( a )); -} - -/** Tests whether a value is neither INF nor NAN. - */ -inline bool isFinite(double d) -{ - return SAL_MATH_FINITE(d) != 0; -} - -/** If a value represents +INF or -INF. - - The sign bit may be queried with isSignBitSet(). - - If isFinite(d)==false and isInf(d)==false then NAN. - */ -inline bool isInf(double d) -{ - // exponent==0x7ff fraction==0 - return (SAL_MATH_FINITE(d) == 0) && - (reinterpret_cast< sal_math_Double * >(&d)->inf_parts.fraction_hi == 0) - && (reinterpret_cast< sal_math_Double * >(&d)->inf_parts.fraction_lo - == 0); -} - -/** Test on any QNAN or SNAN. - */ -inline bool isNan(double d) -{ - // exponent==0x7ff fraction!=0 - return (SAL_MATH_FINITE(d) == 0) && ( - (reinterpret_cast< sal_math_Double * >(&d)->inf_parts.fraction_hi != 0) - || (reinterpret_cast< sal_math_Double * >(&d)->inf_parts.fraction_lo - != 0) ); -} - -/** If the sign bit is set. - */ -inline bool isSignBitSet(double d) -{ - return reinterpret_cast< sal_math_Double * >(&d)->inf_parts.sign != 0; -} - -/** Set to +INF if bNegative==false or -INF if bNegative==true. - */ -inline void setInf(double * pd, bool bNegative) -{ - union - { - double sd; - sal_math_Double md; - }; - md.w32_parts.msw = bNegative ? 0xFFF00000 : 0x7FF00000; - md.w32_parts.lsw = 0; - *pd = sd; -} - -/** Set a QNAN. - */ -inline void setNan(double * pd) -{ - union - { - double sd; - sal_math_Double md; - }; - md.w32_parts.msw = 0x7FFFFFFF; - md.w32_parts.lsw = 0xFFFFFFFF; - *pd = sd; -} - -/** If a value is a valid argument for sin(), cos(), tan(). - - IEEE 754 specifies that absolute values up to 2^64 (=1.844e19) for the - radian must be supported by trigonometric functions. Unfortunately, at - least on x86 architectures, the FPU doesn't generate an error pattern for - values >2^64 but produces erroneous results instead and sets only the - "invalid operation" (IM) flag in the status word :-( Thus the application - has to handle it itself. - */ -inline bool isValidArcArg(double d) -{ - return fabs(d) - <= (static_cast< double >(static_cast< unsigned long >(0x80000000)) - * static_cast< double >(static_cast< unsigned long >(0x80000000)) - * 2); -} - -/** Safe sin(), returns NAN if not valid. - */ -inline double sin(double d) -{ - if ( isValidArcArg( d ) ) - return ::sin( d ); - setNan( &d ); - return d; -} - -/** Safe cos(), returns NAN if not valid. - */ -inline double cos(double d) -{ - if ( isValidArcArg( d ) ) - return ::cos( d ); - setNan( &d ); - return d; -} - -/** Safe tan(), returns NAN if not valid. - */ -inline double tan(double d) -{ - if ( isValidArcArg( d ) ) - return ::tan( d ); - setNan( &d ); - return d; -} - -} - -} - -#endif // INCLUDED_RTL_MATH_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/process.h b/sal/inc/rtl/process.h deleted file mode 100644 index fa8fdda62e9d..000000000000 --- a/sal/inc/rtl/process.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _RTL_PROCESS_H_ -#define _RTL_PROCESS_H_ - -#include "sal/config.h" - -#include "osl/process.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - gets a 16-byte fixed size identifier which is guaranteed not to change - during the current process. - - The current implementation creates a 16-byte uuid without using - the ethernet address of system. Thus the - identifier is different from identifiers created - in other processes with a very probability. - - @param pTargetUUID 16 byte of memory - @see rtl_createUiid() - */ -SAL_DLLPUBLIC void SAL_CALL rtl_getGlobalProcessId( sal_uInt8 *pTargetUUID ); - -/** Get the nArg-th command-line argument passed to the main-function of this process. - - This functions differs from osl_getCommandArg() in filtering any bootstrap values - given by command args, that means that all arguments starting with "-env:" will be - ignored by this function. - - @param nArg [in] The number of the argument to return. - @param strCommandArg [out] The string receives the nArg-th command-line argument. - @return osl_Process_E_None or does not return. - @see osl_getCommandArg() - @see rtl_getCommandArgCount() -*/ -SAL_DLLPUBLIC oslProcessError SAL_CALL rtl_getAppCommandArg(sal_uInt32 nArg, rtl_uString **strCommandArg); - -/** Returns the number of command line arguments at process start. - - This functions differs from osl_getCommandArg() in filtering any bootstrap values - given by command args, that means that all arguments starting with "-env:" will be - ignored by this function. - - @return the number of commandline arguments passed to the main-function of this process. - @see osl_getCommandArgCount() - @see rtl_getCommandArg() -*/ -SAL_DLLPUBLIC sal_uInt32 SAL_CALL rtl_getAppCommandArgCount(); - -#ifdef __cplusplus -} -#endif - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/random.h b/sal/inc/rtl/random.h deleted file mode 100644 index 80c9c15a2c52..000000000000 --- a/sal/inc/rtl/random.h +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_RANDOM_H_ -#define _RTL_RANDOM_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*======================================================================== - * - * rtlRandom interface. - * - *======================================================================*/ -/** Random Pool opaque type. - */ -typedef void* rtlRandomPool; - - -/** Error Code enumeration. - */ -enum __rtl_RandomError -{ - rtl_Random_E_None, - rtl_Random_E_Argument, - rtl_Random_E_Memory, - rtl_Random_E_Unknown, - rtl_Random_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -}; - -/** Error Code type. - */ -typedef enum __rtl_RandomError rtlRandomError; - - -/** Create a Random Pool. - @return initialized Random Pool, or NULL upon failure. - */ -SAL_DLLPUBLIC rtlRandomPool SAL_CALL rtl_random_createPool (void) SAL_THROW_EXTERN_C(); - - -/** Destroy a Random Pool. - @param Pool [in] a Random Pool. - @return none. Pool is invalid. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_random_destroyPool ( - rtlRandomPool Pool -) SAL_THROW_EXTERN_C(); - - -/** Add bytes to a Random Pool. - @param[in] Pool a Random Pool. - @param[in] Buffer a buffer containing the bytes to add. - @param[in] Bytes the number of bytes to read from the buffer. - @return rtl_Random_E_None upon success. - */ -SAL_DLLPUBLIC rtlRandomError SAL_CALL rtl_random_addBytes ( - rtlRandomPool Pool, - const void *Buffer, - sal_Size Bytes -) SAL_THROW_EXTERN_C(); - - -/** Retrieve bytes from a Random Pool. - @param[in] Pool a Random Pool. - @param[in,out] Buffer a buffer to receive the random bytes. - @param[in] Bytes the number of bytes to write to the buffer. - @return rtl_Random_E_None upon success. - */ -SAL_DLLPUBLIC rtlRandomError SAL_CALL rtl_random_getBytes ( - rtlRandomPool Pool, - void *Buffer, - sal_Size Bytes -) SAL_THROW_EXTERN_C(); - -/*======================================================================== - * - * The End. - * - *======================================================================*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_RANDOM_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/ref.hxx b/sal/inc/rtl/ref.hxx deleted file mode 100644 index 8306a839da46..000000000000 --- a/sal/inc/rtl/ref.hxx +++ /dev/null @@ -1,243 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_REF_HXX_ -#define _RTL_REF_HXX_ - -#include <sal/types.h> -#include <osl/diagnose.h> -#include <osl/interlck.h> - -namespace rtl -{ - -/** Interface for a reference type. -*/ -class IReference -{ -public: - /** @see osl_incrementInterlockedCount. - */ - virtual oslInterlockedCount SAL_CALL acquire() = 0; - - /** @see osl_decrementInterlockedCount. - */ - virtual oslInterlockedCount SAL_CALL release() = 0; - -#if !defined _MSC_VER // public -> protected changes mangled names there -protected: -#endif - ~IReference() {} - // avoid warnings about virtual members and non-virtual dtor -}; - - -/** Template reference class for reference type derived from IReference. -*/ -template <class reference_type> -class Reference -{ - /** The <b>reference_type</b> body pointer. - */ - reference_type * m_pBody; - - -public: - /** Constructor... - */ - inline Reference() - : m_pBody (0) - {} - - - /** Constructor... - */ - inline Reference (reference_type * pBody) - : m_pBody (pBody) - { - if (m_pBody) - m_pBody->acquire(); - } - - - /** Copy constructor... - */ - inline Reference (const Reference<reference_type> & handle) - : m_pBody (handle.m_pBody) - { - if (m_pBody) - m_pBody->acquire(); - } - - - /** Destructor... - */ - inline ~Reference() - { - if (m_pBody) - m_pBody->release(); - } - - /** Set... - Similar to assignment. - */ - inline Reference<reference_type> & - SAL_CALL set (reference_type * pBody) - { - if (pBody) - pBody->acquire(); - reference_type * const pOld = m_pBody; - m_pBody = pBody; - if (pOld) - pOld->release(); - return *this; - } - - /** Assignment. - Unbinds this instance from its body (if bound) and - bind it to the body represented by the handle. - */ - inline Reference<reference_type> & - SAL_CALL operator= (const Reference<reference_type> & handle) - { - return set( handle.m_pBody ); - } - - /** Assignment... - */ - inline Reference<reference_type> & - SAL_CALL operator= (reference_type * pBody) - { - return set( pBody ); - } - - /** Unbind the body from this handle. - Note that for a handle representing a large body, - "handle.clear().set(new body());" _might_ - perform a little bit better than "handle.set(new body());", - since in the second case two large objects exist in memory - (the old body and the new body). - */ - inline Reference<reference_type> & SAL_CALL clear() - { - if (m_pBody) - { - reference_type * const pOld = m_pBody; - m_pBody = 0; - pOld->release(); - } - return *this; - } - - - /** Get the body. Can be used instead of operator->(). - I.e. handle->someBodyOp() and handle.get()->someBodyOp() - are the same. - */ - inline reference_type * SAL_CALL get() const - { - return m_pBody; - } - - - /** Probably most common used: handle->someBodyOp(). - */ - inline reference_type * SAL_CALL operator->() const - { - OSL_PRECOND(m_pBody, "Reference::operator->() : null body"); - return m_pBody; - } - - - /** Allows (*handle).someBodyOp(). - */ - inline reference_type & SAL_CALL operator*() const - { - OSL_PRECOND(m_pBody, "Reference::operator*() : null body"); - return *m_pBody; - } - - - /** Returns True if the handle does point to a valid body. - */ - inline sal_Bool SAL_CALL is() const - { - return (m_pBody != 0); - } - - - /** Returns True if this points to pBody. - */ - inline sal_Bool SAL_CALL operator== (const reference_type * pBody) const - { - return (m_pBody == pBody); - } - - - /** Returns True if handle points to the same body. - */ - inline sal_Bool - SAL_CALL operator== (const Reference<reference_type> & handle) const - { - return (m_pBody == handle.m_pBody); - } - - - /** Needed to place References into STL collection. - */ - inline sal_Bool - SAL_CALL operator!= (const Reference<reference_type> & handle) const - { - return (m_pBody != handle.m_pBody); - } - - - /** Needed to place References into STL collection. - */ - inline sal_Bool - SAL_CALL operator< (const Reference<reference_type> & handle) const - { - return (m_pBody < handle.m_pBody); - } - - - /** Needed to place References into STL collection. - */ - inline sal_Bool - SAL_CALL operator> (const Reference<reference_type> & handle) const - { - return (m_pBody > handle.m_pBody); - } -}; - -/// @cond INTERNAL -/** Enables boost::mem_fn and boost::bind to recognize Reference. -*/ -template <typename T> -inline T * get_pointer( Reference<T> const& r ) -{ - return r.get(); -} -/// @endcond - -} // namespace rtl - -#endif /* !_RTL_REF_HXX_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/strbuf.h b/sal/inc/rtl/strbuf.h deleted file mode 100644 index 05dd2de8c61c..000000000000 --- a/sal/inc/rtl/strbuf.h +++ /dev/null @@ -1,137 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_STRBUF_H_ -#define _RTL_STRBUF_H_ - -#include "sal/config.h" - -#include "rtl/string.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Allocates a new <code>String</code> that contains characters from - the character array argument. - - The <code>count</code> argument specifies - the length of the array. The initial capacity of the string buffer is - <code>16</code> plus the length of the string argument. - - @param newStr out parameter, contains the new string. The reference count is 1. - @param value the initial value of the string. - @param count the length of value. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_stringbuffer_newFromStr_WithLength( - rtl_String ** newStr, - const sal_Char * value, - sal_Int32 count); - -/** - Allocates a new <code>String</code> that contains the same sequence of - characters as the string argument. - - The initial capacity is the larger of: - <ul> - <li> The <code>bufferLen</code> argument. - <li> The <code>length</code> of the string argument. - </ul> - - @param newStr out parameter, contains the new string. The reference count is 1. - @param capacity the initial len of the string buffer. - @param oldStr the initial value of the string. - @return the new capacity of the string buffer - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_stringbuffer_newFromStringBuffer( - rtl_String ** newStr, - sal_Int32 capacity, - rtl_String * oldStr ); - -/** - Ensures that the capacity of the buffer is at least equal to the - specified minimum. - - If the current capacity of this string buffer is less than the - argument, then a new internal buffer is allocated with greater - capacity. The new capacity is the larger of: - <ul> - <li>The <code>minimumCapacity</code> argument. - <li>Twice the old capacity, plus <code>2</code>. - </ul> - If the <code>minimumCapacity</code> argument is nonpositive, this - method takes no action and simply returns. - - @param[in,out] This the String to operate on. - @param[in,out] capacity in: old capacity, out: new capacity. - @param[in] minimumCapacity the minimum desired capacity. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_stringbuffer_ensureCapacity( - rtl_String ** This, - sal_Int32* capacity, - sal_Int32 minimumCapacity); - - -/** - Inserts the string representation of the <code>char</code> array - argument into this string buffer. - - The characters of the array argument are inserted into the - contents of this string buffer at the position indicated by - <code>offset</code>. The length of this string buffer increases by - the length of the argument. - - @param[in,out] This the String to operate on. - @param[in,out] capacity the capacity of the string buffer - @param[in] offset the offset. - @param[in] str a character array. - @param[in] len the number of characters to append. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_stringbuffer_insert( - rtl_String ** This, - sal_Int32 * capacity, - sal_Int32 offset, - const sal_Char * str, - sal_Int32 len); - -/** - Removes the characters in a substring of this sequence. - - The substring begins at the specified <code>start</code> and - is <code>len</code> characters long. - - start must be >= 0 && <= This->length - - @param[in,out] This The String to operate on. - @param[in] start The beginning index, inclusive - @param[in] len The substring length - */ -SAL_DLLPUBLIC void SAL_CALL rtl_stringbuffer_remove( - rtl_String ** This, - sal_Int32 start, - sal_Int32 len ); - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_STRBUF_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/strbuf.hxx b/sal/inc/rtl/strbuf.hxx deleted file mode 100644 index 9ebd495239cd..000000000000 --- a/sal/inc/rtl/strbuf.hxx +++ /dev/null @@ -1,922 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_STRBUF_HXX_ -#define _RTL_STRBUF_HXX_ - -#include "sal/config.h" - -#include <cassert> -#include <string.h> - -#include <rtl/strbuf.h> -#include <rtl/string.hxx> -#include <rtl/stringutils.hxx> - -#ifdef RTL_FAST_STRING -#include <rtl/stringconcat.hxx> -#endif - -#ifdef __cplusplus - -// The unittest uses slightly different code to help check that the proper -// calls are made. The class is put into a different namespace to make -// sure the compiler generates a different (if generating also non-inline) -// copy of the function and does not merge them together. The class -// is "brought" into the proper rtl namespace by a typedef below. -#ifdef RTL_STRING_UNITTEST -#define rtl rtlunittest -#endif - -namespace rtl -{ - -#ifdef RTL_STRING_UNITTEST -#undef rtl -// helper macro to make functions appear more readable -#define RTL_STRING_CONST_FUNCTION rtl_string_unittest_const_literal_function = true; -#else -#define RTL_STRING_CONST_FUNCTION -#endif - -/** A string buffer implements a mutable sequence of characters. - <p> - String buffers are safe for use by multiple threads. The methods - are synchronized where necessary so that all the operations on any - particular instance behave as if they occur in some serial order. - <p> - String buffers are used by the compiler to implement the binary - string concatenation operator <code>+</code>. For example, the code: - <p><blockquote><pre> - x = "a" + 4 + "c" - </pre></blockquote><p> - is compiled to the equivalent of: - <p><blockquote><pre> - x = new OStringBuffer().append("a").append(4).append("c") - .makeStringAndClear() - </pre></blockquote><p> - The principal operations on a <code>OStringBuffer</code> are the - <code>append</code> and <code>insert</code> methods, which are - overloaded so as to accept data of any type. Each effectively - converts a given datum to a string and then appends or inserts the - characters of that string to the string buffer. The - <code>append</code> method always adds these characters at the end - of the buffer; the <code>insert</code> method adds the characters at - a specified point. - <p> - For example, if <code>z</code> refers to a string buffer object - whose current contents are "<code>start</code>", then - the method call <code>z.append("le")</code> would cause the string - buffer to contain "<code>startle</code>", whereas - <code>z.insert(4, "le")</code> would alter the string buffer to - contain "<code>starlet</code>". - <p> - Every string buffer has a capacity. As long as the length of the - character sequence contained in the string buffer does not exceed - the capacity, it is not necessary to allocate a new internal - buffer array. If the internal buffer overflows, it is - automatically made larger. - */ -class SAL_WARN_UNUSED OStringBuffer -{ -public: - /** - Constructs a string buffer with no characters in it and an - initial capacity of 16 characters. - */ - OStringBuffer() - : pData(NULL) - , nCapacity( 16 ) - { - rtl_string_new_WithLength( &pData, nCapacity ); - } - - /** - Allocates a new string buffer that contains the same sequence of - characters as the string buffer argument. - - @param value a <code>OStringBuffer</code>. - */ - OStringBuffer( const OStringBuffer & value ) - : pData(NULL) - , nCapacity( value.nCapacity ) - { - rtl_stringbuffer_newFromStringBuffer( &pData, value.nCapacity, value.pData ); - } - - /** - Constructs a string buffer with no characters in it and an - initial capacity specified by the <code>length</code> argument. - - @param length the initial capacity. - */ - explicit OStringBuffer(int length) - : pData(NULL) - , nCapacity( length ) - { - rtl_string_new_WithLength( &pData, length ); - } - - /** - Constructs a string buffer so that it represents the same - sequence of characters as the string argument. - - The initial - capacity of the string buffer is <code>16</code> plus the length - of the string argument. - - @param value the initial string value. - */ - OStringBuffer(const OString& value) - : pData(NULL) - , nCapacity( value.getLength() + 16 ) - { - rtl_stringbuffer_newFromStr_WithLength( &pData, value.getStr(), value.getLength() ); - } - - /** - @overload - @since LibreOffice 3.6 - */ - template< typename T > - OStringBuffer( const T& value, typename internal::CharPtrDetector< T, internal::Dummy >::Type = internal::Dummy()) - : pData(NULL) - { - sal_Int32 length = rtl_str_getLength( value ); - nCapacity = length + 16; - rtl_stringbuffer_newFromStr_WithLength( &pData, value, length ); - } - - template< typename T > - OStringBuffer( T& value, typename internal::NonConstCharArrayDetector< T, internal::Dummy >::Type = internal::Dummy()) - : pData(NULL) - { - sal_Int32 length = rtl_str_getLength( value ); - nCapacity = length + 16; - rtl_stringbuffer_newFromStr_WithLength( &pData, value, length ); - } - - /** - Constructs a string buffer so that it represents the same - sequence of characters as the string literal. - - If there are any embedded \0's in the string literal, the result is undefined. - Use the overload that explicitly accepts length. - - @since LibreOffice 3.6 - - @param literal a string literal - */ - template< typename T > - OStringBuffer( T& literal, typename internal::ConstCharArrayDetector< T, internal::Dummy >::Type = internal::Dummy()) - : pData(NULL) - , nCapacity( internal::ConstCharArrayDetector< T, void >::size - 1 + 16 ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_string_newFromLiteral( &pData, literal, internal::ConstCharArrayDetector< T, void >::size - 1, 16 ); -#ifdef RTL_STRING_UNITTEST - rtl_string_unittest_const_literal = true; -#endif - } - - /** - Constructs a string buffer so that it represents the same - sequence of characters as the string argument. - - The initial - capacity of the string buffer is <code>16</code> plus length - - @param value a character array. - @param length the number of character which should be copied. - The character array length must be greater or - equal than this value. - */ - OStringBuffer(const sal_Char * value, sal_Int32 length) - : pData(NULL) - , nCapacity( length + 16 ) - { - rtl_stringbuffer_newFromStr_WithLength( &pData, value, length ); - } - -#ifdef RTL_FAST_STRING - /** - @overload - @internal - */ - template< typename T1, typename T2 > - OStringBuffer( const OStringConcat< T1, T2 >& c ) - { - const sal_Int32 l = c.length(); - nCapacity = l + 16; - pData = rtl_string_alloc( nCapacity ); - char* end = c.addData( pData->buffer ); - *end = '\0'; - pData->length = end - pData->buffer; - } -#endif - - /** Assign to this a copy of value. - */ - OStringBuffer& operator = ( const OStringBuffer& value ) - { - if (this != &value) - { - rtl_stringbuffer_newFromStringBuffer(&pData, - value.nCapacity, - value.pData); - nCapacity = value.nCapacity; - } - return *this; - } - - /** - Release the string data. - */ - ~OStringBuffer() - { - rtl_string_release( pData ); - } - - /** - Fill the string data in the new string and clear the buffer. - - This method is more efficient than the contructor of the string. It does - not copy the buffer. - - @return the string previously contained in the buffer. - */ - OString makeStringAndClear() - { - OString aRet( pData ); - rtl_string_new(&pData); - nCapacity = 0; - return aRet; - } - - /** - Returns the length (character count) of this string buffer. - - @return the number of characters in this string buffer. - */ - sal_Int32 getLength() const - { - return pData->length; - } - - /** - Checks if a string buffer is empty. - - @return true if the string buffer is empty; - false, otherwise. - - @since LibreOffice 4.1 - */ - bool isEmpty() const SAL_THROW(()) - { - return pData->length == 0; - } - - /** - Returns the current capacity of the String buffer. - - The capacity - is the amount of storage available for newly inserted - characters. The real buffer size is 2 bytes longer, because - all strings are 0 terminated. - - @return the current capacity of this string buffer. - */ - sal_Int32 getCapacity() const - { - return nCapacity; - } - - /** - Ensures that the capacity of the buffer is at least equal to the - specified minimum. - - The new capacity will be at least as large as the maximum of the current - length (so that no contents of the buffer is destroyed) and the given - minimumCapacity. If the given minimumCapacity is negative, nothing is - changed. - - @param minimumCapacity the minimum desired capacity. - */ - void ensureCapacity(sal_Int32 minimumCapacity) - { - rtl_stringbuffer_ensureCapacity( &pData, &nCapacity, minimumCapacity ); - } - - /** - Sets the length of this String buffer. - - If the <code>newLength</code> argument is less than the current - length of the string buffer, the string buffer is truncated to - contain exactly the number of characters given by the - <code>newLength</code> argument. - <p> - If the <code>newLength</code> argument is greater than or equal - to the current length, sufficient null characters - (<code>'\u0000'</code>) are appended to the string buffer so that - length becomes the <code>newLength</code> argument. - <p> - The <code>newLength</code> argument must be greater than or equal - to <code>0</code>. - - @param newLength the new length of the buffer. - */ - void setLength(sal_Int32 newLength) - { - assert(newLength >= 0); - // Avoid modifications if pData points to const empty string: - if( newLength != pData->length ) - { - if( newLength > nCapacity ) - rtl_stringbuffer_ensureCapacity(&pData, &nCapacity, newLength); - else - pData->buffer[newLength] = '\0'; - pData->length = newLength; - } - } - - /** - Returns the character at a specific index in this string buffer. - - The first character of a string buffer is at index - <code>0</code>, the next at index <code>1</code>, and so on, for - array indexing. - <p> - The index argument must be greater than or equal to - <code>0</code>, and less than the length of this string buffer. - - @param index the index of the desired character. - @return the character at the specified index of this string buffer. - */ - SAL_DEPRECATED("use rtl::OStringBuffer::operator [] instead") - sal_Char charAt( sal_Int32 index ) - { - assert(index >= 0 && index < pData->length); - return pData->buffer[ index ]; - } - - /** - The character at the specified index of this string buffer is set - to <code>ch</code>. - - The index argument must be greater than or equal to - <code>0</code>, and less than the length of this string buffer. - - @param index the index of the character to modify. - @param ch the new character. - */ - SAL_DEPRECATED("use rtl::OStringBuffer::operator [] instead") - OStringBuffer & setCharAt(sal_Int32 index, sal_Char ch) - { - assert(index >= 0 && index < pData->length); - pData->buffer[ index ] = ch; - return *this; - } - - /** - Return a null terminated character array. - */ - const sal_Char* getStr() const { return pData->buffer; } - - /** - Access to individual characters. - - @param index must be non-negative and less than length. - - @return a reference to the character at the given index. - - @since LibreOffice 3.5 - */ - sal_Char & operator [](sal_Int32 index) - { - assert(index >= 0 && index < pData->length); - return pData->buffer[index]; - } - - /** - Return a OString instance reflecting the current content - of this OStringBuffer. - */ - const OString toString() const - { - return OString(pData->buffer, pData->length); - } - - /** - Appends the string to this string buffer. - - The characters of the <code>String</code> argument are appended, in - order, to the contents of this string buffer, increasing the - length of this string buffer by the length of the argument. - - @param str a string. - @return this string buffer. - */ - OStringBuffer & append(const OString &str) - { - return append( str.getStr(), str.getLength() ); - } - - /** - Appends the string representation of the <code>char</code> array - argument to this string buffer. - - The characters of the array argument are appended, in order, to - the contents of this string buffer. The length of this string - buffer increases by the length of the argument. - - @param str the characters to be appended. - @return this string buffer. - */ - template< typename T > - typename internal::CharPtrDetector< T, OStringBuffer& >::Type append( const T& str ) - { - return append( str, rtl_str_getLength( str ) ); - } - - template< typename T > - typename internal::NonConstCharArrayDetector< T, OStringBuffer& >::Type append( T& str ) - { - return append( str, rtl_str_getLength( str ) ); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, OStringBuffer& >::Type append( T& literal ) - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_stringbuffer_insert( &pData, &nCapacity, getLength(), literal, internal::ConstCharArrayDetector< T, void >::size - 1 ); - return *this; - } - - /** - Appends the string representation of the <code>char</code> array - argument to this string buffer. - - Characters of the character array <code>str</code> are appended, - in order, to the contents of this string buffer. The length of this - string buffer increases by the value of <code>len</code>. - - @param str the characters to be appended; must be non-null, and must - point to at least len characters - @param len the number of characters to append; must be non-negative - @return this string buffer. - */ - OStringBuffer & append( const sal_Char * str, sal_Int32 len) - { - // insert behind the last character - rtl_stringbuffer_insert( &pData, &nCapacity, getLength(), str, len ); - return *this; - } - -#ifdef RTL_FAST_STRING - /** - @overload - @internal - */ - template< typename T1, typename T2 > - OStringBuffer& append( const OStringConcat< T1, T2 >& c ) - { - const int l = c.length(); - if( l == 0 ) - return *this; - rtl_stringbuffer_ensureCapacity( &pData, &nCapacity, pData->length + l ); - char* end = c.addData( pData->buffer + pData->length ); - *end = '\0'; - pData->length = end - pData->buffer; - return *this; - } -#endif - - /** - Appends the string representation of the <code>sal_Bool</code> - argument to the string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param b a <code>sal_Bool</code>. - @return this string buffer. - */ - OStringBuffer & append(sal_Bool b) - { - sal_Char sz[RTL_STR_MAX_VALUEOFBOOLEAN]; - return append( sz, rtl_str_valueOfBoolean( sz, b ) ); - } - - /** - Appends the string representation of the <code>char</code> - argument to this string buffer. - - The argument is appended to the contents of this string buffer. - The length of this string buffer increases by <code>1</code>. - - @param c a <code>char</code>. - @return this string buffer. - */ - OStringBuffer & append(sal_Char c) - { - return append( &c, 1 ); - } - - /** - Appends the string representation of the <code>sal_Int32</code> - argument to this string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param i an <code>sal_Int32</code>. - @param radix the radix - @return this string buffer. - */ - OStringBuffer & append(sal_Int32 i, sal_Int16 radix = 10 ) - { - sal_Char sz[RTL_STR_MAX_VALUEOFINT32]; - return append( sz, rtl_str_valueOfInt32( sz, i, radix ) ); - } - - /** - Appends the string representation of the <code>long</code> - argument to this string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param l a <code>long</code>. - @param radix the radix - @return this string buffer. - */ - OStringBuffer & append(sal_Int64 l, sal_Int16 radix = 10 ) - { - sal_Char sz[RTL_STR_MAX_VALUEOFINT64]; - return append( sz, rtl_str_valueOfInt64( sz, l, radix ) ); - } - - /** - Appends the string representation of the <code>float</code> - argument to this string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param f a <code>float</code>. - @return this string buffer. - */ - OStringBuffer & append(float f) - { - sal_Char sz[RTL_STR_MAX_VALUEOFFLOAT]; - return append( sz, rtl_str_valueOfFloat( sz, f ) ); - } - - /** - Appends the string representation of the <code>double</code> - argument to this string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param d a <code>double</code>. - @return this string buffer. - */ - OStringBuffer & append(double d) - { - sal_Char sz[RTL_STR_MAX_VALUEOFDOUBLE]; - return append( sz, rtl_str_valueOfDouble( sz, d ) ); - } - - /** - Inserts the string into this string buffer. - - The characters of the <code>String</code> argument are inserted, in - order, into this string buffer at the indicated offset. The length - of this string buffer is increased by the length of the argument. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param str a string. - @return this string buffer. - */ - OStringBuffer & insert(sal_Int32 offset, const OString & str) - { - return insert( offset, str.getStr(), str.getLength() ); - } - - /** - Inserts the string representation of the <code>char</code> array - argument into this string buffer. - - The characters of the array argument are inserted into the - contents of this string buffer at the position indicated by - <code>offset</code>. The length of this string buffer increases by - the length of the argument. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param str a character array. - @return this string buffer. - */ - template< typename T > - typename internal::CharPtrDetector< T, OStringBuffer& >::Type insert( sal_Int32 offset, const T& str ) - { - return insert( offset, str, rtl_str_getLength( str ) ); - } - - template< typename T > - typename internal::NonConstCharArrayDetector< T, OStringBuffer& >::Type insert( sal_Int32 offset, T& str ) - { - return insert( offset, str, rtl_str_getLength( str ) ); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, OStringBuffer& >::Type insert( sal_Int32 offset, T& literal ) - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_stringbuffer_insert( &pData, &nCapacity, offset, literal, internal::ConstCharArrayDetector< T, void >::size - 1 ); - return *this; - } - - /** - Inserts the string representation of the <code>char</code> array - argument into this string buffer. - - The characters of the array argument are inserted into the - contents of this string buffer at the position indicated by - <code>offset</code>. The length of this string buffer increases by - the length of the argument. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param str a character array. - @param len the number of characters to append. - @return this string buffer. - */ - OStringBuffer & insert( sal_Int32 offset, const sal_Char * str, sal_Int32 len) - { - // insert behind the last character - rtl_stringbuffer_insert( &pData, &nCapacity, offset, str, len ); - return *this; - } - - /** - Inserts the string representation of the <code>sal_Bool</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param b a <code>sal_Bool</code>. - @return this string buffer. - */ - OStringBuffer & insert(sal_Int32 offset, sal_Bool b) - { - sal_Char sz[RTL_STR_MAX_VALUEOFBOOLEAN]; - return insert( offset, sz, rtl_str_valueOfBoolean( sz, b ) ); - } - - /** - Inserts the string representation of the <code>char</code> - argument into this string buffer. - - The second argument is inserted into the contents of this string - buffer at the position indicated by <code>offset</code>. The length - of this string buffer increases by one. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param c a <code>char</code>. - @return this string buffer. - */ - OStringBuffer & insert(sal_Int32 offset, sal_Char c) - { - return insert( offset, &c, 1 ); - } - - /** - Inserts the string representation of the second <code>sal_Int32</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param i an <code>sal_Int32</code>. - @param radix the radix - @return this string buffer. - */ - OStringBuffer & insert(sal_Int32 offset, sal_Int32 i, sal_Int16 radix = 10 ) - { - sal_Char sz[RTL_STR_MAX_VALUEOFINT32]; - return insert( offset, sz, rtl_str_valueOfInt32( sz, i, radix ) ); - } - - /** - Inserts the string representation of the <code>long</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param l a <code>long</code>. - @param radix the radix - @return this string buffer. - */ - OStringBuffer & insert(sal_Int32 offset, sal_Int64 l, sal_Int16 radix = 10 ) - { - sal_Char sz[RTL_STR_MAX_VALUEOFINT64]; - return insert( offset, sz, rtl_str_valueOfInt64( sz, l, radix ) ); - } - - /** - Inserts the string representation of the <code>float</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param f a <code>float</code>. - @return this string buffer. - */ - OStringBuffer insert(sal_Int32 offset, float f) - { - sal_Char sz[RTL_STR_MAX_VALUEOFFLOAT]; - return insert( offset, sz, rtl_str_valueOfFloat( sz, f ) ); - } - - /** - Inserts the string representation of the <code>double</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param d a <code>double</code>. - @return this string buffer. - */ - OStringBuffer & insert(sal_Int32 offset, double d) - { - sal_Char sz[RTL_STR_MAX_VALUEOFDOUBLE]; - return insert( offset, sz, rtl_str_valueOfDouble( sz, d ) ); - } - - /** - Removes the characters in a substring of this sequence. - - The substring begins at the specified <code>start</code> and - is <code>len</code> characters long. - - start must be >= 0 && <= getLength() && <= end - - @param start The beginning index, inclusive - @param len The substring length - @return this string buffer. - */ - OStringBuffer & remove( sal_Int32 start, sal_Int32 len ) - { - rtl_stringbuffer_remove( &pData, start, len ); - return *this; - } - -#ifdef LIBO_INTERNAL_ONLY - // This is to complement the RTL_FAST_STRING operator+, which allows any combination of valid operands, - // even two buffers. It's intentional it returns OString, just like the operator+ would in the fast variant. -#ifndef RTL_FAST_STRING - /** - @internal - @since LibreOffice 4.1 - */ - friend OString operator+( const OStringBuffer& str1, const OStringBuffer& str2 ) SAL_THROW(()) - { - return OString( str1.pData ).concat( str2.pData ); - } -#endif -#endif - -private: - /** - A pointer to the data structur which contains the data. - */ - rtl_String * pData; - - /** - The len of the pData->buffer. - */ - sal_Int32 nCapacity; -}; - -#ifdef RTL_FAST_STRING -/** - @internal -*/ -template<> -struct ToStringHelper< OStringBuffer > - { - static int length( const OStringBuffer& s ) { return s.getLength(); } - static char* addData( char* buffer, const OStringBuffer& s ) { return addDataHelper( buffer, s.getStr(), s.getLength()); } - static const bool allowOStringConcat = true; - static const bool allowOUStringConcat = false; - }; -#endif - - -} - -#ifdef RTL_STRING_UNITTEST -namespace rtl -{ -typedef rtlunittest::OStringBuffer OStringBuffer; -} -#undef RTL_STRING_CONST_FUNCTION -#endif - -#ifdef RTL_USING -using ::rtl::OStringBuffer; -#endif - -#endif /* __cplusplus */ -#endif /* _RTL_STRBUF_HXX_ */ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/string.h b/sal/inc/rtl/string.h deleted file mode 100644 index 93cffa1a17b4..000000000000 --- a/sal/inc/rtl/string.h +++ /dev/null @@ -1,1408 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_STRING_H_ -#define _RTL_STRING_H_ - -#include "sal/config.h" - -#include "osl/interlck.h" -#include "rtl/textcvt.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* ======================================================================= */ - -/** Return the length of a string. - - The length is equal to the number of 8-bit characters in the string, - without the terminating NUL character. - - @param str - a null-terminated string. - - @return - the length of the sequence of characters represented by this string, - excluding the terminating NUL character. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_getLength( - const sal_Char * str ) SAL_THROW_EXTERN_C(); - -/** Compare two strings. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. Both strings must be - null-terminated. - - @param first - the first null-terminated string to be compared. - - @param second - the second null-terminated string which is compared with the first one. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_compare( - const sal_Char * first, const sal_Char * second ) SAL_THROW_EXTERN_C(); - -/** Compare two strings. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_compare_WithLength( - const sal_Char * first, sal_Int32 firstLen, const sal_Char * second, sal_Int32 secondLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings with a maximum count of characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @param shortenedLen - the maximum number of characters to compare. This length can be greater - or smaller than the lengths of the two strings. - - @return - 0 if both substrings are equal, a value less than 0 if the first substring - is less than the second substring, and a value greater than 0 if the first - substring is greater than the second substring. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_shortenedCompare_WithLength( - const sal_Char * first, sal_Int32 firstLen, const sal_Char * second, sal_Int32 secondLen, sal_Int32 shortenedLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings from back to front. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @return - 0 if both strings are equal, a value less than 0 if the first string - compares less than the second string, and a value greater than 0 if the - first string compares greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_reverseCompare_WithLength( - const sal_Char * first, sal_Int32 firstLen, const sal_Char * second, sal_Int32 secondLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings, ignoring the case of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. Both strings must be null-terminated. - - @param first - the first null-terminated string to be compared. - - @param second - the second null-terminated string which is compared with the first one. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_compareIgnoreAsciiCase( - const sal_Char * first, const sal_Char * second ) SAL_THROW_EXTERN_C(); - -/** Compare two strings, ignoring the case of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_compareIgnoreAsciiCase_WithLength( - const sal_Char * first, sal_Int32 firstLen, const sal_Char * second, sal_Int32 secondLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings with a maximum count of characters, ignoring the case - of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @param shortenedLen - the maximum number of characters to compare. This length can be greater - or smaller than the lengths of the two strings. - - @return - 0 if both substrings are equal, a value less than 0 if the first substring - is less than the second substring, and a value greater than 0 if the first - substring is greater than the second substring. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( - const sal_Char * first, sal_Int32 firstLen, const sal_Char * second, sal_Int32 secondLen, sal_Int32 shortenedLen ) SAL_THROW_EXTERN_C(); - -/** Return a hash code for a string. - - It is not allowed to store the hash code persistently, because later - versions could return other hash codes. The string must be - null-terminated. - - @param str - a null-terminated string. - - @return - a hash code for the given string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_hashCode( - const sal_Char * str ) SAL_THROW_EXTERN_C(); - -/** Return a hash code for a string. - - It is not allowed to store the hash code persistently, because later - versions could return other hash codes. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @return - a hash code for the given string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_hashCode_WithLength( - const sal_Char * str, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Search for the first occurrence of a character within a string. - - The string must be null-terminated. - - @param str - a null-terminated string. - - @param ch - the character to be searched for. - - @return - the index (starting at 0) of the first occurrence of the character in the - string, or -1 if the character does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_indexOfChar( - const sal_Char * str, sal_Char ch ) SAL_THROW_EXTERN_C(); - -/** Search for the first occurrence of a character within a string. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param ch - the character to be searched for. - - @return - the index (starting at 0) of the first occurrence of the character in the - string, or -1 if the character does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_indexOfChar_WithLength( - const sal_Char * str, sal_Int32 len, sal_Char ch ) SAL_THROW_EXTERN_C(); - -/** Search for the last occurrence of a character within a string. - - The string must be null-terminated. - - @param str - a null-terminated string. - - @param ch - the character to be searched for. - - @return - the index (starting at 0) of the last occurrence of the character in the - string, or -1 if the character does not occur. The returned value is - always smaller than the string length. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_lastIndexOfChar( - const sal_Char * str, sal_Char ch ) SAL_THROW_EXTERN_C(); - -/** Search for the last occurrence of a character within a string. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param ch - the character to be searched for. - - @return - the index (starting at 0) of the last occurrence of the character in the - string, or -1 if the character does not occur. The returned value is - always smaller than the string length. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_lastIndexOfChar_WithLength( - const sal_Char * str, sal_Int32 len, sal_Char ch ) SAL_THROW_EXTERN_C(); - -/** Search for the first occurrence of a substring within a string. - - If subStr is empty, or both str and subStr are empty, -1 is returned. - Both strings must be null-terminated. - - @param str - a null-terminated string. - - @param subStr - the null-terminated substring to be searched for. - - @return - the index (starting at 0) of the first character of the first occurrence - of the substring within the string, or -1 if the substring does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_indexOfStr( - const sal_Char * str, const sal_Char * subStr ) SAL_THROW_EXTERN_C(); - -/** Search for the first occurrence of a substring within a string. - - If subStr is empty, or both str and subStr are empty, -1 is returned. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param subStr - the substring to be searched for. Need not be null-terminated, but must - be at least as long as the specified subLen. - - @param subLen - the length of the substring. - - @return - the index (starting at 0) of the first character of the first occurrence - of the substring within the string, or -1 if the substring does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_indexOfStr_WithLength( - const sal_Char * str, sal_Int32 len, const sal_Char * subStr, sal_Int32 subLen ) SAL_THROW_EXTERN_C(); - -/** Search for the last occurrence of a substring within a string. - - If subStr is empty, or both str and subStr are empty, -1 is returned. - Both strings must be null-terminated. - - @param str - a null-terminated string. - - @param subStr - the null-terminated substring to be searched for. - - @return - the index (starting at 0) of the first character of the last occurrence - of the substring within the string, or -1 if the substring does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_lastIndexOfStr( - const sal_Char * str, const sal_Char * subStr ) SAL_THROW_EXTERN_C(); - -/** Search for the last occurrence of a substring within a string. - - If subStr is empty, or both str and subStr are empty, -1 is returned. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param subStr - the substring to be searched for. Need not be null-terminated, but must - be at least as long as the specified subLen. - - @param subLen - the length of the substring. - - @return - the index (starting at 0) of the first character of the first occurrence - of the substring within the string, or -1 if the substring does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_lastIndexOfStr_WithLength( - const sal_Char * str, sal_Int32 len, const sal_Char * subStr, sal_Int32 subLen ) SAL_THROW_EXTERN_C(); - -/** Replace all occurrences of a single character within a string. - - If oldChar does not occur within str, then the string is not modified. - The string must be null-terminated. - - @param str - a null-terminated string. - - @param oldChar - the old character. - - @param newChar - the new character. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_str_replaceChar( - sal_Char * str, sal_Char oldChar, sal_Char newChar ) SAL_THROW_EXTERN_C(); - -/** Replace all occurrences of a single character within a string. - - If oldChar does not occur within str, then the string is not modified. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param oldChar - the old character. - - @param newChar - the new character. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_str_replaceChar_WithLength( - sal_Char * str, sal_Int32 len, sal_Char oldChar, sal_Char newChar ) SAL_THROW_EXTERN_C(); - -/** Convert all ASCII uppercase letters to lowercase within a string. - - The characters with values between 65 and 90 (ASCII A--Z) are replaced - with values between 97 and 122 (ASCII a--z). The string must be - null-terminated. - - @param str - a null-terminated string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_str_toAsciiLowerCase( - sal_Char * str ) SAL_THROW_EXTERN_C(); - -/** Convert all ASCII uppercase letters to lowercase within a string. - - The characters with values between 65 and 90 (ASCII A--Z) are replaced - with values between 97 and 122 (ASCII a--z). - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_str_toAsciiLowerCase_WithLength( - sal_Char * str, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Convert all ASCII lowercase letters to uppercase within a string. - - The characters with values between 97 and 122 (ASCII a--z) are replaced - with values between 65 and 90 (ASCII A--Z). The string must be - null-terminated. - - @param str - a null-terminated string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_str_toAsciiUpperCase( - sal_Char * str ) SAL_THROW_EXTERN_C(); - -/** Convert all ASCII lowercase letters to uppercase within a string. - - The characters with values between 97 and 122 (ASCII a--z) are replaced - with values between 65 and 90 (ASCII A--Z). - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_str_toAsciiUpperCase_WithLength( - sal_Char * str, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Remove white space from both ends of a string. - - All characters with values less than or equal to 32 (the space character) - are considered to be white space. This function cannot be used for - language-specific operations. The string must be null-terminated. - - @param str - a null-terminated string. - - @return - the new length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_trim( - sal_Char * str ) SAL_THROW_EXTERN_C(); - -/** Remove white space from both ends of the string. - - All characters with values less than or equal to 32 (the space character) - are considered to be white space. This function cannot be used for - language-specific operations. The string must be null-terminated. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the original length of the string. - - @return - the new length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_trim_WithLength( - sal_Char * str, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Create the string representation of a boolean. - - If b is true, the buffer is filled with the string "true" and 5 is - returned. If b is false, the buffer is filled with the string "false" and - 6 is returned. This function cannot be used for language-specific - operations. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_STR_MAX_VALUEOFBOOLEAN define to create - a buffer that is big enough. - - @param b - a boolean value. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_valueOfBoolean( - sal_Char * str, sal_Bool b ) SAL_THROW_EXTERN_C(); -#define RTL_STR_MAX_VALUEOFBOOLEAN 6 - -/** Create the string representation of a character. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_STR_MAX_VALUEOFCHAR define to create a - buffer that is big enough. - - @param ch - a character value. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_valueOfChar( - sal_Char * str, sal_Char ch ) SAL_THROW_EXTERN_C(); -#define RTL_STR_MAX_VALUEOFCHAR 2 - -/** Create the string representation of an integer. - - This function cannot be used for language-specific operations. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_STR_MAX_VALUEOFINT32 define to create a - buffer that is big enough. - - @param i - an integer value. - - @param radix - the radix. Must be between RTL_STR_MIN_RADIX (2) and RTL_STR_MAX_RADIX - (36), inclusive. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_valueOfInt32( - sal_Char * str, sal_Int32 i, sal_Int16 radix ) SAL_THROW_EXTERN_C(); -#define RTL_STR_MIN_RADIX 2 -#define RTL_STR_MAX_RADIX 36 -#define RTL_STR_MAX_VALUEOFINT32 33 - -/** Create the string representation of a long integer. - - This function cannot be used for language-specific operations. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_STR_MAX_VALUEOFINT64 define to create a - buffer that is big enough. - - @param l - a long integer value. - - @param radix - the radix. Must be between RTL_STR_MIN_RADIX (2) and RTL_STR_MAX_RADIX - (36), inclusive. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_valueOfInt64( - sal_Char * str, sal_Int64 l, sal_Int16 radix ) SAL_THROW_EXTERN_C(); -#define RTL_STR_MAX_VALUEOFINT64 65 - -/** Create the string representation of an unsigned long integer. - - This function cannot be used for language-specific operations. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_STR_MAX_VALUEOFUINT64 define to create a - buffer that is big enough. - - @param l - a long integer value. - - @param radix - the radix. Must be between RTL_STR_MIN_RADIX (2) and RTL_STR_MAX_RADIX - (36), inclusive. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_valueOfUInt64( - sal_Char * str, sal_uInt64 l, sal_Int16 radix ) SAL_THROW_EXTERN_C(); -#define RTL_STR_MAX_VALUEOFUINT64 65 - -/** Create the string representation of a float. - - This function cannot be used for language-specific conversion. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_STR_MAX_VALUEOFFLOAT define to create a - buffer that is big enough. - - @param f - a float value. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_valueOfFloat( - sal_Char * str, float f ) SAL_THROW_EXTERN_C(); -#define RTL_STR_MAX_VALUEOFFLOAT 15 - -/** Create the string representation of a double. - - This function cannot be used for language-specific conversion. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_STR_MAX_VALUEOFDOUBLE define to create - a buffer that is big enough. - - @param d - a double value. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_valueOfDouble( - sal_Char * str, double d ) SAL_THROW_EXTERN_C(); -#define RTL_STR_MAX_VALUEOFDOUBLE 25 - -/** Interpret a string as a boolean. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @return - true if the string is "1" or "true" in any ASCII case, false otherwise. - */ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_str_toBoolean( - const sal_Char * str ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as an integer. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @param radix - the radix. Must be between RTL_STR_MIN_RADIX (2) and RTL_STR_MAX_RADIX - (36), inclusive. - - @return - the integer value represented by the string, or 0 if the string does not - represent an integer. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_toInt32( - const sal_Char * str, sal_Int16 radix ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as a long integer. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @param radix - the radix. Must be between RTL_STR_MIN_RADIX (2) and RTL_STR_MAX_RADIX - (36), inclusive. - - @return - the long integer value represented by the string, or 0 if the string does - not represent a long integer. - */ -SAL_DLLPUBLIC sal_Int64 SAL_CALL rtl_str_toInt64( - const sal_Char * str, sal_Int16 radix ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as an unsigned long integer. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @param radix - the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX - (36), inclusive. - - @return - the unsigned long integer value represented by the string, or 0 if the - string does not represent an unsigned long integer. - - @since LibreOffice 4.1 - */ -SAL_DLLPUBLIC sal_uInt64 SAL_CALL rtl_str_toUInt64( - const sal_Char * str, sal_Int16 radix ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as a float. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @return - the float value represented by the string, or 0.0 if the string does not - represent a float. - */ -SAL_DLLPUBLIC float SAL_CALL rtl_str_toFloat( - const sal_Char * str ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as a double. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @return - the float value represented by the string, or 0.0 if the string does not - represent a double. - */ -SAL_DLLPUBLIC double SAL_CALL rtl_str_toDouble( - const sal_Char * str ) SAL_THROW_EXTERN_C(); - -/* ======================================================================= */ - -#ifdef SAL_W32 -# pragma pack(push, 8) -#endif - -/** @cond INTERNAL */ -/** The implementation of a byte string. - */ -typedef struct _rtl_String -{ - oslInterlockedCount refCount; /* opaque */ - sal_Int32 length; - sal_Char buffer[1]; -} rtl_String; -/** @endcond */ - -#if defined(SAL_W32) -#pragma pack(pop) -#endif - -/* ----------------------------------------------------------------------- */ - -/** Increment the reference count of a string. - - @param str - a string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_acquire( rtl_String * str ) SAL_THROW_EXTERN_C(); - -/** Decrement the reference count of a string. - - If the count goes to zero than the string data is deleted. - - @param str - a string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_release( rtl_String * str ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string containing no characters. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_new( rtl_String ** newStr ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string containing space for a given number of characters. - - The reference count of the new string will be 1. The length of the string - will be nLen. This function does not handle out-of-memory conditions. - - For nLen < 0 or failed allocation this method returns NULL. - - The characters of the capacity are not cleared, and the length is set to - nLen, unlike the similar method of rtl_String_new_WithLength which - zeros out the buffer, and sets the length to 0. So should be somewhat - more efficient for allocating a new string. - - call rtl_String_release to release the string - alternatively pass ownership to an OUString with - rtl::OUString(newStr, SAL_NO_ACQUIRE); - - @param[out] nLen the number of characters. - @return pointer to the new string. - - @since LibreOffice 4.1 - */ -SAL_DLLPUBLIC rtl_String * SAL_CALL rtl_string_alloc(sal_Int32 nLen) SAL_THROW_EXTERN_C(); - -/** Allocate a new string containing space for a given number of characters. - - If len is greater than zero, the reference count of the new string will be - 1. The values of all characters are set to 0 and the length of the string - is 0. This function does not handle out-of-memory conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param len - the number of characters. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_new_WithLength( rtl_String ** newStr, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string that contains a copy of another string. - - If the length of value is greater than zero, the reference count of the - new string will be 1. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param value - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newFromString( rtl_String ** newStr, const rtl_String * value ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string that contains a copy of a character array. - - If the length of value is greater than zero, the reference count of the - new string will be 1. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param value - a null-terminated character array. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newFromStr( rtl_String ** newStr, const sal_Char * value ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string that contains a copy of a character array. - - If the length of value is greater than zero, the reference count of the - new string will be 1. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param value - a character array. Need not be null-terminated, but must be at least as - long as the specified len. - - @param len - the length of the character array. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newFromStr_WithLength( rtl_String ** newStr, const sal_Char * value, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string that is a substring of this string. - - The substring begins at the specified beginIndex and contains count - characters. Meaningless combinations such as negative beginIndex, - or beginIndex + count greater than the length of the string have - undefined behaviour. - - @param[out] newStr the specified substring. - @param[in] from the String to take the substring from. - @param[in] beginIndex the beginning index, inclusive. - @param[in] count the number of characters. - - @since LibreOffice 4.0 - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newFromSubString( - rtl_String ** newStr, const rtl_String * from, - sal_Int32 beginIndex, sal_Int32 count ) SAL_THROW_EXTERN_C(); - -/** - @internal - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newFromLiteral( rtl_String ** newStr, const sal_Char * value, sal_Int32 len, sal_Int32 allocExtra ) SAL_THROW_EXTERN_C(); - -/** Assign a new value to a string. - - First releases any value str might currently hold, then acquires - rightValue. - - @param str - pointer to the string. The pointed-to data must be null or a valid - string. - - @param rightValue - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_assign( rtl_String ** str, rtl_String * rightValue ) SAL_THROW_EXTERN_C(); - -/** Return the length of a string. - - The length is equal to the number of characters in the string. - - @param str - a valid string. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_string_getLength( const rtl_String * str ) SAL_THROW_EXTERN_C(); - -/** Return a pointer to the underlying character array of a string. - - @param str - a valid string. - - @return - a pointer to the null-terminated character array. - */ -SAL_DLLPUBLIC sal_Char * SAL_CALL rtl_string_getStr( rtl_String * str ) SAL_THROW_EXTERN_C(); - -/** Create a new string that is the concatenation of two other strings. - - The new string does not necessarily have a reference count of 1 (in cases - where one of the two other strings is empty), so it must not be modified - without checking the reference count. This function does not handle - out-of-memory conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param left - a valid string. - - @param right - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newConcat( rtl_String ** newStr, rtl_String * left, rtl_String * right ) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing a substring of another string. - - The new string results from replacing a number of characters (count), - starting at the specified position (index) in the original string (str), - with some new substring (subStr). If subStr is null, than only a number - of characters is deleted. - - The new string does not necessarily have a reference count of 1, so it - must not be modified without checking the reference count. This function - does not handle out-of-memory conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - - @param idx - the index into str at which to start replacement. Must be between 0 and - the length of str, inclusive. - - @param count - the number of characters to remove. Must not be negative, and the sum of - index and count must not exceed the length of str. - - @param subStr - either null or a valid string to be inserted. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newReplaceStrAt( - rtl_String ** newStr, rtl_String * str, sal_Int32 idx, sal_Int32 count, rtl_String * subStr ) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing all occurrences of a single character - within another string. - - The new string results from replacing all occurrences of oldChar in str - with newChar. - - The new string does not necessarily have a reference count of 1 (in cases - where oldChar does not occur in str), so it must not be modified without - checking the reference count. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - - @param oldChar - the old character. - - @param newChar - the new character. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newReplace( - rtl_String ** newStr, rtl_String * str, sal_Char oldChar, sal_Char newChar ) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing the first occurrence of a given substring - with another substring. - - @param[in, out] newStr pointer to the new string; must not be null; must - point to null or a valid rtl_String - - @param str pointer to the original string; must not be null - - @param from pointer to the substring to be replaced; must not be null and - must point to memory of at least \p fromLength bytes - - @param fromLength the length of the \p from substring; must be non-negative - - @param to pointer to the replacing substring; must not be null and must - point to memory of at least \p toLength bytes - - @param toLength the length of the \p to substring; must be non-negative - - @param[in,out] index pointer to a start index, must not be null; upon entry - to the function its value is the index into the original string at which to - start searching for the \p from substring, the value must be non-negative - and not greater than the original string's length; upon exit from the - function its value is the index into the original string at which the - replacement took place or -1 if no replacement took place - - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newReplaceFirst( - rtl_String ** newStr, rtl_String * str, char const * from, - sal_Int32 fromLength, char const * to, sal_Int32 toLength, - sal_Int32 * index) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing all occurrences of a given substring with - another substring. - - Replacing subsequent occurrences picks up only after a given replacement. - That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx". - - @param[in, out] newStr pointer to the new string; must not be null; must - point to null or a valid rtl_String - - @param str pointer to the original string; must not be null - - @param from pointer to the substring to be replaced; must not be null and - must point to memory of at least \p fromLength bytes - - @param fromLength the length of the \p from substring; must be non-negative - - @param to pointer to the replacing substring; must not be null and must - point to memory of at least \p toLength bytes - - @param toLength the length of the \p to substring; must be non-negative - - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newReplaceAll( - rtl_String ** newStr, rtl_String * str, char const * from, - sal_Int32 fromLength, char const * to, sal_Int32 toLength) - SAL_THROW_EXTERN_C(); - -/** Create a new string by converting all ASCII uppercase letters to lowercase - within another string. - - The new string results from replacing all characters with values between - 65 and 90 (ASCII A--Z) by values between 97 and 122 (ASCII a--z). - - This function cannot be used for language-specific conversion. The new - string does not necessarily have a reference count of 1 (in cases where - no characters need to be converted), so it must not be modified without - checking the reference count. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newToAsciiLowerCase( - rtl_String ** newStr, rtl_String * str ) SAL_THROW_EXTERN_C(); - -/** Create a new string by converting all ASCII lowercase letters to uppercase - within another string. - - The new string results from replacing all characters with values between - 97 and 122 (ASCII a--z) by values between 65 and 90 (ASCII A--Z). - - This function cannot be used for language-specific conversion. The new - string does not necessarily have a reference count of 1 (in cases where - no characters need to be converted), so it must not be modified without - checking the reference count. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newToAsciiUpperCase( - rtl_String ** newStr, rtl_String * str ) SAL_THROW_EXTERN_C(); - -/** Create a new string by removing white space from both ends of another - string. - - The new string results from removing all characters with values less than - or equal to 32 (the space character) form both ends of str. - - This function cannot be used for language-specific conversion. The new - string does not necessarily have a reference count of 1 (in cases where - no characters need to be removed), so it must not be modified without - checking the reference count. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_newTrim( - rtl_String ** newStr, rtl_String * str ) SAL_THROW_EXTERN_C(); - -/** Create a new string by extracting a single token from another string. - - Starting at index, the token's next token is searched for. If there is no - such token, the result is an empty string. Otherwise, all characters from - the start of that token and up to, but not including the next occurrence - of cTok make up the resulting token. The return value is the position of - the next token, or -1 if no more tokens follow. - - Example code could look like - rtl_String * pToken = NULL; - sal_Int32 nIndex = 0; - do - { - ... - nIndex = rtl_string_getToken(&pToken, pStr, 0, ';', nIndex); - ... - } - while (nIndex >= 0); - - The new string does not necessarily have a reference count of 1, so it - must not be modified without checking the reference count. This function - does not handle out-of-memory conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. If either token or index is negative, an empty token is stored in - newStr (and -1 is returned). - - @param str - a valid string. - - @param token - the number of the token to return, starting at index. - - @param cTok - the character that seperates the tokens. - - @param idx - the position at which searching for the token starts. Must not be greater - than the length of str. - - @return - the index of the next token, or -1 if no more tokens follow. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_string_getToken( - rtl_String ** newStr , rtl_String * str, sal_Int32 token, sal_Char cTok, sal_Int32 idx ) SAL_THROW_EXTERN_C(); - -/* ======================================================================= */ - -/** Supply an ASCII string literal together with its length. - - This macro can be used to compute (some of) the arguments in function calls - like rtl::OString(RTL_CONSTASCII_STRINGPARAM("foo")) or - rtl::OUString::equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("foo")). - - @param constAsciiStr - must be an expression of type "(possibly cv-qualified reference to) array of - (possibly cv-qualified) char." Each element of the referenced array must - represent an ASCII value in the range 0x00--0x7F. The last element of the - referenced array is not considered part of the represented ASCII string, and - its value should be 0x00. Depending on where this macro is used, the nature - of the supplied expression might be further restricted. -*/ -// The &foo[0] trick is intentional, it makes sure the type is char* or const char* -// (plain cast to const char* would not work with non-const char foo[]="a", which seems to be allowed). -// This is to avoid mistaken use with functions that accept string literals -// (i.e. const char (&)[N]) where usage of this macro otherwise could match -// the argument and a following int argument with a default value (e.g. OString::match()). -#define RTL_CONSTASCII_STRINGPARAM( constAsciiStr ) (&(constAsciiStr)[0]), \ - ((sal_Int32)SAL_N_ELEMENTS(constAsciiStr)-1) - -/** Supply the length of an ASCII string literal. - - This macro can be used to compute arguments in function calls like - rtl::OUString::match(other, RTL_CONSTASCII_LENGTH("prefix")). - - @param constAsciiStr - must be an expression of type "(possibly cv-qualified reference to) array of - (possibly cv-qualified) char." Each element of the referenced array must - represent an ASCII value in the range 0x00--0x7F. The last element of the - referenced array is not considered part of the represented ASCII string, and - its value should be 0x00. Depending on where this macro is used, the nature - of the supplied expression might be further restricted. -*/ -#define RTL_CONSTASCII_LENGTH( constAsciiStr ) ((sal_Int32)(SAL_N_ELEMENTS(constAsciiStr)-1)) - -/* ======================================================================= */ - -/* predefined constants for String-Conversion */ -#define OUSTRING_TO_OSTRING_CVTFLAGS (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT |\ - RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT |\ - RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE |\ - RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0 |\ - RTL_UNICODETOTEXT_FLAGS_NOCOMPOSITE) - -/* ----------------------------------------------------------------------- */ - -/** Create a new byte string by converting a Unicode string, using a specific - text encoding. - - The lengths of the byte string and the Unicode string may differ (e.g., - for double-byte encodings, UTF-7, UTF-8). - - If the length of the Unicode string is greater than zero, the reference - count of the new string will be 1. - - If an out-of-memory condition occurs, newStr will point to a null pointer - upon return. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a Unicode character array. Need not be null-terminated, but must be at - least as long as the specified len. - - @param len - the length of the Unicode character array. - - @param encoding - the text encoding to use for conversion. - - @param convertFlags - flags which control the conversion. Either use - OUSTRING_TO_OSTRING_CVTFLAGS, or see - <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more - details. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString2String( - rtl_String ** newStr, const sal_Unicode * str, sal_Int32 len, rtl_TextEncoding encoding, sal_uInt32 convertFlags ) SAL_THROW_EXTERN_C(); - -/** - Converts a Unicode string to a byte string, signalling failure. - - @param pTarget - An out parameter receiving the converted string. Must not be null itself, and - must contain either null or a pointer to a valid rtl_String; the contents are - not modified if conversion fails (rtl_convertUStringToString returns false). - - @param pSource - The Unicode string. May only be null if nLength is zero. - - @param nLength - The length of the Unicode string. Must be non-negative. - - @param nEncoding - The text encoding to convert into. Must be an octet encoding (i.e., - rtl_isOctetTextEncoding(nEncoding) must return true). - - @param nFlags - A combination of RTL_UNICODETOTEXT_FLAGS that detail how to do the conversion - (see rtl_convertUnicodeToText). RTL_UNICODETOTEXT_FLAGS_FLUSH need not be - included, it is implicitly assumed. Typical uses are either - RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | - RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR (fail if a Unicode character cannot be - converted to the target nEncoding) or OUSTRING_TO_OSTRING_CVTFLAGS (make a - best efforts conversion). - - @return - True if the conversion succeeded, false otherwise. - */ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_convertUStringToString( - rtl_String ** pTarget, - sal_Unicode const * pSource, - sal_Int32 nLength, - rtl_TextEncoding nEncoding, - sal_uInt32 nFlags) - SAL_THROW_EXTERN_C(); - -/** Ensure a string has enough space for a given number of characters. - - If the given string is large enough and has refcount of 1, it is not altered in any way. - Otherwise it is replaced by a copy that has enough space for the given number of characters, - data from the source string is copied to the beginning of it, the content of the remaining - capacity undefined, the string has refcount of 1, and refcount of the original string is decreased. - - @param str - pointer to the string. The pointed-to data must be a valid string. - - @param size - the number of characters - - @since LibreOffice 4.1 - @internal - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string_ensureCapacity( rtl_String ** str, sal_Int32 size ) SAL_THROW_EXTERN_C(); - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_STRING_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/string.hxx b/sal/inc/rtl/string.hxx deleted file mode 100644 index e3d5afbc895a..000000000000 --- a/sal/inc/rtl/string.hxx +++ /dev/null @@ -1,1709 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_STRING_HXX_ -#define _RTL_STRING_HXX_ - -#include "sal/config.h" - -#include <cassert> -#include <ostream> -#include <string.h> - -#include <osl/diagnose.h> -#include <rtl/textenc.h> -#include <rtl/string.h> -#include <rtl/stringutils.hxx> - -#ifdef RTL_FAST_STRING -#include <rtl/stringconcat.hxx> -#endif - -#include "sal/log.hxx" - -#if !defined EXCEPTIONS_OFF -#include <new> -#endif - -// The unittest uses slightly different code to help check that the proper -// calls are made. The class is put into a different namespace to make -// sure the compiler generates a different (if generating also non-inline) -// copy of the function and does not merge them together. The class -// is "brought" into the proper rtl namespace by a typedef below. -#ifdef RTL_STRING_UNITTEST -#define rtl rtlunittest -#endif - -namespace rtl -{ - -#ifdef RTL_STRING_UNITTEST -#undef rtl -// helper macro to make functions appear more readable -#define RTL_STRING_CONST_FUNCTION rtl_string_unittest_const_literal_function = true; -#else -#define RTL_STRING_CONST_FUNCTION -#endif - -/* ======================================================================= */ - -/** - This String class provide base functionality for C++ like 8-Bit - character array handling. The advantage of this class is, that it - handle all the memory managament for you - and it do it - more efficient. If you assign a string to another string, the - data of both strings are shared (without any copy operation or - memory allocation) as long as you do not change the string. This class - stores also the length of the string, so that many operations are - faster as the C-str-functions. - - This class provide only readonly string handling. So you could create - a string and you could only query the content from this string. - It provide also functionality to change the string, but this results - in every case in a new string instance (in the most cases with an - memory allocation). You don't have functionality to change the - content of the string. If you want change the string content, than - you should us the OStringBuffer class, which provide these - functionality and avoid to much memory allocation. - - The design of this class is similar to the string classes in Java - and so more people should have fewer understanding problems when they - use this class. -*/ - -class SAL_WARN_UNUSED OString -{ -public: - /// @cond INTERNAL - rtl_String * pData; - /// @endcond - -private: - class DO_NOT_ACQUIRE; - - OString( rtl_String * value, SAL_UNUSED_PARAMETER DO_NOT_ACQUIRE * ) - { - pData = value; - } - -public: - /** - New string containing no characters. - */ - OString() SAL_THROW(()) - { - pData = 0; - rtl_string_new( &pData ); - } - - /** - New string from OString. - - @param str a OString. - */ - OString( const OString & str ) SAL_THROW(()) - { - pData = str.pData; - rtl_string_acquire( pData ); - } - - /** - New string from OString data. - - @param str a OString data. - */ - OString( rtl_String * str ) SAL_THROW(()) - { - pData = str; - rtl_string_acquire( pData ); - } - - /** New string from OString data without acquiring it. Takeover of ownership. - - The SAL_NO_ACQUIRE dummy parameter is only there to distinguish this - from other constructors. - - @param str a OString data. - */ - inline OString( rtl_String * str, __sal_NoAcquire ) SAL_THROW(()) - { - pData = str; - } - - /** - New string from a single character. - - @param value a character. - */ - explicit OString( sal_Char value ) SAL_THROW(()) - : pData (0) - { - rtl_string_newFromStr_WithLength( &pData, &value, 1 ); - } - - /** - New string from a character buffer array. - - Note: The argument type is always either char* or const char*. The template is - used only for technical reasons, as is the second argument. - - @param value a NULL-terminated character array. - */ - template< typename T > - OString( const T& value, typename internal::CharPtrDetector< T, internal::Dummy >::Type = internal::Dummy() ) SAL_THROW(()) - { - pData = 0; - rtl_string_newFromStr( &pData, value ); - } - - template< typename T > - OString( T& value, typename internal::NonConstCharArrayDetector< T, internal::Dummy >::Type = internal::Dummy() ) SAL_THROW(()) - { - pData = 0; - rtl_string_newFromStr( &pData, value ); - } - - /** - New string from a string literal. - - If there are any embedded \0's in the string literal, the result is undefined. - Use the overload that explicitly accepts length. - - @since LibreOffice 3.6 - - @param literal a string literal - */ - template< typename T > - OString( T& literal, typename internal::ConstCharArrayDetector< T, internal::Dummy >::Type = internal::Dummy() ) SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - pData = 0; - if( internal::ConstCharArrayDetector< T, void >::size - 1 == 0 ) // empty string - rtl_string_new( &pData ); - else - rtl_string_newFromLiteral( &pData, literal, internal::ConstCharArrayDetector< T, void >::size - 1, 0 ); -#ifdef RTL_STRING_UNITTEST - rtl_string_unittest_const_literal = true; -#endif - } - - /** - New string from a character buffer array. - - @param value a character array. - @param length the number of character which should be copied. - The character array length must be greater or - equal than this value. - */ - OString( const sal_Char * value, sal_Int32 length ) SAL_THROW(()) - { - pData = 0; - rtl_string_newFromStr_WithLength( &pData, value, length ); - } - - /** - New string from a Unicode character buffer array. - - @param value a Unicode character array. - @param length the number of character which should be converted. - The Unicode character array length must be - greater or equal than this value. - @param encoding the text encoding in which the Unicode character - sequence should be converted. - @param convertFlags flags which controls the conversion. - see RTL_UNICODETOTEXT_FLAGS_... - - @exception std::bad_alloc is thrown if an out-of-memory condition occurs - */ - OString( const sal_Unicode * value, sal_Int32 length, - rtl_TextEncoding encoding, - sal_uInt32 convertFlags = OUSTRING_TO_OSTRING_CVTFLAGS ) - { - pData = 0; - rtl_uString2String( &pData, value, length, encoding, convertFlags ); - if (pData == 0) { -#if defined EXCEPTIONS_OFF - abort(); -#else - throw std::bad_alloc(); -#endif - } - } - -#ifdef RTL_FAST_STRING - /** - @overload - @internal - */ - template< typename T1, typename T2 > - OString( const OStringConcat< T1, T2 >& c ) - { - const sal_Int32 l = c.length(); - pData = rtl_string_alloc( l ); - if (l != 0) - { - char* end = c.addData( pData->buffer ); - pData->length = end - pData->buffer; - *end = '\0'; - } - } -#endif - - /** - Release the string data. - */ - ~OString() SAL_THROW(()) - { - rtl_string_release( pData ); - } - - /** - Assign a new string. - - @param str a OString. - */ - OString & operator=( const OString & str ) SAL_THROW(()) - { - rtl_string_assign( &pData, str.pData ); - return *this; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, OString& >::Type operator=( T& literal ) SAL_THROW(()) - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - if( internal::ConstCharArrayDetector< T, void >::size - 1 == 0 ) // empty string - rtl_string_new( &pData ); - else - rtl_string_newFromLiteral( &pData, literal, internal::ConstCharArrayDetector< T, void >::size - 1, 0 ); - return *this; - } - - /** - Append a string to this string. - - @param str a OString. - */ - OString & operator+=( const OString & str ) SAL_THROW(()) - { - rtl_string_newConcat( &pData, pData, str.pData ); - return *this; - } - -#ifdef RTL_FAST_STRING - /** - @overload - @internal - */ - template< typename T1, typename T2 > - OString& operator+=( const OStringConcat< T1, T2 >& c ) - { - const int l = c.length(); - if( l == 0 ) - return *this; - rtl_string_ensureCapacity( &pData, pData->length + l ); - char* end = c.addData( pData->buffer + pData->length ); - *end = '\0'; - pData->length = end - pData->buffer; - return *this; - } -#endif - /** - Returns the length of this string. - - The length is equal to the number of characters in this string. - - @return the length of the sequence of characters represented by this - object. - */ - sal_Int32 getLength() const SAL_THROW(()) { return pData->length; } - - /** - Checks if a string is empty. - - @return true if the string is empty; - false, otherwise. - - @since LibreOffice 3.4 - */ - bool isEmpty() const SAL_THROW(()) - { - return pData->length == 0; - } - - /** - Returns a pointer to the characters of this string. - - <p>The returned pointer is guaranteed to point to a null-terminated byte - string. But note that this string object may contain embedded null - characters, which will thus also be embedded in the returned - null-terminated byte string.</p> - - @return a pointer to a null-terminated byte string representing the - characters of this string object. - */ - const sal_Char * getStr() const SAL_THROW(()) { return pData->buffer; } - - /** - Access to individual characters. - - @param index must be non-negative and less than length. - - @return the character at the given index. - - @since LibreOffice 3.5 - */ - sal_Char operator [](sal_Int32 index) const { - assert(index >= 0 && index <= getLength()); - //TODO: should really check for < getLength(), but there is quite - // some clever code out there that violates this function's - // documented precondition and relies on s[s.getLength()] == 0 and - // that would need to be fixed first - return getStr()[index]; - } - - /** - Compares two strings. - - The comparison is based on the numeric value of each character in - the strings and return a value indicating their relationship. - This function can't be used for language specific sorting. - - @param str the object to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - */ - sal_Int32 compareTo( const OString & str ) const SAL_THROW(()) - { - return rtl_str_compare_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ); - } - - /** - Compares two strings with an maximum count of characters. - - The comparison is based on the numeric value of each character in - the strings and return a value indicating their relationship. - This function can't be used for language specific sorting. - - @param rObj the object to be compared. - @param maxLength the maximum count of characters to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - */ - sal_Int32 compareTo( const OString & rObj, sal_Int32 maxLength ) const SAL_THROW(()) - { - return rtl_str_shortenedCompare_WithLength( pData->buffer, pData->length, - rObj.pData->buffer, rObj.pData->length, maxLength ); - } - - /** - Compares two strings in reverse order. - - The comparison is based on the numeric value of each character in - the strings and return a value indicating their relationship. - This function can't be used for language specific sorting. - - @param str the object to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - */ - sal_Int32 reverseCompareTo( const OString & str ) const SAL_THROW(()) - { - return rtl_str_reverseCompare_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ); - } - - /** - Perform a comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string. - This function can't be used for language specific comparison. - - @param str the object to be compared. - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equals( const OString & str ) const SAL_THROW(()) - { - if ( pData->length != str.pData->length ) - return sal_False; - if ( pData == str.pData ) - return sal_True; - return rtl_str_reverseCompare_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ) == 0; - } - - /** - Perform a comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string. - The ASCII string must be NULL-terminated and must be greater or - equal as length. - This function can't be used for language specific comparison. - - - @param value a character array. - @param length the length of the character array. - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equalsL( const sal_Char* value, sal_Int32 length ) const SAL_THROW(()) - { - if ( pData->length != length ) - return sal_False; - - return rtl_str_reverseCompare_WithLength( pData->buffer, pData->length, - value, length ) == 0; - } - - /** - Perform a ASCII lowercase comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string, - ignoring the case. - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - This function can't be used for language specific comparison. - - @param str the object to be compared. - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equalsIgnoreAsciiCase( const OString & str ) const SAL_THROW(()) - { - if ( pData->length != str.pData->length ) - return sal_False; - if ( pData == str.pData ) - return sal_True; - return rtl_str_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ) == 0; - } - - /** - Perform a ASCII lowercase comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string, - ignoring the case. - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated. - This function can't be used for language specific comparison. - - Note: The argument type is always either char* or const char*, the return type is bool. - The template is used only for technical reasons. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - template< typename T > - typename internal::CharPtrDetector< T, bool >::Type equalsIgnoreAsciiCase( const T& asciiStr ) const SAL_THROW(()) - { - return rtl_str_compareIgnoreAsciiCase( pData->buffer, asciiStr ) == 0; - } - - template< typename T > - typename internal::NonConstCharArrayDetector< T, bool >::Type equalsIgnoreAsciiCase( T& asciiStr ) const SAL_THROW(()) - { - return rtl_str_compareIgnoreAsciiCase( pData->buffer, asciiStr ) == 0; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type equalsIgnoreAsciiCase( T& literal ) const SAL_THROW(()) - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - if ( pData->length != internal::ConstCharArrayDetector< T, void >::size - 1 ) - return false; - return rtl_str_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, - literal, internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; - } - - /** - Perform a ASCII lowercase comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string, - ignoring the case. - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be greater or equal in length as asciiStrLength. - This function can't be used for language specific comparison. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @param asciiStrLength the length of the ascii string - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equalsIgnoreAsciiCaseL( const sal_Char * asciiStr, sal_Int32 asciiStrLength ) const SAL_THROW(()) - { - if ( pData->length != asciiStrLength ) - return sal_False; - - return rtl_str_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, - asciiStr, asciiStrLength ) == 0; - } - - /** - Match against a substring appearing in this string. - - The result is true if and only if the second string appears as a substring - of this string, at the given position. - This function can't be used for language specific comparison. - - @param str the object (substring) to be compared. - @param fromIndex the index to start the comparion from. - The index must be greater or equal than 0 - and less or equal as the string length. - @return sal_True if str match with the characters in the string - at the given position; - sal_False, otherwise. - */ - sal_Bool match( const OString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - return rtl_str_shortenedCompare_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - str.pData->buffer, str.pData->length, str.pData->length ) == 0; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type match( T& literal, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_str_shortenedCompare_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, - literal, internal::ConstCharArrayDetector< T, void >::size - 1, internal::ConstCharArrayDetector< T, void >::size - 1) == 0; - } - - /** - Match against a substring appearing in this string. - - @param str the substring to be compared; must not be null and must point - to memory of at least strLength bytes - - @param strLength the length of the substring; must be non-negative - - @param fromIndex the index into this string to start the comparison at; - must be non-negative and not greater than this string's length - - @return true if and only if the given str is contained as a substring of - this string at the given fromIndex - - @since LibreOffice 3.6 - */ - bool matchL( - char const * str, sal_Int32 strLength, sal_Int32 fromIndex = 0) - const - { - return rtl_str_shortenedCompare_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, - str, strLength, strLength) == 0; - } - - // This overload is left undefined, to detect calls of matchL that - // erroneously use RTL_CONSTASCII_USTRINGPARAM instead of - // RTL_CONSTASCII_STRINGPARAM (but would lead to ambiguities on 32 bit - // platforms): -#if SAL_TYPES_SIZEOFLONG == 8 - void matchL(char const *, sal_Int32, rtl_TextEncoding) const; -#endif - - /** - Match against a substring appearing in this string, ignoring the case of - ASCII letters. - - The result is true if and only if the second string appears as a substring - of this string, at the given position. - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - This function can't be used for language specific comparison. - - @param str the object (substring) to be compared. - @param fromIndex the index to start the comparion from. - The index must be greater or equal than 0 - and less or equal as the string length. - @return sal_True if str match with the characters in the string - at the given position; - sal_False, otherwise. - */ - sal_Bool matchIgnoreAsciiCase( const OString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - return rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - str.pData->buffer, str.pData->length, - str.pData->length ) == 0; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type matchIgnoreAsciiCase( T& literal, sal_Int32 fromIndex = 0 ) const - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - literal, internal::ConstCharArrayDetector< T, void >::size - 1, internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; - } - - /** - Check whether this string starts with a given substring. - - @param str the substring to be compared - - @return true if and only if the given str appears as a substring at the - start of this string - - @since LibreOffice 4.0 - */ - bool startsWith(OString const & str) const { - return match(str, 0); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 4.0 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type startsWith( T& literal ) const - { - RTL_STRING_CONST_FUNCTION - return match(literal, 0); - } - - /** - Check whether this string ends with a given substring. - - @param str the substring to be compared - - @return true if and only if the given str appears as a substring at the - end of this string - - @since LibreOffice 3.6 - */ - bool endsWith(OString const & str) const { - return str.getLength() <= getLength() - && match(str, getLength() - str.getLength()); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type endsWith( T& literal ) const - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return internal::ConstCharArrayDetector< T, void >::size - 1 <= getLength() - && match(literal, getLength() - ( internal::ConstCharArrayDetector< T, void >::size - 1 )); - } - - /** - Check whether this string ends with a given substring. - - @param str the substring to be compared; must not be null and must point - to memory of at least strLength bytes - - @param strLength the length of the substring; must be non-negative - - @return true if and only if the given str appears as a substring at the - end of this string - - @since LibreOffice 3.6 - */ - bool endsWithL(char const * str, sal_Int32 strLength) const { - return strLength <= getLength() - && matchL(str, strLength, getLength() - strLength); - } - - friend sal_Bool operator == ( const OString& rStr1, const OString& rStr2 ) SAL_THROW(()) - { return rStr1.equals(rStr2); } - friend sal_Bool operator != ( const OString& rStr1, const OString& rStr2 ) SAL_THROW(()) - { return !(operator == ( rStr1, rStr2 )); } - friend sal_Bool operator < ( const OString& rStr1, const OString& rStr2 ) SAL_THROW(()) - { return rStr1.compareTo( rStr2 ) < 0; } - friend sal_Bool operator > ( const OString& rStr1, const OString& rStr2 ) SAL_THROW(()) - { return rStr1.compareTo( rStr2 ) > 0; } - friend sal_Bool operator <= ( const OString& rStr1, const OString& rStr2 ) SAL_THROW(()) - { return rStr1.compareTo( rStr2 ) <= 0; } - friend sal_Bool operator >= ( const OString& rStr1, const OString& rStr2 ) SAL_THROW(()) - { return rStr1.compareTo( rStr2 ) >= 0; } - - template< typename T > - friend typename internal::CharPtrDetector< T, bool >::Type operator==( const OString& rStr1, const T& value ) SAL_THROW(()) - { - return rStr1.compareTo( value ) == 0; - } - - template< typename T > - friend typename internal::NonConstCharArrayDetector< T, bool >::Type operator==( const OString& rStr1, T& value ) SAL_THROW(()) - { - return rStr1.compareTo( value ) == 0; - } - - template< typename T > - friend typename internal::CharPtrDetector< T, bool >::Type operator==( const T& value, const OString& rStr2 ) SAL_THROW(()) - { - return rStr2.compareTo( value ) == 0; - } - - template< typename T > - friend typename internal::NonConstCharArrayDetector< T, bool >::Type operator==( T& value, const OString& rStr2 ) SAL_THROW(()) - { - return rStr2.compareTo( value ) == 0; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - friend typename internal::ConstCharArrayDetector< T, bool >::Type operator==( const OString& rStr, T& literal ) SAL_THROW(()) - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return rStr.getLength() == internal::ConstCharArrayDetector< T, void >::size - 1 - && rtl_str_compare_WithLength( rStr.pData->buffer, rStr.pData->length, literal, - internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - friend typename internal::ConstCharArrayDetector< T, bool >::Type operator==( T& literal, const OString& rStr ) SAL_THROW(()) - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return rStr.getLength() == internal::ConstCharArrayDetector< T, void >::size - 1 - && rtl_str_compare_WithLength( rStr.pData->buffer, rStr.pData->length, literal, - internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; - } - - template< typename T > - friend typename internal::CharPtrDetector< T, bool >::Type operator!=( const OString& rStr1, const T& value ) SAL_THROW(()) - { - return !(operator == ( rStr1, value )); - } - - template< typename T > - friend typename internal::NonConstCharArrayDetector< T, bool >::Type operator!=( const OString& rStr1, T& value ) SAL_THROW(()) - { - return !(operator == ( rStr1, value )); - } - - template< typename T > - friend typename internal::CharPtrDetector< T, bool >::Type operator!=( const T& value, const OString& rStr2 ) SAL_THROW(()) - { - return !(operator == ( value, rStr2 )); - } - - template< typename T > - friend typename internal::NonConstCharArrayDetector< T, bool >::Type operator!=( T& value, const OString& rStr2 ) SAL_THROW(()) - { - return !(operator == ( value, rStr2 )); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - friend typename internal::ConstCharArrayDetector< T, bool >::Type operator!=( const OString& rStr, T& literal ) SAL_THROW(()) - { - return !( rStr == literal ); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - friend typename internal::ConstCharArrayDetector< T, bool >::Type operator!=( T& literal, const OString& rStr ) SAL_THROW(()) - { - return !( literal == rStr ); - } - - /** - Returns a hashcode for this string. - - @return a hash code value for this object. - - @see rtl::OStringHash for convenient use of boost::unordered_map - */ - sal_Int32 hashCode() const SAL_THROW(()) - { - return rtl_str_hashCode_WithLength( pData->buffer, pData->length ); - } - - /** - Returns the index within this string of the first occurrence of the - specified character, starting the search at the specified index. - - @param ch character to be located. - @param fromIndex the index to start the search from. - The index must be greater or equal than 0 - and less or equal as the string length. - @return the index of the first occurrence of the character in the - character sequence represented by this string that is - greater than or equal to fromIndex, or - -1 if the character does not occur. - */ - sal_Int32 indexOf( sal_Char ch, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - sal_Int32 ret = rtl_str_indexOfChar_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, ch ); - return (ret < 0 ? ret : ret+fromIndex); - } - - /** - Returns the index within this string of the last occurrence of the - specified character, searching backward starting at the end. - - @param ch character to be located. - @return the index of the last occurrence of the character in the - character sequence represented by this string, or - -1 if the character does not occur. - */ - sal_Int32 lastIndexOf( sal_Char ch ) const SAL_THROW(()) - { - return rtl_str_lastIndexOfChar_WithLength( pData->buffer, pData->length, ch ); - } - - /** - Returns the index within this string of the last occurrence of the - specified character, searching backward starting before the specified - index. - - @param ch character to be located. - @param fromIndex the index before which to start the search. - @return the index of the last occurrence of the character in the - character sequence represented by this string that - is less than fromIndex, or -1 - if the character does not occur before that point. - */ - sal_Int32 lastIndexOf( sal_Char ch, sal_Int32 fromIndex ) const SAL_THROW(()) - { - return rtl_str_lastIndexOfChar_WithLength( pData->buffer, fromIndex, ch ); - } - - /** - Returns the index within this string of the first occurrence of the - specified substring, starting at the specified index. - - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @param str the substring to search for. - @param fromIndex the index to start the search from. - @return If the string argument occurs one or more times as a substring - within this string at the starting index, then the index - of the first character of the first such substring is - returned. If it does not occur as a substring starting - at fromIndex or beyond, -1 is returned. - */ - sal_Int32 indexOf( const OString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - sal_Int32 ret = rtl_str_indexOfStr_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - str.pData->buffer, str.pData->length ); - return (ret < 0 ? ret : ret+fromIndex); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, sal_Int32 >::Type indexOf( T& literal, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - sal_Int32 n = rtl_str_indexOfStr_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, literal, internal::ConstCharArrayDetector< T, void >::size - 1); - return n < 0 ? n : n + fromIndex; - } - - /** - Returns the index within this string of the first occurrence of the - specified substring, starting at the specified index. - - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @param str the substring to search for. - @param len the length of the substring. - @param fromIndex the index to start the search from. - @return If the string argument occurs one or more times as a substring - within this string at the starting index, then the index - of the first character of the first such substring is - returned. If it does not occur as a substring starting - at fromIndex or beyond, -1 is returned. - - @since LibreOffice 3.6 - */ - sal_Int32 indexOfL(char const * str, sal_Int32 len, sal_Int32 fromIndex = 0) - const SAL_THROW(()) - { - sal_Int32 n = rtl_str_indexOfStr_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, str, len); - return n < 0 ? n : n + fromIndex; - } - - // This overload is left undefined, to detect calls of indexOfL that - // erroneously use RTL_CONSTASCII_USTRINGPARAM instead of - // RTL_CONSTASCII_STRINGPARAM (but would lead to ambiguities on 32 bit - // platforms): -#if SAL_TYPES_SIZEOFLONG == 8 - void indexOfL(char const *, sal_Int32, rtl_TextEncoding) const; -#endif - - /** - Returns the index within this string of the last occurrence of - the specified substring, searching backward starting at the end. - - The returned index indicates the starting index of the substring - in this string. - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @param str the substring to search for. - @return If the string argument occurs one or more times as a substring - within this string, then the index of the first character of - the last such substring is returned. If it does not occur as - a substring, -1 is returned. - */ - sal_Int32 lastIndexOf( const OString & str ) const SAL_THROW(()) - { - return rtl_str_lastIndexOfStr_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ); - } - - /** - Returns the index within this string of the last occurrence of - the specified substring, searching backward starting before the specified - index. - - The returned index indicates the starting index of the substring - in this string. - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @param str the substring to search for. - @param fromIndex the index before which to start the search. - @return If the string argument occurs one or more times as a substring - within this string before the starting index, then the index - of the first character of the last such substring is - returned. Otherwise, -1 is returned. - */ - sal_Int32 lastIndexOf( const OString & str, sal_Int32 fromIndex ) const SAL_THROW(()) - { - return rtl_str_lastIndexOfStr_WithLength( pData->buffer, fromIndex, - str.pData->buffer, str.pData->length ); - } - - /** - Returns a new string that is a substring of this string. - - The substring begins at the specified beginIndex. If - beginIndex is negative or be greater than the length of - this string, behaviour is undefined. - - @param beginIndex the beginning index, inclusive. - @return the specified substring. - */ - SAL_WARN_UNUSED_RESULT OString copy( sal_Int32 beginIndex ) const SAL_THROW(()) - { - rtl_String *pNew = 0; - rtl_string_newFromSubString( &pNew, pData, beginIndex, getLength() - beginIndex ); - return OString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a new string that is a substring of this string. - - The substring begins at the specified beginIndex and contains count - characters. If either beginIndex or count are negative, - or beginIndex + count are greater than the length of this string - then behaviour is undefined. - - @param beginIndex the beginning index, inclusive. - @param count the number of characters. - @return the specified substring. - */ - SAL_WARN_UNUSED_RESULT OString copy( sal_Int32 beginIndex, sal_Int32 count ) const SAL_THROW(()) - { - rtl_String *pNew = 0; - rtl_string_newFromSubString( &pNew, pData, beginIndex, count ); - return OString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Concatenates the specified string to the end of this string. - - @param str the string that is concatenated to the end - of this string. - @return a string that represents the concatenation of this string - followed by the string argument. - */ - SAL_WARN_UNUSED_RESULT OString concat( const OString & str ) const SAL_THROW(()) - { - rtl_String* pNew = 0; - rtl_string_newConcat( &pNew, pData, str.pData ); - return OString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - -#ifndef RTL_FAST_STRING - friend OString operator+( const OString & str1, const OString & str2 ) SAL_THROW(()) - { - return str1.concat( str2 ); - } -#endif - - /** - Returns a new string resulting from replacing n = count characters - from position index in this string with newStr. - - @param index the replacing index in str. - The index must be greater or equal as 0 and - less or equal as the length of the string. - @param count the count of characters that will replaced - The count must be greater or equal as 0 and - less or equal as the length of the string minus index. - @param newStr the new substring. - @return the new string. - */ - SAL_WARN_UNUSED_RESULT OString replaceAt( sal_Int32 index, sal_Int32 count, const OString& newStr ) const SAL_THROW(()) - { - rtl_String* pNew = 0; - rtl_string_newReplaceStrAt( &pNew, pData, index, count, newStr.pData ); - return OString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a new string resulting from replacing all occurrences of - oldChar in this string with newChar. - - If the character oldChar does not occur in the character sequence - represented by this object, then the string is assigned with - str. - - @param oldChar the old character. - @param newChar the new character. - @return a string derived from this string by replacing every - occurrence of oldChar with newChar. - */ - SAL_WARN_UNUSED_RESULT OString replace( sal_Char oldChar, sal_Char newChar ) const SAL_THROW(()) - { - rtl_String* pNew = 0; - rtl_string_newReplace( &pNew, pData, oldChar, newChar ); - return OString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a new string resulting from replacing the first occurrence of a - given substring with another substring. - - @param from the substring to be replaced - - @param to the replacing substring - - @param[in,out] index pointer to a start index; if the pointer is - non-null: upon entry to the function, its value is the index into the this - string at which to start searching for the \p from substring, the value - must be non-negative and not greater than this string's length; upon exit - from the function its value is the index into this string at which the - replacement took place or -1 if no replacement took place; if the pointer - is null, searching always starts at index 0 - - @since LibreOffice 3.6 - */ - SAL_WARN_UNUSED_RESULT OString replaceFirst( - OString const & from, OString const & to, sal_Int32 * index = 0) const - { - rtl_String * s = 0; - sal_Int32 i = 0; - rtl_string_newReplaceFirst( - &s, pData, from.pData->buffer, from.pData->length, - to.pData->buffer, to.pData->length, index == 0 ? &i : index); - return OString(s, SAL_NO_ACQUIRE); - } - - /** - Returns a new string resulting from replacing all occurrences of a given - substring with another substring. - - Replacing subsequent occurrences picks up only after a given replacement. - That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx". - - @param from the substring to be replaced - - @param to the replacing substring - - @since LibreOffice 3.6 - */ - SAL_WARN_UNUSED_RESULT OString replaceAll(OString const & from, OString const & to) const { - rtl_String * s = 0; - rtl_string_newReplaceAll( - &s, pData, from.pData->buffer, from.pData->length, - to.pData->buffer, to.pData->length); - return OString(s, SAL_NO_ACQUIRE); - } - - /** - Converts from this string all ASCII uppercase characters (65-90) - to ASCII lowercase characters (97-122). - - This function can't be used for language specific conversion. - If the string doesn't contain characters which must be converted, - then the new string is assigned with str. - - @return the string, converted to ASCII lowercase. - */ - SAL_WARN_UNUSED_RESULT OString toAsciiLowerCase() const SAL_THROW(()) - { - rtl_String* pNew = 0; - rtl_string_newToAsciiLowerCase( &pNew, pData ); - return OString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Converts from this string all ASCII lowercase characters (97-122) - to ASCII uppercase characters (65-90). - - This function can't be used for language specific conversion. - If the string doesn't contain characters which must be converted, - then the new string is assigned with str. - - @return the string, converted to ASCII uppercase. - */ - SAL_WARN_UNUSED_RESULT OString toAsciiUpperCase() const SAL_THROW(()) - { - rtl_String* pNew = 0; - rtl_string_newToAsciiUpperCase( &pNew, pData ); - return OString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a new string resulting from removing white space from both ends - of the string. - - All characters that have codes less than or equal to - 32 (the space character) are considered to be white space. - If the string doesn't contain white spaces at both ends, - then the new string is assigned with str. - - @return the string, with white space removed from the front and end. - */ - SAL_WARN_UNUSED_RESULT OString trim() const SAL_THROW(()) - { - rtl_String* pNew = 0; - rtl_string_newTrim( &pNew, pData ); - return OString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a token in the string. - - Example: - sal_Int32 nIndex = 0; - do - { - ... - OString aToken = aStr.getToken( 0, ';', nIndex ); - ... - } - while ( nIndex >= 0 ); - - @param token the number of the token to return. - @param cTok the character which seperate the tokens. - @param index the position at which the token is searched in the - string. - The index must not be greater thanthe length of the - string. - This param is set to the position of the - next token or to -1, if it is the last token. - @return the token; if either token or index is negative, an empty token - is returned (and index is set to -1) - */ - OString getToken( sal_Int32 token, sal_Char cTok, sal_Int32& index ) const SAL_THROW(()) - { - rtl_String * pNew = 0; - index = rtl_string_getToken( &pNew, pData, token, cTok, index ); - return OString( pNew, (DO_NOT_ACQUIRE *)0 ); - } - - /** - Returns a token from the string. - - The same as getToken(sal_Int32, sal_Char, sal_Int32 &), but always passing - in 0 as the start index in the third argument. - - @param count the number of the token to return, starting with 0 - @param separator the character which separates the tokens - - @return the given token, or an empty string - - @since LibreOffice 3.6 - */ - OString getToken(sal_Int32 count, char separator) const { - sal_Int32 n = 0; - return getToken(count, separator, n); - } - - /** - Returns the Boolean value from this string. - - This function can't be used for language specific conversion. - - @return sal_True, if the string is 1 or "True" in any ASCII case. - sal_False in any other case. - */ - sal_Bool toBoolean() const SAL_THROW(()) - { - return rtl_str_toBoolean( pData->buffer ); - } - - /** - Returns the first character from this string. - - @return the first character from this string or 0, if this string - is emptry. - */ - sal_Char toChar() const SAL_THROW(()) - { - return pData->buffer[0]; - } - - /** - Returns the int32 value from this string. - - This function can't be used for language specific conversion. - - @param radix the radix (between 2 and 36) - @return the int32 represented from this string. - 0 if this string represents no number or one of too large - magnitude. - */ - sal_Int32 toInt32( sal_Int16 radix = 10 ) const SAL_THROW(()) - { - return rtl_str_toInt32( pData->buffer, radix ); - } - - /** - Returns the int64 value from this string. - - This function can't be used for language specific conversion. - - @param radix the radix (between 2 and 36) - @return the int64 represented from this string. - 0 if this string represents no number or one of too large - magnitude. - */ - sal_Int64 toInt64( sal_Int16 radix = 10 ) const SAL_THROW(()) - { - return rtl_str_toInt64( pData->buffer, radix ); - } - - /** - Returns the uint64 value from this string. - - This function can't be used for language specific conversion. - - @param radix the radix (between 2 and 36) - @return the uint64 represented from this string. - 0 if this string represents no number or one of too large - magnitude. - - @since LibreOffice 4.1 - */ - sal_uInt64 toUInt64( sal_Int16 radix = 10 ) const SAL_THROW(()) - { - return rtl_str_toUInt64( pData->buffer, radix ); - } - - /** - Returns the float value from this string. - - This function can't be used for language specific conversion. - - @return the float represented from this string. - 0.0 if this string represents no number. - */ - float toFloat() const SAL_THROW(()) - { - return rtl_str_toFloat( pData->buffer ); - } - - /** - Returns the double value from this string. - - This function can't be used for language specific conversion. - - @return the double represented from this string. - 0.0 if this string represents no number. - */ - double toDouble() const SAL_THROW(()) - { - return rtl_str_toDouble( pData->buffer ); - } - - /** - Returns the string representation of the integer argument. - - This function can't be used for language specific conversion. - - @param i an integer value - @param radix the radix (between 2 and 36) - @return a string with the string representation of the argument. - @since LibreOffice 4.1 - */ - static OString number( int i, sal_Int16 radix = 10 ) - { - return number( static_cast< long long >( i ), radix ); - } - /// @overload - /// @since LibreOffice 4.1 - static OString number( unsigned int i, sal_Int16 radix = 10 ) - { - return number( static_cast< unsigned long long >( i ), radix ); - } - /// @overload - /// @since LibreOffice 4.1 - static OString number( long i, sal_Int16 radix = 10 ) - { - return number( static_cast< long long >( i ), radix ); - } - /// @overload - /// @since LibreOffice 4.1 - static OString number( unsigned long i, sal_Int16 radix = 10 ) - { - return number( static_cast< unsigned long long >( i ), radix ); - } - /// @overload - /// @since LibreOffice 4.1 - static OString number( long long ll, sal_Int16 radix = 10 ) - { - sal_Char aBuf[RTL_STR_MAX_VALUEOFINT64]; - rtl_String* pNewData = 0; - rtl_string_newFromStr_WithLength( &pNewData, aBuf, rtl_str_valueOfInt64( aBuf, ll, radix ) ); - return OString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - /// @overload - /// @since LibreOffice 4.1 - static OString number( unsigned long long ll, sal_Int16 radix = 10 ) - { - sal_Char aBuf[RTL_STR_MAX_VALUEOFUINT64]; - rtl_String* pNewData = 0; - rtl_string_newFromStr_WithLength( &pNewData, aBuf, rtl_str_valueOfUInt64( aBuf, ll, radix ) ); - return OString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns the string representation of the float argument. - - This function can't be used for language specific conversion. - - @param f a float. - @return a string with the string representation of the argument. - @since LibreOffice 4.1 - */ - static OString number( float f ) - { - sal_Char aBuf[RTL_STR_MAX_VALUEOFFLOAT]; - rtl_String* pNewData = 0; - rtl_string_newFromStr_WithLength( &pNewData, aBuf, rtl_str_valueOfFloat( aBuf, f ) ); - return OString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns the string representation of the double argument. - - This function can't be used for language specific conversion. - - @param d a double. - @return a string with the string representation of the argument. - @since LibreOffice 4.1 - */ - static OString number( double d ) - { - sal_Char aBuf[RTL_STR_MAX_VALUEOFDOUBLE]; - rtl_String* pNewData = 0; - rtl_string_newFromStr_WithLength( &pNewData, aBuf, rtl_str_valueOfDouble( aBuf, d ) ); - return OString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns the string representation of the sal_Bool argument. - - If the sal_Bool is true, the string "true" is returned. - If the sal_Bool is false, the string "false" is returned. - This function can't be used for language specific conversion. - - @param b a sal_Bool. - @return a string with the string representation of the argument. - @deprecated use boolean() - */ - SAL_DEPRECATED_INTERNAL("use boolean()") static OString valueOf( sal_Bool b ) SAL_THROW(()) - { - return boolean(b); - } - - /** - Returns the string representation of the boolean argument. - - If the argument is true, the string "true" is returned. - If the argument is false, the string "false" is returned. - This function can't be used for language specific conversion. - - @param b a bool. - @return a string with the string representation of the argument. - @since LibreOffice 4.1 - */ - static OString boolean( bool b ) SAL_THROW(()) - { - sal_Char aBuf[RTL_STR_MAX_VALUEOFBOOLEAN]; - rtl_String* pNewData = 0; - rtl_string_newFromStr_WithLength( &pNewData, aBuf, rtl_str_valueOfBoolean( aBuf, b ) ); - return OString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns the string representation of the char argument. - - @param c a character. - @return a string with the string representation of the argument. - @deprecated use operator, function or constructor taking char or sal_Unicode argument - */ - SAL_DEPRECATED_INTERNAL("convert to OString or use directly") static OString valueOf( sal_Char c ) SAL_THROW(()) - { - return OString( &c, 1 ); - } - - /** - Returns the string representation of the int argument. - - This function can't be used for language specific conversion. - - @param i a int32. - @param radix the radix (between 2 and 36) - @return a string with the string representation of the argument. - @deprecated use number() - */ - SAL_DEPRECATED_INTERNAL("use number()") static OString valueOf( sal_Int32 i, sal_Int16 radix = 10 ) SAL_THROW(()) - { - return number( i, radix ); - } - - /** - Returns the string representation of the long argument. - - This function can't be used for language specific conversion. - - @param ll a int64. - @param radix the radix (between 2 and 36) - @return a string with the string representation of the argument. - @deprecated use number() - */ - SAL_DEPRECATED_INTERNAL("use number()") static OString valueOf( sal_Int64 ll, sal_Int16 radix = 10 ) SAL_THROW(()) - { - return number( ll, radix ); - } - - /** - Returns the string representation of the float argument. - - This function can't be used for language specific conversion. - - @param f a float. - @return a string with the string representation of the argument. - @deprecated use number() - */ - SAL_DEPRECATED_INTERNAL("use number()") static OString valueOf( float f ) SAL_THROW(()) - { - return number(f); - } - - /** - Returns the string representation of the double argument. - - This function can't be used for language specific conversion. - - @param d a double. - @return a string with the string representation of the argument. - @deprecated use number() - */ - SAL_DEPRECATED_INTERNAL("use number()") static OString valueOf( double d ) SAL_THROW(()) - { - return number(d); - } - -}; - -/* ======================================================================= */ - -#ifdef RTL_FAST_STRING -/** -A simple wrapper around string literal. It is usually not necessary to use, can -be mostly used to force OString operator+ working with operands that otherwise would -not trigger it. - -This class is not part of public API and is meant to be used only in LibreOffice code. -@since LibreOffice 4.0 -*/ -struct SAL_WARN_UNUSED OStringLiteral -{ - template< int N > - OStringLiteral( const char (&str)[ N ] ) : size( N - 1 ), data( str ) { assert( strlen( str ) == N - 1 ); } - int size; - const char* data; -}; - -/** - @internal -*/ -template<> -struct ToStringHelper< OString > - { - static int length( const OString& s ) { return s.getLength(); } - static char* addData( char* buffer, const OString& s ) { return addDataHelper( buffer, s.getStr(), s.getLength()); } - static const bool allowOStringConcat = true; - static const bool allowOUStringConcat = false; - }; - -/** - @internal -*/ -template<> -struct ToStringHelper< OStringLiteral > - { - static int length( const OStringLiteral& str ) { return str.size; } - static char* addData( char* buffer, const OStringLiteral& str ) { return addDataHelper( buffer, str.data, str.size ); } - static const bool allowOStringConcat = true; - static const bool allowOUStringConcat = false; - }; - -/** - @internal -*/ -template< typename charT, typename traits, typename T1, typename T2 > -inline std::basic_ostream<charT, traits> & operator <<( - std::basic_ostream<charT, traits> & stream, const OStringConcat< T1, T2 >& concat) -{ - return stream << OString( concat ); -} -#else -// non-RTL_FAST_CODE needs this to compile -typedef OString OStringLiteral; -#endif - - -/** A helper to use OStrings with hash maps. - - Instances of this class are unary function objects that can be used as - hash function arguments to boost::unordered_map and similar constructs. - */ -struct OStringHash -{ - /** Compute a hash code for a string. - - @param rString - a string. - - @return - a hash code for the string. This hash code should not be stored - persistently, as its computation may change in later revisions. - */ - size_t operator()( const OString& rString ) const - { return (size_t)rString.hashCode(); } -}; - -/* ======================================================================= */ - -/** - Support for rtl::OString in std::ostream (and thus in - CPPUNIT_ASSERT or SAL_INFO macros, for example). - - @since LibreOffice 4.0 - */ -template< typename charT, typename traits > std::basic_ostream<charT, traits> & -operator <<( - std::basic_ostream<charT, traits> & stream, OString const & string) -{ - return stream << string.getStr(); - // best effort; potentially loses data due to embedded null characters -} - -} /* Namespace */ - -#ifdef RTL_STRING_UNITTEST -namespace rtl -{ -typedef rtlunittest::OString OString; -} -#undef RTL_STRING_CONST_FUNCTION -#endif - -#ifdef RTL_USING -using ::rtl::OString; -using ::rtl::OStringHash; -using ::rtl::OStringLiteral; -#endif - -#endif /* _RTL_STRING_HXX_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/stringconcat.hxx b/sal/inc/rtl/stringconcat.hxx deleted file mode 100644 index a6e3467209e3..000000000000 --- a/sal/inc/rtl/stringconcat.hxx +++ /dev/null @@ -1,284 +0,0 @@ -/* -*- 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/. - */ - -#ifndef RTL_STRINGCONCAT_HXX -#define RTL_STRINGCONCAT_HXX - -#include <rtl/stringutils.hxx> - -#include <string.h> - -#ifdef RTL_FAST_STRING - -#ifdef RTL_STRING_UNITTEST -#define rtl rtlunittest -#endif -namespace rtl -{ -#ifdef RTL_STRING_UNITTEST -#undef rtl -#endif - -/* -Implementation of efficient string concatenation. - -The whole system is built around two basic template classes: -- ToStringHelper< T > - for each T it can give the length of the resulting string representation and can write - this string representation to a buffer -- O(U)StringConcat< T1, T2 > - operator+ now, instead of creating O(U)String object, returns only this helper object, - that keeps a reference to both operator+ operands; only when converted to O(U)String it will actually create - the resulting string object using ToStringHelper, creating directly the resulting object without any string - intermediate objects -As all the code is inline methods, it allows for extensive optimization and will usually result in very effective code -(even surpassing strlen/strcat and equalling handwritten), while allowing for very easy and intuitive syntax. -*/ - -/** -@internal - -Helper class for converting a given type to a string representation. -*/ -template< typename T > -struct ToStringHelper - { - /// Return length of the string representation of the given object (if not known exactly, it needs to be the maximum). - static int length( const T& ); - /// Add 8-bit representation of the given object to the given buffer and return position right after the added data. - static char* addData( char* buffer, const T& ); - /// Add Unicode representation of the given object to the given buffer and return position right after the added data. - static sal_Unicode* addData( sal_Unicode* buffer, const T& ); - /// If true, T can be used in concatenation resulting in OString. - static const bool allowOStringConcat = false; - /// If true, T can be used in concatenation resulting in OUString. - static const bool allowOUStringConcat = false; - }; - -inline -char* addDataHelper( char* buffer, const char* data, int length ) - { - memcpy( buffer, data, length ); - return buffer + length; - } - -inline -sal_Unicode* addDataHelper( sal_Unicode* buffer, const sal_Unicode* data, int length ) - { - memcpy( buffer, data, length * sizeof( sal_Unicode )); - return buffer + length; - } - -inline -sal_Unicode* addDataLiteral( sal_Unicode* buffer, const char* data, int length ) - { - while( length-- > 0 ) - *buffer++ = *data++; - return buffer; - } - -inline -char* addDataCString( char* buffer, const char* str ) - { - while( *str != '\0' ) - *buffer++ = *str++; - return buffer; - } - -inline -sal_Unicode* addDataUString( sal_Unicode* buffer, const sal_Unicode* str ) - { - while( *str != '\0' ) - *buffer++ = *str++; - return buffer; - } - -template<> -struct ToStringHelper< const char* > - { - static int length( const char* str ) { - return sal::static_int_cast<int>(strlen( str )); - } - static char* addData( char* buffer, const char* str ) { return addDataCString( buffer, str ); } - static const bool allowOStringConcat = true; - static const bool allowOUStringConcat = false; - }; - -template<> -struct ToStringHelper< char* > - { - static int length( const char* str ) { - return sal::static_int_cast<int>(strlen( str )); - } - static char* addData( char* buffer, const char* str ) { return addDataCString( buffer, str ); } - static const bool allowOStringConcat = true; - static const bool allowOUStringConcat = false; - }; - -template< int N > -struct ToStringHelper< char[ N ] > - { - static int length( const char str[ N ] ) { - return sal::static_int_cast<int>(strlen( str )); - } - static char* addData( char* buffer, const char str[ N ] ) { return addDataCString( buffer, str ); } - static sal_Unicode* addData( sal_Unicode* buffer, const char str[ N ] ) { return addDataLiteral( buffer, str, N - 1 ); } - static const bool allowOStringConcat = true; - static const bool allowOUStringConcat = false; - }; - -template< int N > -struct ToStringHelper< const char[ N ] > - { - static int length( const char str[ N ] ) { (void)str; assert( strlen( str ) == N - 1 ); return N - 1; } - static char* addData( char* buffer, const char str[ N ] ) { return addDataHelper( buffer, str, N - 1 ); } - static sal_Unicode* addData( sal_Unicode* buffer, const char str[ N ] ) { return addDataLiteral( buffer, str, N - 1 ); } - static const bool allowOStringConcat = true; - static const bool allowOUStringConcat = true; - }; - -/** -@internal - -Objects returned by operator+, instead of OString. These objects (possibly recursively) keep a representation of the whole -concatenation operation. -*/ -template< typename T1, typename T2 > -struct OStringConcat - { - public: - OStringConcat( const T1& left_, const T2& right_ ) : left( left_ ), right( right_ ) {} - int length() const { return ToStringHelper< T1 >::length( left ) + ToStringHelper< T2 >::length( right ); } - char* addData( char* buffer ) const { return ToStringHelper< T2 >::addData( ToStringHelper< T1 >::addData( buffer, left ), right ); } - // NOTE here could be functions that would forward to the "real" temporary OString. Note however that e.g. getStr() - // is not so simple, as the OString temporary must live long enough (i.e. can't be created here in a function, a wrapper - // temporary object containing it must be returned instead). - private: - const T1& left; - const T2& right; - }; - -/** -@internal - -Objects returned by operator+, instead of OUString. These objects (possibly recursively) keep a representation of the whole -concatenation operation. -*/ -template< typename T1, typename T2 > -struct OUStringConcat - { - public: - OUStringConcat( const T1& left_, const T2& right_ ) : left( left_ ), right( right_ ) {} - int length() const { return ToStringHelper< T1 >::length( left ) + ToStringHelper< T2 >::length( right ); } - sal_Unicode* addData( sal_Unicode* buffer ) const { return ToStringHelper< T2 >::addData( ToStringHelper< T1 >::addData( buffer, left ), right ); } - private: - const T1& left; - const T2& right; - }; - -template< typename T1, typename T2 > -struct ToStringHelper< OStringConcat< T1, T2 > > - { - static int length( const OStringConcat< T1, T2 >& c ) { return c.length(); } - static char* addData( char* buffer, const OStringConcat< T1, T2 >& c ) { return c.addData( buffer ); } - static const bool allowOStringConcat = ToStringHelper< T1 >::allowOStringConcat && ToStringHelper< T2 >::allowOStringConcat; - static const bool allowOUStringConcat = false; - }; - -template< typename T1, typename T2 > -struct ToStringHelper< OUStringConcat< T1, T2 > > - { - static int length( const OUStringConcat< T1, T2 >& c ) { return c.length(); } - static sal_Unicode* addData( sal_Unicode* buffer, const OUStringConcat< T1, T2 >& c ) { return c.addData( buffer ); } - static const bool allowOStringConcat = false; - static const bool allowOUStringConcat = ToStringHelper< T1 >::allowOUStringConcat && ToStringHelper< T2 >::allowOUStringConcat; - }; - -template< typename T1, typename T2 > -inline -SAL_WARN_UNUSED_RESULT -typename internal::Enable< OStringConcat< T1, T2 >, ToStringHelper< T1 >::allowOStringConcat && ToStringHelper< T2 >::allowOStringConcat >::Type operator+( const T1& left, const T2& right ) - { - return OStringConcat< T1, T2 >( left, right ); - } - -// char[N] and const char[N] need to be done explicitly, otherwise the compiler likes to treat them the same way for some reason -template< typename T, int N > -inline -SAL_WARN_UNUSED_RESULT -typename internal::Enable< OStringConcat< T, const char[ N ] >, ToStringHelper< T >::allowOStringConcat >::Type operator+( const T& left, const char (&right)[ N ] ) - { - return OStringConcat< T, const char[ N ] >( left, right ); - } - -template< typename T, int N > -inline -SAL_WARN_UNUSED_RESULT -typename internal::Enable< OStringConcat< const char[ N ], T >, ToStringHelper< T >::allowOStringConcat >::Type operator+( const char (&left)[ N ], const T& right ) - { - return OStringConcat< const char[ N ], T >( left, right ); - } - -template< typename T, int N > -inline -SAL_WARN_UNUSED_RESULT -typename internal::Enable< OStringConcat< T, char[ N ] >, ToStringHelper< T >::allowOStringConcat >::Type operator+( const T& left, char (&right)[ N ] ) - { - return OStringConcat< T, char[ N ] >( left, right ); - } - -template< typename T, int N > -inline -SAL_WARN_UNUSED_RESULT -typename internal::Enable< OStringConcat< char[ N ], T >, ToStringHelper< T >::allowOStringConcat >::Type operator+( char (&left)[ N ], const T& right ) - { - return OStringConcat< char[ N ], T >( left, right ); - } - -template< typename T1, typename T2 > -inline -typename internal::Enable< OUStringConcat< T1, T2 >, ToStringHelper< T1 >::allowOUStringConcat && ToStringHelper< T2 >::allowOUStringConcat >::Type operator+( const T1& left, const T2& right ) - { - return OUStringConcat< T1, T2 >( left, right ); - } - -template< typename T1, typename T2 > -inline -typename internal::Enable< OUStringConcat< T1, T2 >, ToStringHelper< T1 >::allowOUStringConcat && ToStringHelper< T2 >::allowOUStringConcat && internal::ConstCharArrayDetector< T1, void >::ok >::Type operator+( T1& left, const T2& right ) - { - return OUStringConcat< T1, T2 >( left, right ); - } - -template< typename T1, typename T2 > -inline -typename internal::Enable< OUStringConcat< T1, T2 >, ToStringHelper< T1 >::allowOUStringConcat && ToStringHelper< T2 >::allowOUStringConcat && internal::ConstCharArrayDetector< T2, void >::ok >::Type operator+( const T1& left, T2& right ) - { - return OUStringConcat< T1, T2 >( left, right ); - } - -#ifdef RTL_STRING_UNITTEST_CONCAT -// Special overload to catch the remaining invalid combinations. The helper struct must -// be used to make this operator+ overload a worse choice than all the existing overloads above. -struct StringConcatInvalid - { - template< typename T > - StringConcatInvalid( const T& ) {} - }; -template< typename T > -inline -int operator+( const StringConcatInvalid&, const T& ) - { - rtl_string_unittest_invalid_concat = true; - return 0; // doesn't matter - } -#endif - -} // namespace - -#endif - -#endif diff --git a/sal/inc/rtl/stringutils.hxx b/sal/inc/rtl/stringutils.hxx deleted file mode 100644 index fc47a248cde7..000000000000 --- a/sal/inc/rtl/stringutils.hxx +++ /dev/null @@ -1,187 +0,0 @@ -/* -*- 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/. - */ - -#ifndef _RTL_STRINGUTILS_HXX_ -#define _RTL_STRINGUTILS_HXX_ - -#include "sal/config.h" - -// Manually defining RTL_DISABLE_FAST_STRING allows to force turning fast string concatenation off -// (e.g. for debugging). -#ifndef RTL_DISABLE_FAST_STRING -// This feature is not part of public API and is meant to be used only internally by LibreOffice. -#ifdef LIBO_INTERNAL_ONLY -// Enable fast string concatenation. -#define RTL_FAST_STRING -#endif -#endif - -// The unittest uses slightly different code to help check that the proper -// calls are made. The class is put into a different namespace to make -// sure the compiler generates a different (if generating also non-inline) -// copy of the function and does not merge them together. The class -// is "brought" into the proper rtl namespace by a typedef below. -#ifdef RTL_STRING_UNITTEST -#define rtl rtlunittest -#endif - -namespace rtl -{ - -#ifdef RTL_STRING_UNITTEST -#undef rtl -#endif - -namespace internal -{ -/* -These templates use SFINAE (Substitution failure is not an error) to help distinguish the various -plain C string types: char*, const char*, char[N], const char[N], char[] and const char[]. -There are 2 cases: -1) Only string literal (i.e. const char[N]) is wanted, not any of the others. - In this case it is necessary to distinguish between const char[N] and char[N], as the latter - would be automatically converted to the const variant, which is not wanted (not a string literal - with known size of the content). In this case ConstCharArrayDetector is used to ensure the function - is called only with const char[N] arguments. There's no other plain C string type overload. -2) All plain C string types are wanted, and const char[N] needs to be handled differently. - In this case const char[N] would match const char* argument type (not exactly sure why, but it's - consistent in all of gcc, clang and msvc). Using a template with a reference to const of the type - avoids this problem, and CharPtrDetector ensures that the function is called only with char pointer - arguments. The const in the argument is necessary to handle the case when something is explicitly - cast to const char*. Additionally (non-const) char[N] needs to be handled, but with the reference - being const, it would also match const char[N], so another overload with a reference to non-const - and NonConstCharArrayDetector are used to ensure the function is called only with (non-const) char[N]. -Additionally, char[] and const char[] (i.e. size unknown) are rather tricky. Their usage with 'T&' would -mean it would be 'char(&)[]', which seems to be invalid. But gcc and clang somehow manage when it is -a template. while msvc complains about no conversion from char[] to char[1]. And the reference cannot -be avoided, because 'const char[]' as argument type would match also 'const char[N]' -So char[] and const char[] should always be used with their contents specified (which automatically -turns them into char[N] or const char[N]), or char* and const char* should be used. -*/ -struct Dummy {}; -template< typename T1, typename T2 = void > -struct CharPtrDetector -{ - static const bool ok = false; -}; -template< typename T > -struct CharPtrDetector< const char*, T > -{ - typedef T Type; - static const bool ok = true; -}; -template< typename T > -struct CharPtrDetector< char*, T > -{ - typedef T Type; - static const bool ok = true; -}; - -template< typename T1, typename T2 > -struct NonConstCharArrayDetector -{ -}; -template< typename T, int N > -struct NonConstCharArrayDetector< char[ N ], T > -{ - typedef T Type; -}; -#ifdef RTL_STRING_UNITTEST -// never use, until all compilers handle this -template< typename T > -struct NonConstCharArrayDetector< char[], T > -{ - typedef T Type; -}; -template< typename T > -struct NonConstCharArrayDetector< const char[], T > -{ - typedef T Type; -}; -#endif - -template< typename T1, typename T2 = void > -struct ConstCharArrayDetector -{ - static const bool ok = false; -}; -template< int N, typename T > -struct ConstCharArrayDetector< const char[ N ], T > -{ - typedef T Type; - static const int size = N; - static const bool ok = true; -}; - -// this one is used to rule out only const char[N] -template< typename T > -struct ExceptConstCharArrayDetector -{ - typedef Dummy Type; -}; -template< int N > -struct ExceptConstCharArrayDetector< const char[ N ] > -{ -}; -// this one is used to rule out only const char[N] -// (const will be brought in by 'const T&' in the function call) -// msvc needs const char[N] here (not sure whether gcc or msvc -// are right, it doesn't matter). -template< typename T > -struct ExceptCharArrayDetector -{ - typedef Dummy Type; -}; -template< int N > -struct ExceptCharArrayDetector< char[ N ] > -{ -}; -template< int N > -struct ExceptCharArrayDetector< const char[ N ] > -{ -}; - -template< typename T1, typename T2 = void > -struct SalUnicodePtrDetector -{ - static const bool ok = false; -}; -template< typename T > -struct SalUnicodePtrDetector< const sal_Unicode*, T > -{ - typedef T Type; - static const bool ok = true; -}; -template< typename T > -struct SalUnicodePtrDetector< sal_Unicode*, T > -{ - typedef T Type; - static const bool ok = true; -}; - -// SFINAE helper class -template< typename T, bool > -struct Enable - { - }; - -template< typename T > -struct Enable< T, true > - { - typedef T Type; - }; - - -} /* Namespace */ - -} /* Namespace */ - -#endif /* _RTL_STRINGUTILS_HXX_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/tencinfo.h b/sal/inc/rtl/tencinfo.h deleted file mode 100644 index 34ba34f17374..000000000000 --- a/sal/inc/rtl/tencinfo.h +++ /dev/null @@ -1,278 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_TENCINFO_H -#define _RTL_TENCINFO_H - -#include "sal/config.h" - -#include "rtl/textenc.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// See rtl_TextEncodingInfo.Flags below for documentation on these values: -#define RTL_TEXTENCODING_INFO_CONTEXT ((sal_uInt32)0x00000001) -#define RTL_TEXTENCODING_INFO_ASCII ((sal_uInt32)0x00000002) -#define RTL_TEXTENCODING_INFO_UNICODE ((sal_uInt32)0x00000004) -#define RTL_TEXTENCODING_INFO_MULTIBYTE ((sal_uInt32)0x00000008) -#define RTL_TEXTENCODING_INFO_R2L ((sal_uInt32)0x00000010) -#define RTL_TEXTENCODING_INFO_7BIT ((sal_uInt32)0x00000020) -#define RTL_TEXTENCODING_INFO_SYMBOL ((sal_uInt32)0x00000040) -#define RTL_TEXTENCODING_INFO_MIME ((sal_uInt32)0x00000080) - -/** Information about a text encoding. - */ -typedef struct _rtl_TextEncodingInfo -{ - /** The size (in bytes) of this structure. Should be 12. - */ - sal_uInt32 StructSize; - - /** The minimum number of bytes needed to encode any character in the - given encoding. - - Can be rather meaningless for encodings that encode global state along - with the characters (e.g., ISO-2022 encodings). - */ - sal_uInt8 MinimumCharSize; - - /** The maximum number of bytes needed to encode any character in the - given encoding. - - Can be rather meaningless for encodings that encode global state along - with the characters (e.g., ISO-2022 encodings). - */ - sal_uInt8 MaximumCharSize; - - /** The average number of bytes needed to encode a character in the given - encoding. - */ - sal_uInt8 AverageCharSize; - - /** An unused byte, for padding. - */ - sal_uInt8 Reserved; - - /** Any combination of the RTL_TEXTENCODING_INFO flags. - - RTL_TEXTENCODING_INFO_CONTEXT: The encoding uses some mechanism (like - state-changing byte sequences) to switch between different modes (e.g., - to encode multiple character repertoires within the same byte ranges). - - Even if an encoding does not have the CONTEXT property, interpretation - of certain byte values within that encoding can depend on context (e.g., - a certain byte value could be either a single-byte character or a - subsequent byte of a multi-byte character). Likewise, the single shift - characters (SS2 and SS3) used by some of the EUC encodings (to denote - that the following bytes constitute a character from another character - repertoire) do not imply that encodings making use of these characters - have the CONTEXT property. Examples of encodings that do have the - CONTEXT property are the ISO-2022 encodings and UTF-7. - - RTL_TEXTENCODING_INFO_ASCII: The encoding is a superset of ASCII. More - specifically, any appearance of a byte in the range 0x20--7F denotes the - corresponding ASCII character (from SPACE to DELETE); in particular, - such a byte cannot be part of a multi-byte character. Note that the - ASCII control codes 0x00--1F are not included here, as they are used for - special purposes in some encodings. - - If an encoding has this property, it is easy to search for occurrences of - ASCII characters within strings of this encoding---you do not need to - keep track whether a byte in the range 0x20--7F really represents an - ASCII character or rather is part of some multi-byte character. - - The guarantees when mapping between Unicode and a given encoding with - the ASCII property are as follows: When mapping from Unicode to the - given encoding, U+0020--007F map to 0x20--7F (but there can also be - other Unicode characters mapping into the range 0x20--7F), and when - mapping from the given encoding to Unicode, 0x20--7F map to U+0020--007F - (again, there can also be other characters mapping into the range - U+0020--007F). In particular, this ensures round-trip conversion for - the ASCII range. - - In principle, the ASCII property is orthogonal to the CONTEXT property. - In practice, however, an encoding that has the ASCII property will most - likely not also have the CONTEXT property. - - RTL_TEXTENCODING_INFO_UNICODE: The encoding is based on the Unicode - character repertoire. - - RTL_TEXTENCODING_INFO_MULTIBYTE: A multi-byte encoding. - - RTL_TEXTENCODING_INFO_R2L: An encoding used mainly or exclusively for - languages written from right to left. - - RTL_TEXTENCODING_INFO_7BIT: A 7-bit instead of an 8-bit encoding. - - RTL_TEXTENCODING_INFO_SYMBOL: A (generic) encoding for symbol character - sets. - - RTL_TEXTENCODING_INFO_MIME: The encoding is registered as a MIME - charset. - */ - sal_uInt32 Flags; -} rtl_TextEncodingInfo; - -/** Determine whether a text encoding uses single octets as basic units of - information (and can thus be used with the conversion routines in - rtl/textcvt.h). - - @param nEncoding - Any rtl_TextEncoding value. - - @return - True if the given encoding uses single octets as basic units of - information, false otherwise. - */ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_isOctetTextEncoding(rtl_TextEncoding nEncoding); - -/** Return information about a text encoding. - - @param eTextEncoding - Any rtl_TextEncoding value. - - @param pEncInfo - Returns information about the given encoding. Must not be null, and the - StructSize member must be set correctly. - - @return - True if information about the given encoding is available, false - otherwise. - */ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_getTextEncodingInfo( - rtl_TextEncoding eTextEncoding, rtl_TextEncodingInfo* pEncInfo ); - -/** Map from a numeric Windows charset to a text encoding. - - @param nWinCharset - Any numeric Windows charset. - - @return - The corresponding rtl_TextEncoding value, or RTL_TEXTENCODING_DONTKNOW if - no mapping is applicable. - */ -SAL_DLLPUBLIC rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromWindowsCharset( - sal_uInt8 nWinCharset ); - -/** Map from a MIME charset to a text encoding. - - @param pMimeCharset - Any MIME charset string. Must not be null. - - @return - The corresponding rtl_TextEncoding value, or RTL_TEXTENCODING_DONTKNOW if - no mapping is applicable. - */ -SAL_DLLPUBLIC rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromMimeCharset( - const sal_Char* pMimeCharset ); - -/** Map from a Unix charset to a text encoding. - - @param pUnixCharset - Any Unix charset string. Must not be null. - - @return - The corresponding rtl_TextEncoding value, or RTL_TEXTENCODING_DONTKNOW if - no mapping is applicable. - */ -SAL_DLLPUBLIC rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromUnixCharset( - const sal_Char* pUnixCharset ); - -/** Map from a text encoding to the best matching numeric Windows charset. - - @param eTextEncoding - Any rtl_TextEncoding value. - - @return - The best matching numeric Windows charset, or 1 if none matches. - */ -SAL_DLLPUBLIC sal_uInt8 SAL_CALL rtl_getBestWindowsCharsetFromTextEncoding( - rtl_TextEncoding eTextEncoding ); - -/** Map from a text encoding to a corresponding MIME charset name, if - available (see <http://www.iana.org/assignments/character-sets>). - - @param nEncoding - Any rtl_TextEncoding value. - - @return - The (preferred) MIME charset name corresponding to the given encoding, or - NULL if none is available. - */ -SAL_DLLPUBLIC char const * SAL_CALL rtl_getMimeCharsetFromTextEncoding( - rtl_TextEncoding nEncoding ); - -/** Map from a text encoding to the best matching MIME charset. - - @param eTextEncoding - Any rtl_TextEncoding value. - - @return - The best matching MIME charset string, or null if none matches. - */ -SAL_DLLPUBLIC const sal_Char* SAL_CALL rtl_getBestMimeCharsetFromTextEncoding( - rtl_TextEncoding eTextEncoding ); - -/** Map from a text encoding to the best matching Unix charset. - - @param eTextEncoding - Any rtl_TextEncoding value. - - @return - The best matching Unix charset string, or null if none matches. - */ -SAL_DLLPUBLIC const sal_Char* SAL_CALL rtl_getBestUnixCharsetFromTextEncoding( - rtl_TextEncoding eTextEncoding ); - -/** Map from a Windows code page to a text encoding. - - @param nCodePage - Any Windows code page number. - - @return - The corresponding rtl_TextEncoding value (which will be an octet text - encoding, see rtl_isOctetTextEncoding), or RTL_TEXTENCODING_DONTKNOW if no - mapping is applicable. - */ -SAL_DLLPUBLIC rtl_TextEncoding SAL_CALL -rtl_getTextEncodingFromWindowsCodePage(sal_uInt32 nCodePage); - -/** Map from a text encoding to a Windows code page. - - @param nEncoding - Any rtl_TextEncoding value. - - @return - The corresponding Windows code page number, or 0 if no mapping is - applicable. - */ -SAL_DLLPUBLIC sal_uInt32 SAL_CALL -rtl_getWindowsCodePageFromTextEncoding(rtl_TextEncoding nEncoding); - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_TENCINFO_H */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/textcvt.h b/sal/inc/rtl/textcvt.h deleted file mode 100644 index a67b2416ee7a..000000000000 --- a/sal/inc/rtl/textcvt.h +++ /dev/null @@ -1,177 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_TEXTCVT_H -#define _RTL_TEXTCVT_H - -#include "sal/config.h" - -#include "rtl/textenc.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Documentation about this file can be found at - <http://udk.openoffice.org/cpp/man/spec/textconversion.html>. */ - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -typedef void* rtl_TextToUnicodeConverter; - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -typedef void* rtl_TextToUnicodeContext; - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC rtl_TextToUnicodeConverter SAL_CALL rtl_createTextToUnicodeConverter( rtl_TextEncoding eTextEncoding ); - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC void SAL_CALL rtl_destroyTextToUnicodeConverter( rtl_TextToUnicodeConverter hConverter ); - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC rtl_TextToUnicodeContext SAL_CALL rtl_createTextToUnicodeContext( rtl_TextToUnicodeConverter hConverter ); - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC void SAL_CALL rtl_destroyTextToUnicodeContext( rtl_TextToUnicodeConverter hConverter, rtl_TextToUnicodeContext hContext ); - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC void SAL_CALL rtl_resetTextToUnicodeContext( rtl_TextToUnicodeConverter hConverter, rtl_TextToUnicodeContext hContext ); - -#define RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR ((sal_uInt32)0x0001) -#define RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_IGNORE ((sal_uInt32)0x0002) -#define RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE ((sal_uInt32)0x0003) -#define RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_DEFAULT ((sal_uInt32)0x0004) -#define RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR ((sal_uInt32)0x0010) -#define RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_IGNORE ((sal_uInt32)0x0020) -#define RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT ((sal_uInt32)0x0030) -#define RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR ((sal_uInt32)0x0100) -#define RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE ((sal_uInt32)0x0200) -#define RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT ((sal_uInt32)0x0300) -#define RTL_TEXTTOUNICODE_FLAGS_FLUSH ((sal_uInt32)0x8000) -#define RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE 0x10000 - /* Accept any global document signatures (for example, in UTF-8, a leading - EF BB BF encoding the Byte Order Mark U+FEFF) */ - -#define RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK ((sal_uInt32)0x000F) -#define RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK ((sal_uInt32)0x00F0) -#define RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK ((sal_uInt32)0x0F00) - -#define RTL_TEXTTOUNICODE_INFO_ERROR ((sal_uInt32)0x0001) -#define RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOSMALL ((sal_uInt32)0x0002) -#define RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOSMALL ((sal_uInt32)0x0004) -#define RTL_TEXTTOUNICODE_INFO_UNDEFINED ((sal_uInt32)0x0008) -#define RTL_TEXTTOUNICODE_INFO_MBUNDEFINED ((sal_uInt32)0x0010) -#define RTL_TEXTTOUNICODE_INFO_INVALID ((sal_uInt32)0x0020) - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC sal_Size SAL_CALL rtl_convertTextToUnicode( - rtl_TextToUnicodeConverter hConverter, - rtl_TextToUnicodeContext hContext, - const sal_Char* pSrcBuf, sal_Size nSrcBytes, - sal_Unicode* pDestBuf, sal_Size nDestChars, - sal_uInt32 nFlags, sal_uInt32* pInfo, - sal_Size* pSrcCvtBytes ); - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -typedef void* rtl_UnicodeToTextConverter; - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -typedef void* rtl_UnicodeToTextContext; - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC rtl_UnicodeToTextConverter SAL_CALL rtl_createUnicodeToTextConverter( rtl_TextEncoding eTextEncoding ); - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC void SAL_CALL rtl_destroyUnicodeToTextConverter( rtl_UnicodeToTextConverter hConverter ); - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC rtl_UnicodeToTextContext SAL_CALL rtl_createUnicodeToTextContext( rtl_UnicodeToTextConverter hConverter ); - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC void SAL_CALL rtl_destroyUnicodeToTextContext( rtl_UnicodeToTextConverter hConverter, rtl_UnicodeToTextContext hContext ); - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC void SAL_CALL rtl_resetUnicodeToTextContext( rtl_UnicodeToTextConverter hConverter, rtl_UnicodeToTextContext hContext ); - -#define RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR ((sal_uInt32)0x0001) -#define RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE ((sal_uInt32)0x0002) -#define RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0 ((sal_uInt32)0x0003) -#define RTL_UNICODETOTEXT_FLAGS_UNDEFINED_QUESTIONMARK ((sal_uInt32)0x0004) -#define RTL_UNICODETOTEXT_FLAGS_UNDEFINED_UNDERLINE ((sal_uInt32)0x0005) -#define RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT ((sal_uInt32)0x0006) -#define RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR ((sal_uInt32)0x0010) -#define RTL_UNICODETOTEXT_FLAGS_INVALID_IGNORE ((sal_uInt32)0x0020) -#define RTL_UNICODETOTEXT_FLAGS_INVALID_0 ((sal_uInt32)0x0030) -#define RTL_UNICODETOTEXT_FLAGS_INVALID_QUESTIONMARK ((sal_uInt32)0x0040) -#define RTL_UNICODETOTEXT_FLAGS_INVALID_UNDERLINE ((sal_uInt32)0x0050) -#define RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT ((sal_uInt32)0x0060) -#define RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE ((sal_uInt32)0x0100) -#define RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR ((sal_uInt32)0x0200) -#define RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0 ((sal_uInt32)0x0400) -#define RTL_UNICODETOTEXT_FLAGS_NONSPACING_IGNORE ((sal_uInt32)0x0800) -#define RTL_UNICODETOTEXT_FLAGS_CONTROL_IGNORE ((sal_uInt32)0x1000) -#define RTL_UNICODETOTEXT_FLAGS_PRIVATE_IGNORE ((sal_uInt32)0x2000) -#define RTL_UNICODETOTEXT_FLAGS_NOCOMPOSITE ((sal_uInt32)0x4000) -#define RTL_UNICODETOTEXT_FLAGS_FLUSH ((sal_uInt32)0x8000) -#define RTL_UNICODETOTEXT_FLAGS_GLOBAL_SIGNATURE 0x10000 - /* Write any global document signatures (for example, in UTF-8, a leading - EF BB BF encoding the Byte Order Mark U+FEFF) */ - -#define RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK ((sal_uInt32)0x000F) -#define RTL_UNICODETOTEXT_FLAGS_INVALID_MASK ((sal_uInt32)0x00F0) - -#define RTL_UNICODETOTEXT_INFO_ERROR ((sal_uInt32)0x0001) -#define RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL ((sal_uInt32)0x0002) -#define RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL ((sal_uInt32)0x0004) -#define RTL_UNICODETOTEXT_INFO_UNDEFINED ((sal_uInt32)0x0008) -#define RTL_UNICODETOTEXT_INFO_INVALID ((sal_uInt32)0x0010) - -/** see http://udk.openoffice.org/cpp/man/spec/textconversion.html - */ -SAL_DLLPUBLIC sal_Size SAL_CALL rtl_convertUnicodeToText( - rtl_UnicodeToTextConverter hConverter, - rtl_UnicodeToTextContext hContext, - const sal_Unicode* pSrcBuf, sal_Size nSrcChars, - sal_Char* pDestBuf, sal_Size nDestBytes, - sal_uInt32 nFlags, sal_uInt32* pInfo, - sal_Size* pSrcCvtChars ); - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_TEXTCVT_H */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/textenc.h b/sal/inc/rtl/textenc.h deleted file mode 100644 index 676f8c23186a..000000000000 --- a/sal/inc/rtl/textenc.h +++ /dev/null @@ -1,270 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_TEXTENC_H -#define _RTL_TEXTENC_H - -#ifdef _SOLAR_RSC_INVOKED -/* Enable resources to use these values, rsc can't handle casts */ -#define RTL_TEXTENC_CAST( val ) (val) - -#else /* !_SOLAR_RSC_INVOKED */ - -#include <sal/types.h> - -/** The various supported text encodings. - - Possible values include a wide range of single- and multi-byte encodings - (ranging from RTL_TEXTENCODING_MS_1252 to RTL_TEXTENCODING_GB_18030), - the ISO 10646 (Unicode) specific encodings RTL_TEXTENCODING_UCS4 and - RTL_TEXTENCODING_UCS2 (aka RTL_TEXTENCODING_UNICODE), and - RTL_TEXTENCODING_DONTKNOW to indicate an unknown or missing encoding. - */ -typedef sal_uInt16 rtl_TextEncoding; - -#define RTL_TEXTENC_CAST( val ) ((rtl_TextEncoding) val) - -#endif /* _SOLAR_RSC_INVOKED */ - -#define RTL_TEXTENCODING_DONTKNOW (RTL_TEXTENC_CAST( 0 )) -#define RTL_TEXTENCODING_MS_1252 (RTL_TEXTENC_CAST( 1 )) -#define RTL_TEXTENCODING_APPLE_ROMAN (RTL_TEXTENC_CAST( 2 )) -#define RTL_TEXTENCODING_IBM_437 (RTL_TEXTENC_CAST( 3 )) -#define RTL_TEXTENCODING_IBM_850 (RTL_TEXTENC_CAST( 4 )) -#define RTL_TEXTENCODING_IBM_860 (RTL_TEXTENC_CAST( 5 )) -#define RTL_TEXTENCODING_IBM_861 (RTL_TEXTENC_CAST( 6 )) -#define RTL_TEXTENCODING_IBM_863 (RTL_TEXTENC_CAST( 7 )) -#define RTL_TEXTENCODING_IBM_865 (RTL_TEXTENC_CAST( 8 )) -/* Reserved: RTL_TEXTENCODING_SYSTEM (RTL_TEXTENC_CAST( 9 )) */ -#define RTL_TEXTENCODING_SYMBOL (RTL_TEXTENC_CAST( 10 )) -#define RTL_TEXTENCODING_ASCII_US (RTL_TEXTENC_CAST( 11 )) -#define RTL_TEXTENCODING_ISO_8859_1 (RTL_TEXTENC_CAST( 12 )) -#define RTL_TEXTENCODING_ISO_8859_2 (RTL_TEXTENC_CAST( 13 )) -#define RTL_TEXTENCODING_ISO_8859_3 (RTL_TEXTENC_CAST( 14 )) -#define RTL_TEXTENCODING_ISO_8859_4 (RTL_TEXTENC_CAST( 15 )) -#define RTL_TEXTENCODING_ISO_8859_5 (RTL_TEXTENC_CAST( 16 )) -#define RTL_TEXTENCODING_ISO_8859_6 (RTL_TEXTENC_CAST( 17 )) -#define RTL_TEXTENCODING_ISO_8859_7 (RTL_TEXTENC_CAST( 18 )) -#define RTL_TEXTENCODING_ISO_8859_8 (RTL_TEXTENC_CAST( 19 )) -#define RTL_TEXTENCODING_ISO_8859_9 (RTL_TEXTENC_CAST( 20 )) -#define RTL_TEXTENCODING_ISO_8859_14 (RTL_TEXTENC_CAST( 21 )) -#define RTL_TEXTENCODING_ISO_8859_15 (RTL_TEXTENC_CAST( 22 )) -#define RTL_TEXTENCODING_IBM_737 (RTL_TEXTENC_CAST( 23 )) -#define RTL_TEXTENCODING_IBM_775 (RTL_TEXTENC_CAST( 24 )) -#define RTL_TEXTENCODING_IBM_852 (RTL_TEXTENC_CAST( 25 )) -#define RTL_TEXTENCODING_IBM_855 (RTL_TEXTENC_CAST( 26 )) -#define RTL_TEXTENCODING_IBM_857 (RTL_TEXTENC_CAST( 27 )) -#define RTL_TEXTENCODING_IBM_862 (RTL_TEXTENC_CAST( 28 )) -#define RTL_TEXTENCODING_IBM_864 (RTL_TEXTENC_CAST( 29 )) -#define RTL_TEXTENCODING_IBM_866 (RTL_TEXTENC_CAST( 30 )) -#define RTL_TEXTENCODING_IBM_869 (RTL_TEXTENC_CAST( 31 )) -#define RTL_TEXTENCODING_MS_874 (RTL_TEXTENC_CAST( 32 )) -#define RTL_TEXTENCODING_MS_1250 (RTL_TEXTENC_CAST( 33 )) -#define RTL_TEXTENCODING_MS_1251 (RTL_TEXTENC_CAST( 34 )) -#define RTL_TEXTENCODING_MS_1253 (RTL_TEXTENC_CAST( 35 )) -#define RTL_TEXTENCODING_MS_1254 (RTL_TEXTENC_CAST( 36 )) -#define RTL_TEXTENCODING_MS_1255 (RTL_TEXTENC_CAST( 37 )) -#define RTL_TEXTENCODING_MS_1256 (RTL_TEXTENC_CAST( 38 )) -#define RTL_TEXTENCODING_MS_1257 (RTL_TEXTENC_CAST( 39 )) -#define RTL_TEXTENCODING_MS_1258 (RTL_TEXTENC_CAST( 40 )) -#define RTL_TEXTENCODING_APPLE_ARABIC (RTL_TEXTENC_CAST( 41 )) -#define RTL_TEXTENCODING_APPLE_CENTEURO (RTL_TEXTENC_CAST( 42 )) -#define RTL_TEXTENCODING_APPLE_CROATIAN (RTL_TEXTENC_CAST( 43 )) -#define RTL_TEXTENCODING_APPLE_CYRILLIC (RTL_TEXTENC_CAST( 44 )) -#define RTL_TEXTENCODING_APPLE_DEVANAGARI (RTL_TEXTENC_CAST( 45 )) -#define RTL_TEXTENCODING_APPLE_FARSI (RTL_TEXTENC_CAST( 46 )) -#define RTL_TEXTENCODING_APPLE_GREEK (RTL_TEXTENC_CAST( 47 )) -#define RTL_TEXTENCODING_APPLE_GUJARATI (RTL_TEXTENC_CAST( 48 )) -#define RTL_TEXTENCODING_APPLE_GURMUKHI (RTL_TEXTENC_CAST( 49 )) -#define RTL_TEXTENCODING_APPLE_HEBREW (RTL_TEXTENC_CAST( 50 )) -#define RTL_TEXTENCODING_APPLE_ICELAND (RTL_TEXTENC_CAST( 51 )) -#define RTL_TEXTENCODING_APPLE_ROMANIAN (RTL_TEXTENC_CAST( 52 )) -#define RTL_TEXTENCODING_APPLE_THAI (RTL_TEXTENC_CAST( 53 )) -#define RTL_TEXTENCODING_APPLE_TURKISH (RTL_TEXTENC_CAST( 54 )) -#define RTL_TEXTENCODING_APPLE_UKRAINIAN (RTL_TEXTENC_CAST( 55 )) -#define RTL_TEXTENCODING_APPLE_CHINSIMP (RTL_TEXTENC_CAST( 56 )) -#define RTL_TEXTENCODING_APPLE_CHINTRAD (RTL_TEXTENC_CAST( 57 )) -#define RTL_TEXTENCODING_APPLE_JAPANESE (RTL_TEXTENC_CAST( 58 )) -#define RTL_TEXTENCODING_APPLE_KOREAN (RTL_TEXTENC_CAST( 59 )) -#define RTL_TEXTENCODING_MS_932 (RTL_TEXTENC_CAST( 60 )) -#define RTL_TEXTENCODING_MS_936 (RTL_TEXTENC_CAST( 61 )) -#define RTL_TEXTENCODING_MS_949 (RTL_TEXTENC_CAST( 62 )) -#define RTL_TEXTENCODING_MS_950 (RTL_TEXTENC_CAST( 63 )) -#define RTL_TEXTENCODING_SHIFT_JIS (RTL_TEXTENC_CAST( 64 )) -#define RTL_TEXTENCODING_GB_2312 (RTL_TEXTENC_CAST( 65 )) -#define RTL_TEXTENCODING_GBT_12345 (RTL_TEXTENC_CAST( 66 )) -#define RTL_TEXTENCODING_GBK (RTL_TEXTENC_CAST( 67 )) -#define RTL_TEXTENCODING_BIG5 (RTL_TEXTENC_CAST( 68 )) -#define RTL_TEXTENCODING_EUC_JP (RTL_TEXTENC_CAST( 69 )) -#define RTL_TEXTENCODING_EUC_CN (RTL_TEXTENC_CAST( 70 )) -#define RTL_TEXTENCODING_EUC_TW (RTL_TEXTENC_CAST( 71 )) -#define RTL_TEXTENCODING_ISO_2022_JP (RTL_TEXTENC_CAST( 72 )) -#define RTL_TEXTENCODING_ISO_2022_CN (RTL_TEXTENC_CAST( 73 )) -#define RTL_TEXTENCODING_KOI8_R (RTL_TEXTENC_CAST( 74 )) -#define RTL_TEXTENCODING_UTF7 (RTL_TEXTENC_CAST( 75 )) -#define RTL_TEXTENCODING_UTF8 (RTL_TEXTENC_CAST( 76 )) -#define RTL_TEXTENCODING_ISO_8859_10 (RTL_TEXTENC_CAST( 77 )) -#define RTL_TEXTENCODING_ISO_8859_13 (RTL_TEXTENC_CAST( 78 )) -#define RTL_TEXTENCODING_EUC_KR (RTL_TEXTENC_CAST( 79 )) -#define RTL_TEXTENCODING_ISO_2022_KR (RTL_TEXTENC_CAST( 80 )) -#define RTL_TEXTENCODING_JIS_X_0201 (RTL_TEXTENC_CAST( 81 )) -#define RTL_TEXTENCODING_JIS_X_0208 (RTL_TEXTENC_CAST( 82 )) -#define RTL_TEXTENCODING_JIS_X_0212 (RTL_TEXTENC_CAST( 83 )) -#define RTL_TEXTENCODING_MS_1361 (RTL_TEXTENC_CAST( 84 )) -#define RTL_TEXTENCODING_GB_18030 (RTL_TEXTENC_CAST( 85 )) -#define RTL_TEXTENCODING_BIG5_HKSCS (RTL_TEXTENC_CAST( 86 )) -#define RTL_TEXTENCODING_TIS_620 (RTL_TEXTENC_CAST( 87 )) -#define RTL_TEXTENCODING_KOI8_U (RTL_TEXTENC_CAST( 88 )) -#define RTL_TEXTENCODING_ISCII_DEVANAGARI (RTL_TEXTENC_CAST( 89 )) -#define RTL_TEXTENCODING_JAVA_UTF8 (RTL_TEXTENC_CAST( 90 )) -#define RTL_TEXTENCODING_ADOBE_STANDARD (RTL_TEXTENC_CAST( 91 )) -#define RTL_TEXTENCODING_ADOBE_SYMBOL (RTL_TEXTENC_CAST( 92 )) -#define RTL_TEXTENCODING_PT154 (RTL_TEXTENC_CAST( 93 )) -#define RTL_TEXTENCODING_ADOBE_DINGBATS (RTL_TEXTENC_CAST( 94 )) -/* ATTENTION! Whenever some encoding is added here, make sure to update - * rtl_isOctetTextEncoding in tencinfo.c. - */ - -#define RTL_TEXTENCODING_USER_START (RTL_TEXTENC_CAST( 0x8000 )) -#define RTL_TEXTENCODING_USER_END (RTL_TEXTENC_CAST( 0xEFFF )) - -#define RTL_TEXTENCODING_UCS4 (RTL_TEXTENC_CAST( 0xFFFE )) -#define RTL_TEXTENCODING_UCS2 (RTL_TEXTENC_CAST( 0xFFFF )) -#define RTL_TEXTENCODING_UNICODE RTL_TEXTENCODING_UCS2 - -/****** Overview over the TextEncodings ***** -# Arabic (Apple Macintosh) RTL_TEXTENCODING_APPLE_ARABIC -Arabic (DOS/OS2-864) RTL_TEXTENCODING_IBM_864 -Arabic (ISO-8859-6) RTL_TEXTENCODING_ISO_8859_6 -Arabic (Windows-1256) RTL_TEXTENCODING_MS_1256 - -Baltic (DOS/OS2-775) RTL_TEXTENCODING_IBM_775 -Baltic (ISO-8859-4) RTL_TEXTENCODING_ISO_8859_4 -Baltic (Windows-1257) RTL_TEXTENCODING_MS_1257 - -Central European (Apple Macintosh) RTL_TEXTENCODING_APPLE_CENTEURO -Central European (Apple Macintosh/Croatian) RTL_TEXTENCODING_APPLE_CROATIAN -Central European (Apple Macintosh/Romanian) RTL_TEXTENCODING_APPLE_ROMANIAN -Central European (DOS/OS2-852) RTL_TEXTENCODING_IBM_852 -Central European (ISO-8859-2) RTL_TEXTENCODING_ISO_8859_2 -Central European (ISO-8859-10) RTL_TEXTENCODING_ISO_8859_10 -Central European (ISO-8859-13) RTL_TEXTENCODING_ISO_8859_13 -Central European (Windows-1250/WinLatin 2) RTL_TEXTENCODING_MS_1250 - -Chinese Simplified (Apple Macintosh) RTL_TEXTENCODING_APPLE_CHINSIMP -Chinese Simplified (EUC-CN) RTL_TEXTENCODING_EUC_CN -Chinese Simplified (GB-2312) RTL_TEXTENCODING_GB_2312 -Chinese Simplified (GBK/GB-2312-80) RTL_TEXTENCODING_GBK -# Chinese Simplified (ISO-2022-CN) RTL_TEXTENCODING_ISO_2022_CN -Chinese Simplified (Windows-936) RTL_TEXTENCODING_MS_936 -# Chinese Simplified (GB-18030) RTL_TEXTENCODING_GB_18030 - -Chinese Traditional (Apple Macintosh) RTL_TEXTENCODING_APPLE_CHINTRAD -Chinese Traditional (BIG5) RTL_TEXTENCODING_BIG5 -# Chinese Traditional (EUC-TW) RTL_TEXTENCODING_EUC_TW -Chinese Traditional (GBT-12345) RTL_TEXTENCODING_GBT_12345 -Chinese Traditional (Windows-950) RTL_TEXTENCODING_MS_950 -Chinese Traditional (BIG5-HKSCS) RTL_TEXTENCODING_BIG5_HKSCS - -Cyrillic (Apple Macintosh) RTL_TEXTENCODING_APPLE_CYRILLIC -Cyrillic (Apple Macintosh/Ukrainian) RTL_TEXTENCODING_APPLE_UKRAINIAN -Cyrillic (DOS/OS2-855) RTL_TEXTENCODING_IBM_855 -Cyrillic (DOS/OS2-866/Russian) RTL_TEXTENCODING_IBM_866 -Cyrillic (ISO-8859-5) RTL_TEXTENCODING_ISO_8859_5 -Cyrillic (KOI8-R) RTL_TEXTENCODING_KOI8_R -Cyrillic (KOI8-U) RTL_TEXTENCODING_KOI8_U -Cyrillic (Windows-1251) RTL_TEXTENCODING_MS_1251 - -Greek (Apple Macintosh) RTL_TEXTENCODING_APPLE_GREEK -Greek (DOS/OS2-737) RTL_TEXTENCODING_IBM_737 -Greek (DOS/OS2-869/Modern) RTL_TEXTENCODING_IBM_869 -Greek (ISO-8859-7) RTL_TEXTENCODING_ISO_8859_7 -Greek (Windows-1253) RTL_TEXTENCODING_MS_1253 - -# Hebrew (Apple Macintosh) RTL_TEXTENCODING_APPLE_HEBREW -Hebrew (DOS/OS2-862) RTL_TEXTENCODING_IBM_862 -Hebrew (ISO-8859-8) RTL_TEXTENCODING_ISO_8859_8 -Hebrew (Windows-1255) RTL_TEXTENCODING_MS_1255 - -Korean (Apple Macintosh) RTL_TEXTENCODING_APPLE_KOREAN -Korean (EUC-KR) RTL_TEXTENCODING_EUC_KR -# Korean (ISO-2022-KR) RTL_TEXTENCODING_ISO_2022_KR -Korean (Windows-Wansung-949) RTL_TEXTENCODING_MS_949 -Korean (Windows-Johab-1361) RTL_TEXTENCODING_MS_1361 - -Latin 3 (ISO-8859-3) RTL_TEXTENCODING_ISO_8859_3 - -Indian (ISCII Devanagari) RTL_TEXTENCODING_ISCII_DEVANAGARI - -Japanese (Apple Macintosh) RTL_TEXTENCODING_APPLE_JAPANESE -Japanese (EUC-JP) RTL_TEXTENCODING_EUC_JP -# Japanese (ISO-2022-JP) RTL_TEXTENCODING_ISO_2022_JP -Japanese (Shift-JIS) RTL_TEXTENCODING_SHIFT_JIS -Japanese (Windows-932) RTL_TEXTENCODING_MS_932 - -Symbol RTL_TEXTENCODING_SYMBOL - -# Thai (Apple Macintosh) RTL_TEXTENCODING_APPLE_THAI -Thai (Dos/Windows-874) RTL_TEXTENCODING_MS_874 -Thai (TIS 620) RTL_TEXTENCODING_TIS_620 - -Turkish (Apple Macintosh) RTL_TEXTENCODING_APPLE_TURKISH -Turkish (DOS/OS2-857) RTL_TEXTENCODING_IBM_857 -Turkish (ISO-8859-9) RTL_TEXTENCODING_ISO_8859_9 -Turkish (Windows-1254) RTL_TEXTENCODING_MS_1254 - -Unicode (UTF-7) RTL_TEXTENCODING_UTF7 -Unicode (UTF-8) RTL_TEXTENCODING_UTF8 -Unicode (Java's modified UTF-8) RTL_TEXTENCODING_JAVA_UTF8 - -Vietnamese (Windows-1258) RTL_TEXTENCODING_MS_1258 - -Western (Apple Macintosh) RTL_TEXTENCODING_APPLE_ROMAN -Western (Apple Macintosh/Icelandic) RTL_TEXTENCODING_APPLE_ICELAND -Western (ASCII/US) RTL_TEXTENCODING_ASCII_US -Western (DOS/OS2-437/US) RTL_TEXTENCODING_IBM_437 -Western (DOS/OS2-850/International) RTL_TEXTENCODING_IBM_850 -Western (DOS/OS2-860/Portugese) RTL_TEXTENCODING_IBM_860 -Western (DOS/OS2-861/Icelandic) RTL_TEXTENCODING_IBM_861 -Western (DOS/OS2-863/Canadian-French) RTL_TEXTENCODING_IBM_863 -Western (DOS/OS2-865/Nordic) RTL_TEXTENCODING_IBM_865 -Western (ISO-8859-1) RTL_TEXTENCODING_ISO_8859_1 -Western (ISO-8859-14) RTL_TEXTENCODING_ISO_8859_14 -Western (ISO-8859-15/EURO) RTL_TEXTENCODING_ISO_8859_15 -Western (Window-1252/WinLatin 1) RTL_TEXTENCODING_MS_1252 - -Not known and currently not supported -# RTL_TEXTENCODING_APPLE_DEVANAGARI -# RTL_TEXTENCODING_APPLE_FARSI -# RTL_TEXTENCODING_APPLE_GUJARATI -# RTL_TEXTENCODING_APPLE_GURMUKHI - -Only for internal implementations and not useful for user interface. -These encodings are not used for text encodings, only used for -font-/textoutput encodings. -Japanese (JIS 0201) RTL_TEXTENCODING_JISX_0201 -Japanese (JIS 0208) RTL_TEXTENCODING_JISX_0208 -Japanese (JIS 0212) RTL_TEXTENCODING_JISX_0212 - -# Currently not implemented -*/ - -#endif /* _RTL_TEXTENC_H */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/unload.h b/sal/inc/rtl/unload.h deleted file mode 100644 index 118b5cce9127..000000000000 --- a/sal/inc/rtl/unload.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _RTL_UNLOAD_H_ -#define _RTL_UNLOAD_H_ - -#include "sal/config.h" - -#include "osl/interlck.h" -#include "osl/time.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -/** @file - Backwards-compatibility remainders of a removed library unloading feature. -*/ - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** Backwards-compatibility remainder of a removed library unloading feature. - - @deprecated Do not use. -*/ -typedef struct _rtl_ModuleCount -{ - void ( SAL_CALL * acquire ) ( struct _rtl_ModuleCount * that ); - void ( SAL_CALL * release ) ( struct _rtl_ModuleCount * that ); -}rtl_ModuleCount; - -/** Backwards-compatibility remainder of a removed library unloading feature. - - @deprecated Do not use. -*/ -#define MODULE_COUNT_INIT \ -{ {rtl_moduleCount_acquire,rtl_moduleCount_release}, rtl_moduleCount_canUnload, 0, {0, 0}} - -/** Backwards-compatibility remainder of a removed library unloading feature. - - @deprecated Do not use. -*/ -typedef struct _rtl_StandardModuleCount -{ - rtl_ModuleCount modCnt; - sal_Bool ( *canUnload ) ( struct _rtl_StandardModuleCount* a, TimeValue* libUnused); - oslInterlockedCount counter; - TimeValue unusedSince; -} rtl_StandardModuleCount; - -/** Backwards-compatibility remainder of a removed library unloading feature. - - @deprecated Do not use. -*/ -SAL_DLLPUBLIC void rtl_moduleCount_acquire(rtl_ModuleCount * that ); - -/** Backwards-compatibility remainder of a removed library unloading feature. - - @deprecated Do not use. -*/ -SAL_DLLPUBLIC void rtl_moduleCount_release( rtl_ModuleCount * that ); - -/** Backwards-compatibility remainder of a removed library unloading feature. - - @deprecated Do not use. -*/ -SAL_DLLPUBLIC sal_Bool rtl_moduleCount_canUnload( rtl_StandardModuleCount * that, TimeValue* libUnused); - -#ifdef __cplusplus -} -#endif - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/uri.h b/sal/inc/rtl/uri.h deleted file mode 100644 index 251af025ef82..000000000000 --- a/sal/inc/rtl/uri.h +++ /dev/null @@ -1,352 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_URI_H_ -#define _RTL_URI_H_ - -#include "sal/config.h" - -#include "rtl/textenc.h" -#include "rtl/ustring.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -#if defined __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** Various predefined URI 'char classes.' - - A 'char class' defines which (ASCII) characters can be written 'as they - are' in a part of a Uri, and which characters have to be written using - escape sequences ('%' followed by two hex digits). Characters outside - the ASCII range are always written using escape sequences. - - If there are other frequently used char classes, they can be added to - this enumeration; the function rtl_getUriCharClass() has to be adapted - then, too. - */ -typedef enum -{ - /** The empty char class. - - All characters are written using escape sequences. - */ - rtl_UriCharClassNone, - - /** The RFC 2732 @<uric> char class. - - @verbatim - The 'valid' characters are !$&'()*+,-./:;=?@[]_~ plus digits and - letters. - @endverbatim - */ - rtl_UriCharClassUric, - - /** The RFC 2396 @<uric_no_slash> char class. - - @verbatim - The 'valid' characters are !$&'()*+,-.:;=?@_~ plus digits and letters. - @endverbatim - */ - rtl_UriCharClassUricNoSlash, - - /** The RFC 2396 @<rel_segment> char class. - - @verbatim - The 'valid' characters are !$&'()*+,-.;=@_~ plus digits and letters. - @endverbatim - */ - rtl_UriCharClassRelSegment, - - /** The RFC 2396 @<reg_name> char class. - - @verbatim - The 'valid' characters are !$&'()*+,-.:;=@_~ plus digits and letters. - @endverbatim - */ - rtl_UriCharClassRegName, - - /** The RFC 2396 @<userinfo> char class. - - @verbatim - The 'valid' characters are !$&'()*+,-.:;=_~ plus digits and letters. - @endverbatim - */ - rtl_UriCharClassUserinfo, - - /** The RFC 2396 @<pchar> char class. - - @verbatim - The 'valid' characters are !$&'()*+,-.:=@_~ plus digits and letters. - @endverbatim - */ - rtl_UriCharClassPchar, - - /** The char class for the values of uno URL parameters. - - @verbatim - The 'valid' characters are !$&'()*+-./:?@_~ plus digits and letters. - @endverbatim - */ - rtl_UriCharClassUnoParamValue, - - rtl_UriCharClass_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} -rtl_UriCharClass; - -/** The mechanism describing how escape sequences in the input of - rtl_uriEncode() are handled. - */ -typedef enum -{ - /** The special meaning of '%' is ignored (i.e., there are by definition - no escape sequences in the input). - - This mechanism is useful to encode user input as part of a URI (e.g., - the user-supplied password in an ftp URL---'%20abcde' is a valid - password, so do not assume that the '%20' is an escaped space). - */ - rtl_UriEncodeIgnoreEscapes, - - /** All escape sequences ('%' followed by two hex digits) are kept intact, - even if they represent characters that need not be escaped or if they - do not even map to characters in the given charset. - - This mechanism is useful when passing on complete URIs more or less - unmodified (e.g., within an HTTP proxy): missing escape sequences are - added, but existing escape sequences are not touched (except that any - lower case hex digits are replaced by upper case hex digits). - */ - rtl_UriEncodeKeepEscapes, - - /** All escape sequences ('%' followed by two hex digits) are resolved in - a first step; only those that represent characters that need to be - escaped are kept intact. - - This mechanism is useful to properly encode complete URIs entered by - the user: the URI is brought into a 'canonic form,' but care is taken - not to damage (valid) escape sequences the (careful) user already - entered as such. - */ - rtl_UriEncodeCheckEscapes, - - /** Like rtl_UriEncodeIgnoreEscapes, but indicating failure when converting - unmappable characters. - - @since UDK 3.2.0 - */ - rtl_UriEncodeStrict, - - /** Like rtl_UriEncodeKeepEscapes, but indicating failure when converting - unmappable characters. - - @since UDK 3.2.7 - */ - rtl_UriEncodeStrictKeepEscapes, - - rtl_UriEncode_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} -rtl_UriEncodeMechanism; - -/** The mechanism describing how rtl_uriDecode() translates (part of) a URI - into a Unicode string. - */ -typedef enum -{ - /** The text is returned completely unmodified. - */ - rtl_UriDecodeNone, - - /** The text is returned in the form of an IURI (cf. - draft-masinter-url-i18n-05.txt). - - All escape sequences representing ASCII characters (%00--%7F) are - kept, all other escape sequences are interpreted as UTF-8 characters - and translated to Unicode, if possible. - */ - rtl_UriDecodeToIuri, - - /** The text is decoded. - - All escape sequences representing characters from the given charset - are decoded and translated to Unicode, if possible. - */ - rtl_UriDecodeWithCharset, - - /** Like rtl_UriDecodeWithCharset, but indicating failure when converting - unmappable characters. - - @since UDK 3.2.0 - */ - rtl_UriDecodeStrict, - - rtl_UriDecode_FORCE_EQUAL_SIZE = SAL_MAX_ENUM -} -rtl_UriDecodeMechanism; - -/** Map a predefined rtl_UriCharClass to a form usable by rtl_uriEncode(). - - The function rtl_uriEncode() expects an array of 128 booleans, and this - function maps rtl_UriCharClass enumeration members to such arrays. - - @param eCharClass - Any valid member of rtl_UriCharClass. - - @return - An array of 128 booleans, to be used in calls to rtl_uriEncode(). - */ -SAL_DLLPUBLIC sal_Bool const * SAL_CALL rtl_getUriCharClass(rtl_UriCharClass eCharClass) - SAL_THROW_EXTERN_C(); - -/** Encode a text as (part of) a URI. - - @param pText - Any Unicode string. Must not be null. - - @param pCharClass - A char class, represented as an array of 128 booleans (true means keep the - corresponding ASCII character unencoded, false means encode it). Must not - be null, and the boolean corresponding to the percent sign (0x25) must be - false. (See rtl_getUriCharClass() for a function mapping from - rtl_UriCharClass to such arrays.) - - @param eMechanism - The mechanism describing how escape sequences in the input text are - handled. - - @param eCharset - When Unicode characters from the input text have to be written using - escape sequences (because they are either outside the ASCII range or do - not belong to the given char class), they are first translated into this - charset before being encoded using escape sequences. - - Also, if the encode mechanism is rtl_UriEncodeCheckEscapes, all escape - sequences already present in the input text are interpreted as characters - from this charset. - - @param pResult - Returns an encoded representation of the input text. Must itself not be - null, and must point to either null or a valid string. - - If the encode mechanism is rtl_UriEncodeStrict, and pText cannot be - converted to eCharset because it contains unmappable characters (which - implies that pText is not empty), then an empty string is returned. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uriEncode( - rtl_uString * pText, - sal_Bool const * pCharClass, - rtl_UriEncodeMechanism eMechanism, - rtl_TextEncoding eCharset, - rtl_uString ** pResult) - SAL_THROW_EXTERN_C(); - -/** Decode (a part of) a URI. - - @param pText - Any Unicode string. Must not be null. (If the input is indeed part of a - valid URI, this string will only contain a subset of the ASCII characters, - but this function also handles other Unicode characters properly.) - - @param eMechanism - The mechanism describing how the input text is translated into a Unicode - string. - - @param eCharset - When the decode mechanism is rtl_UriDecodeWithCharset, all escape - sequences in the input text are interpreted as characters from this - charset. Those characters are translated to Unicode characters in the - resulting output, if possible. - - When the decode mechanism is rtl_UriDecodeNone or rtl_UriDecodeToIuri, - this parameter is ignored (and is best specified as - RTL_TEXTENCODING_UTF8). - - @param pResult - Returns a decoded representation of the input text. Must itself not be - null, and must point to either null or a valid string. - - If the decode mechanism is rtl_UriDecodeStrict, and pText cannot be - converted to eCharset because it contains (encodings of) unmappable - characters (which implies that pText is not empty), then an empty string is - returned. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uriDecode( - rtl_uString * pText, - rtl_UriDecodeMechanism eMechanism, - rtl_TextEncoding eCharset, - rtl_uString ** pResult) - SAL_THROW_EXTERN_C(); - -/** Convert a relative URI reference into an absolute one. - - A URI reference is a URI plus an optional @<"#" fragment> part. - - This function uses the algorithm described in RFC 2396, section 5.2, with - the following clarifications: (1) Backwards-compatible relative URIs - starting with a scheme component (see RFC 2396, section 5.2, step 3) are not - supported. (2) Segments "." and ".." within the path of the base URI are - not considered special, RFC 2396 seems a bit unlcear about that point. - (3) Erroneous excess segments ".." within the path of the relative URI (if - it is indeed relative) are left intact, as the examples in RFC 2396, - section C.2, suggest. (4) If the relative URI is a reference to the - "current document," the "current document" is taken to be the base URI. - - This function signals exceptions by returning false and letting pException - point to a message explaining the exception. - - @param pBaseUriRef - An absolute, hierarchical URI reference that serves as the base URI. If it - has to be inspected (i.e., pRelUriRef is not an absolute URI already), and - if it either is not an absolute URI (i.e., does not begin with a - @<scheme ":"> part) or has a path that is non-empty but does not start - with "/", an exception will be signaled. - - @param pRelUriRef - An URI reference that may be either absolute or relative. If it is - absolute, it will be returned unmodified (and it need not be hierarchical - then). - - @param pResult - Returns an absolute URI reference. Must itself not be null, and must point - to either null or a valid string. If an exception is signalled, it is left - unchanged. - - @param pException - Returns an explanatory message in case an exception is signalled. Must - itself not be null, and must point to either null or a valid string. If no - exception is signalled, it is left unchanged. - - @return - True if no exception is signalled, otherwise false. - */ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_uriConvertRelToAbs( - rtl_uString * pBaseUriRef, - rtl_uString * pRelUriRef, - rtl_uString ** pResult, - rtl_uString ** pException) - SAL_THROW_EXTERN_C(); - -#if defined __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _RTL_URI_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/uri.hxx b/sal/inc/rtl/uri.hxx deleted file mode 100644 index 6e9ca00281c3..000000000000 --- a/sal/inc/rtl/uri.hxx +++ /dev/null @@ -1,144 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_URI_HXX_ -#define _RTL_URI_HXX_ - -#include "rtl/malformeduriexception.hxx" -#include "rtl/uri.h" -#include "rtl/textenc.h" -#include "rtl/ustring.hxx" -#include "sal/types.h" - -namespace rtl { - -/** A wrapper around the C functions from <rtl/uri.h>. - */ -class Uri -{ -public: - /** A wrapper around rtl_uriEncode() from <rtl/uri.h> (see there), using - an array of 128 booleans as char class. - */ - static inline rtl::OUString encode(rtl::OUString const & rText, - sal_Bool const * pCharClass, - rtl_UriEncodeMechanism eMechanism, - rtl_TextEncoding eCharset) - SAL_THROW(()); - - /** A wrapper around rtl_uriEncode() from <rtl/uri.h> (see there), using - a predefined rtl_UriCharClass enumeration member. - */ - static inline rtl::OUString encode(rtl::OUString const & rText, - rtl_UriCharClass eCharClass, - rtl_UriEncodeMechanism eMechanism, - rtl_TextEncoding eCharset) - SAL_THROW(()); - - /** A wrapper around rtl_uriDecode() from <rtl/uri.h> (see there). - */ - static inline rtl::OUString decode(rtl::OUString const & rText, - rtl_UriDecodeMechanism eMechanism, - rtl_TextEncoding eCharset) - SAL_THROW(()); - - /** A wrapper around rtl_uriConvertRelToAbs() from <rtl/uri.h> (see there). - - @exception MalformedUriException - Thrown in case rtl_uriConvertRelToAbs() signals an exception due to a - malformed base URI. - */ - static inline rtl::OUString convertRelToAbs( - rtl::OUString const & rBaseUriRef, rtl::OUString const & rRelUriRef); - -private: - /** not implemented */ - Uri(); - - /** not implemented */ - Uri(Uri &); - - /** not implemented */ - ~Uri(); - - /** not implemented */ - void operator =(Uri); -}; - -inline rtl::OUString Uri::encode(rtl::OUString const & rText, - sal_Bool const * pCharClass, - rtl_UriEncodeMechanism eMechanism, - rtl_TextEncoding eCharset) - SAL_THROW(()) -{ - rtl::OUString aResult; - rtl_uriEncode(const_cast< rtl::OUString & >(rText).pData, - pCharClass, - eMechanism, - eCharset, - &aResult.pData); - return aResult; -} - -inline rtl::OUString Uri::encode(rtl::OUString const & rText, - rtl_UriCharClass eCharClass, - rtl_UriEncodeMechanism eMechanism, - rtl_TextEncoding eCharset) - SAL_THROW(()) -{ - rtl::OUString aResult; - rtl_uriEncode(const_cast< rtl::OUString & >(rText).pData, - rtl_getUriCharClass(eCharClass), - eMechanism, - eCharset, - &aResult.pData); - return aResult; -} - -inline rtl::OUString Uri::decode(rtl::OUString const & rText, - rtl_UriDecodeMechanism eMechanism, - rtl_TextEncoding eCharset) - SAL_THROW(()) -{ - rtl::OUString aResult; - rtl_uriDecode(const_cast< rtl::OUString & >(rText).pData, - eMechanism, - eCharset, - &aResult.pData); - return aResult; -} - -inline rtl::OUString Uri::convertRelToAbs(rtl::OUString const & rBaseUriRef, - rtl::OUString const & rRelUriRef) -{ - rtl::OUString aResult; - rtl::OUString aException; - if (!rtl_uriConvertRelToAbs( - const_cast< rtl::OUString & >(rBaseUriRef).pData, - const_cast< rtl::OUString & >(rRelUriRef).pData, &aResult.pData, - &aException.pData)) - throw MalformedUriException(aException); - return aResult; -} - -} - -#endif // _RTL_URI_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/ustrbuf.h b/sal/inc/rtl/ustrbuf.h deleted file mode 100644 index 7df10c18cc40..000000000000 --- a/sal/inc/rtl/ustrbuf.h +++ /dev/null @@ -1,212 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_USTRBUF_H_ -#define _RTL_USTRBUF_H_ - -#include "sal/config.h" - -#include "rtl/ustring.h" -#include "sal/saldllapi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Allocates a new <code>String</code> that contains characters from - the character array argument. - - The <code>count</code> argument specifies - the length of the array. The initial capacity of the string buffer is - <code>16</code> plus the length of the string argument. - - @param newStr out parameter, contains the new string. The reference count is 1. - @param value the initial value of the string. - @param count the length of value. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uStringbuffer_newFromStr_WithLength( - rtl_uString ** newStr, - const sal_Unicode * value, - sal_Int32 count ); - -/** - Allocates a new <code>String</code> that contains the same sequence of - characters as the string argument. - - The initial capacity is the larger of: - <ul> - <li> The <code>bufferLen</code> argument. - <li> The <code>length</code> of the string argument. - </ul> - - @param newStr out parameter, contains the new string. The reference count is 1. - @param capacity the initial len of the string buffer. - @param oldStr the initial value of the string. - @return the new capacity of the string buffer - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_uStringbuffer_newFromStringBuffer( - rtl_uString ** newStr, - sal_Int32 capacity, - rtl_uString * oldStr ); - -/** - Ensures that the capacity of the buffer is at least equal to the - specified minimum. - - If the current capacity of this string buffer is less than the - argument, then a new internal buffer is allocated with greater - capacity. The new capacity is the larger of: - <ul> - <li>The <code>minimumCapacity</code> argument. - <li>Twice the old capacity, plus <code>2</code>. - </ul> - If the <code>minimumCapacity</code> argument is nonpositive, this - method takes no action and simply returns. - - @param[in,out] This the String to operate on. - @param[in,out] capacity in: old capacity, out: new capacity. - @param[in] minimumCapacity the minimum desired capacity. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uStringbuffer_ensureCapacity( - rtl_uString ** This, - sal_Int32* capacity, - sal_Int32 minimumCapacity); - -/** - Inserts the string representation of the <code>str</code> array - argument into this string buffer. - - The characters of the array argument are inserted into the - contents of this string buffer at the position indicated by - <code>offset</code>. The length of this string buffer increases by - the length of the argument. - - @param This The string, on that the operation should take place - @param capacity the capacity of the string buffer - @param offset the offset. - @param str a character array. - @param len the number of characters to append. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uStringbuffer_insert( - /*inout*/rtl_uString ** This, - /*inout*/sal_Int32 * capacity, - sal_Int32 offset, - const sal_Unicode * str, - sal_Int32 len); - -/** - Inserts a single UTF-32 character into this string buffer. - - <p>The single UTF-32 character will be represented within the string buffer - as either one or two UTF-16 code units.</p> - - @param pThis the string buffer on which the operation is performed - - @param capacity the capacity of the string buffer - - @param offset the offset into this string buffer (from zero to the length - of this string buffer, inclusive) - - @param c a well-formed UTF-32 code unit (that is, a value in the range - <code>0</code>–<code>0x10FFFF</code>, but excluding - <code>0xD800</code>–<code>0xDFFF</code>) - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uStringbuffer_insertUtf32( - rtl_uString ** pThis, sal_Int32 * capacity, sal_Int32 offset, sal_uInt32 c) - SAL_THROW_EXTERN_C(); - -/** - Inserts the 8-Bit ASCII string representation of the <code>str</code> - array argument into this string buffer. - - Since this function is optimized - for performance, the ASCII character values are not converted in any way. - The caller has to make sure that all ASCII characters are in the allowed - range between 0 and 127. - <p> - The characters of the array argument are inserted into the - contents of this string buffer at the position indicated by - <code>offset</code>. The length of this string buffer increases by - the length of the argument. - - @param This The string, on that the operation should take place - @param capacity the capacity of the string buffer - @param offset the offset. - @param str a character array. - @param len the number of characters to append. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uStringbuffer_insert_ascii( - /*inout*/rtl_uString ** This, - /*inout*/sal_Int32 * capacity, - sal_Int32 offset, - const sal_Char * str, - sal_Int32 len); - -/** - Removes the characters in a substring of this sequence. - - The substring begins at the specified <code>start</code> and - is <code>len</code> characters long. - - start must be >= 0 && <= This->length - - @param[in,out] This The String to operate on. - @param[in] start The beginning index, inclusive - @param[in] len The substring length - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uStringbuffer_remove( - rtl_uString ** This, - sal_Int32 start, - sal_Int32 len ); - -/** - Returns an immutable rtl_uString object, while clearing the string buffer. - - This method is primarily used to allow these completed - string allocation events to be traced. - - @param ppThis The string, on that the operation should take place - @param nCapacity pointer to the capacity of the string buffer - - @since LibreOffice 3.6 - */ -SAL_DLLPUBLIC rtl_uString * SAL_CALL rtl_uStringBuffer_makeStringAndClear( - /*inout*/ rtl_uString ** ppThis, - sal_Int32 *nCapacity ); - -/** - References and returns an immutable rtl_uString object, from a mutable - string-buffer object. - - This method is primarily used to allow legacy 'String' class - conversions to OUString to be accurately traced. - - @param pThis The string, on that the operation should take place - - @since LibreOffice 3.6 - */ -SAL_DLLPUBLIC rtl_uString * SAL_CALL rtl_uStringBuffer_refReturn( rtl_uString *pThis ); - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_USTRBUF_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/ustrbuf.hxx b/sal/inc/rtl/ustrbuf.hxx deleted file mode 100644 index b648714aad97..000000000000 --- a/sal/inc/rtl/ustrbuf.hxx +++ /dev/null @@ -1,1386 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_USTRBUF_HXX_ -#define _RTL_USTRBUF_HXX_ - -#include "sal/config.h" - -#include <cassert> -#include <string.h> - -#include <osl/diagnose.h> -#include <rtl/ustrbuf.h> -#include <rtl/ustring.hxx> -#include <rtl/stringutils.hxx> -#include <sal/types.h> - -#ifdef RTL_FAST_STRING -#include <rtl/stringconcat.hxx> -#endif - -// The unittest uses slightly different code to help check that the proper -// calls are made. The class is put into a different namespace to make -// sure the compiler generates a different (if generating also non-inline) -// copy of the function and does not merge them together. The class -// is "brought" into the proper rtl namespace by a typedef below. -#ifdef RTL_STRING_UNITTEST -#define rtl rtlunittest -#endif - -namespace rtl -{ - -#ifdef RTL_STRING_UNITTEST -#undef rtl -#endif - -/** A string buffer implements a mutable sequence of characters. - <p> - String buffers are safe for use by multiple threads. The methods - are synchronized where necessary so that all the operations on any - particular instance behave as if they occur in some serial order. - <p> - String buffers are used by the compiler to implement the binary - string concatenation operator <code>+</code>. For example, the code: - <p><blockquote><pre> - x = "a" + 4 + "c" - </pre></blockquote><p> - is compiled to the equivalent of: - <p><blockquote><pre> - x = new OUStringBuffer().append("a").append(4).append("c") - .makeStringAndClear() - </pre></blockquote><p> - The principal operations on a <code>OUStringBuffer</code> are the - <code>append</code> and <code>insert</code> methods, which are - overloaded so as to accept data of any type. Each effectively - converts a given datum to a string and then appends or inserts the - characters of that string to the string buffer. The - <code>append</code> method always adds these characters at the end - of the buffer; the <code>insert</code> method adds the characters at - a specified point. - <p> - For example, if <code>z</code> refers to a string buffer object - whose current contents are "<code>start</code>", then - the method call <code>z.append("le")</code> would cause the string - buffer to contain "<code>startle</code>", whereas - <code>z.insert(4, "le")</code> would alter the string buffer to - contain "<code>starlet</code>". - <p> - Every string buffer has a capacity. As long as the length of the - character sequence contained in the string buffer does not exceed - the capacity, it is not necessary to allocate a new internal - buffer array. If the internal buffer overflows, it is - automatically made larger. - */ -class SAL_WARN_UNUSED OUStringBuffer -{ -public: - /** - Constructs a string buffer with no characters in it and an - initial capacity of 16 characters. - */ - OUStringBuffer() - : pData(NULL) - , nCapacity( 16 ) - { - rtl_uString_new_WithLength( &pData, nCapacity ); - } - - /** - Allocates a new string buffer that contains the same sequence of - characters as the string buffer argument. - - @param value a <code>OUStringBuffer</code>. - */ - OUStringBuffer( const OUStringBuffer & value ) - : pData(NULL) - , nCapacity( value.nCapacity ) - { - rtl_uStringbuffer_newFromStringBuffer( &pData, value.nCapacity, value.pData ); - } - - /** - Constructs a string buffer with no characters in it and an - initial capacity specified by the <code>length</code> argument. - - @param length the initial capacity. - */ - explicit OUStringBuffer(int length) - : pData(NULL) - , nCapacity( length ) - { - rtl_uString_new_WithLength( &pData, length ); - } - - /** - Constructs a string buffer so that it represents the same - sequence of characters as the string argument. - - The initial - capacity of the string buffer is <code>16</code> plus the length - of the string argument. - - @param value the initial contents of the buffer. - */ - OUStringBuffer(const OUString& value) - : pData(NULL) - , nCapacity( value.getLength() + 16 ) - { - rtl_uStringbuffer_newFromStr_WithLength( &pData, value.getStr(), value.getLength() ); - } - - template< typename T > - OUStringBuffer( T& literal, typename internal::ConstCharArrayDetector< T, internal::Dummy >::Type = internal::Dummy() ) - : pData(NULL) - , nCapacity( internal::ConstCharArrayDetector< T, void >::size - 1 + 16 ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_uString_newFromLiteral( &pData, literal, internal::ConstCharArrayDetector< T, void >::size - 1, 16 ); -#ifdef RTL_STRING_UNITTEST - rtl_string_unittest_const_literal = true; -#endif - } - -#ifdef RTL_STRING_UNITTEST - /** - * Only used by unittests to detect incorrect conversions. - * @internal - */ - template< typename T > - OUStringBuffer( T&, typename internal::ExceptConstCharArrayDetector< T >::Type = internal::Dummy() ) - { - pData = 0; - nCapacity = 10; - rtl_uString_newFromLiteral( &pData, "!!br0ken!!", 10, 0 ); // set to garbage - rtl_string_unittest_invalid_conversion = true; - } - /** - * Only used by unittests to detect incorrect conversions. - * @internal - */ - template< typename T > - OUStringBuffer( const T&, typename internal::ExceptCharArrayDetector< T >::Type = internal::Dummy() ) - { - pData = 0; - nCapacity = 10; - rtl_uString_newFromLiteral( &pData, "!!br0ken!!", 10, 0 ); // set to garbage - rtl_string_unittest_invalid_conversion = true; - } -#endif - -#ifdef RTL_FAST_STRING - /** - @overload - @internal - */ - template< typename T1, typename T2 > - OUStringBuffer( const OUStringConcat< T1, T2 >& c ) - { - const sal_Int32 l = c.length(); - nCapacity = l + 16; - pData = rtl_uString_alloc( nCapacity ); - sal_Unicode* end = c.addData( pData->buffer ); - *end = '\0'; - pData->length = end - pData->buffer; - // TODO realloc in case pData->>length is noticeably smaller than l ? - } -#endif - /** Assign to this a copy of value. - */ - OUStringBuffer& operator = ( const OUStringBuffer& value ) - { - if (this != &value) - { - rtl_uStringbuffer_newFromStringBuffer(&pData, - value.nCapacity, - value.pData); - nCapacity = value.nCapacity; - } - return *this; - } - - /** - Release the string data. - */ - ~OUStringBuffer() - { - rtl_uString_release( pData ); - } - - /** - Fill the string data in the new string and clear the buffer. - - This method is more efficient than the contructor of the string. It does - not copy the buffer. - - @return the string previously contained in the buffer. - */ - OUString makeStringAndClear() - { - return OUString( - rtl_uStringBuffer_makeStringAndClear( &pData, &nCapacity ), - SAL_NO_ACQUIRE ); - } - - /** - Returns the length (character count) of this string buffer. - - @return the number of characters in this string buffer. - */ - sal_Int32 getLength() const - { - return pData->length; - } - - /** - Checks if a string buffer is empty. - - @return true if the string buffer is empty; - false, otherwise. - - @since LibreOffice 4.1 - */ - bool isEmpty() const SAL_THROW(()) - { - return pData->length == 0; - } - - /** - Returns the current capacity of the String buffer. - - The capacity - is the amount of storage available for newly inserted - characters. The real buffer size is 2 bytes longer, because - all strings are 0 terminated. - - @return the current capacity of this string buffer. - */ - sal_Int32 getCapacity() const - { - return nCapacity; - } - - /** - Ensures that the capacity of the buffer is at least equal to the - specified minimum. - - The new capacity will be at least as large as the maximum of the current - length (so that no contents of the buffer is destroyed) and the given - minimumCapacity. If the given minimumCapacity is negative, nothing is - changed. - - @param minimumCapacity the minimum desired capacity. - */ - void ensureCapacity(sal_Int32 minimumCapacity) - { - rtl_uStringbuffer_ensureCapacity( &pData, &nCapacity, minimumCapacity ); - } - - /** - Sets the length of this String buffer. - - If the <code>newLength</code> argument is less than the current - length of the string buffer, the string buffer is truncated to - contain exactly the number of characters given by the - <code>newLength</code> argument. - <p> - If the <code>newLength</code> argument is greater than or equal - to the current length, sufficient null characters - (<code>'\u0000'</code>) are appended to the string buffer so that - length becomes the <code>newLength</code> argument. - <p> - The <code>newLength</code> argument must be greater than or equal - to <code>0</code>. - - @param newLength the new length of the buffer. - */ - void setLength(sal_Int32 newLength) - { - assert(newLength >= 0); - // Avoid modifications if pData points to const empty string: - if( newLength != pData->length ) - { - if( newLength > nCapacity ) - rtl_uStringbuffer_ensureCapacity(&pData, &nCapacity, newLength); - else - pData->buffer[newLength] = 0; - pData->length = newLength; - } - } - - /** - Returns the character at a specific index in this string buffer. - - The first character of a string buffer is at index - <code>0</code>, the next at index <code>1</code>, and so on, for - array indexing. - <p> - The index argument must be greater than or equal to - <code>0</code>, and less than the length of this string buffer. - - @param index the index of the desired character. - @return the character at the specified index of this string buffer. - */ - SAL_DEPRECATED("use rtl::OUStringBuffer::operator [] instead") - sal_Unicode charAt( sal_Int32 index ) const - { - assert(index >= 0 && index < pData->length); - return pData->buffer[ index ]; - } - - /** - The character at the specified index of this string buffer is set - to <code>ch</code>. - - The index argument must be greater than or equal to - <code>0</code>, and less than the length of this string buffer. - - @param index the index of the character to modify. - @param ch the new character. - */ - SAL_DEPRECATED("use rtl::OUStringBuffer::operator [] instead") - OUStringBuffer & setCharAt(sal_Int32 index, sal_Unicode ch) - { - assert(index >= 0 && index < pData->length); - pData->buffer[ index ] = ch; - return *this; - } - - /** - Return a null terminated unicode character array. - */ - const sal_Unicode* getStr() const { return pData->buffer; } - - /** - Access to individual characters. - - @param index must be non-negative and less than length. - - @return a reference to the character at the given index. - - @since LibreOffice 3.5 - */ - sal_Unicode & operator [](sal_Int32 index) - { - assert(index >= 0 && index < pData->length); - return pData->buffer[index]; - } - - /** - Return a OUString instance reflecting the current content - of this OUStringBuffer. - */ - const OUString toString() const - { - return OUString(pData->buffer, pData->length); - } - - /** - Appends the string to this string buffer. - - The characters of the <code>OUString</code> argument are appended, in - order, to the contents of this string buffer, increasing the - length of this string buffer by the length of the argument. - - @param str a string. - @return this string buffer. - */ - OUStringBuffer & append(const OUString &str) - { - return append( str.getStr(), str.getLength() ); - } - - /** - Appends the content of a stringbuffer to this string buffer. - - The characters of the <code>OUStringBuffer</code> argument are appended, in - order, to the contents of this string buffer, increasing the - length of this string buffer by the length of the argument. - - @param str a string. - @return this string buffer. - - @since LibreOffice 4.0 - */ - OUStringBuffer & append(const OUStringBuffer &str) - { - if(str.getLength() > 0) - { - append( str.getStr(), str.getLength() ); - } - return *this; - } - - /** - Appends the string representation of the <code>char</code> array - argument to this string buffer. - - The characters of the array argument are appended, in order, to - the contents of this string buffer. The length of this string - buffer increases by the length of the argument. - - @param str the characters to be appended. - @return this string buffer. - */ - OUStringBuffer & append( const sal_Unicode * str ) - { - return append( str, rtl_ustr_getLength( str ) ); - } - - /** - Appends the string representation of the <code>char</code> array - argument to this string buffer. - - Characters of the character array <code>str</code> are appended, - in order, to the contents of this string buffer. The length of this - string buffer increases by the value of <code>len</code>. - - @param str the characters to be appended; must be non-null, and must - point to at least len characters - @param len the number of characters to append; must be non-negative - @return this string buffer. - */ - OUStringBuffer & append( const sal_Unicode * str, sal_Int32 len) - { - // insert behind the last character - rtl_uStringbuffer_insert( &pData, &nCapacity, getLength(), str, len ); - return *this; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, OUStringBuffer& >::Type append( T& literal ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_uStringbuffer_insert_ascii( &pData, &nCapacity, getLength(), literal, - internal::ConstCharArrayDetector< T, void >::size - 1 ); - return *this; - } - -#ifdef RTL_FAST_STRING - /** - @overload - @internal - */ - template< typename T1, typename T2 > - OUStringBuffer& append( const OUStringConcat< T1, T2 >& c ) - { - const int l = c.length(); - if( l == 0 ) - return *this; - rtl_uStringbuffer_ensureCapacity( &pData, &nCapacity, pData->length + l ); - sal_Unicode* end = c.addData( pData->buffer + pData->length ); - *end = '\0'; - pData->length = end - pData->buffer; - return *this; - } -#endif - - /** - Appends a 8-Bit ASCII character string to this string buffer. - - Since this method is optimized for performance. the ASCII - character values are not converted in any way. The caller - has to make sure that all ASCII characters are in the - allowed range between 0 and 127. The ASCII string must be - NULL-terminated. - <p> - The characters of the array argument are appended, in order, to - the contents of this string buffer. The length of this string - buffer increases by the length of the argument. - - @param str the 8-Bit ASCII characters to be appended. - @return this string buffer. - */ - OUStringBuffer & appendAscii( const sal_Char * str ) - { - return appendAscii( str, rtl_str_getLength( str ) ); - } - - /** - Appends a 8-Bit ASCII character string to this string buffer. - - Since this method is optimized for performance. the ASCII - character values are not converted in any way. The caller - has to make sure that all ASCII characters are in the - allowed range between 0 and 127. The ASCII string must be - NULL-terminated. - <p> - Characters of the character array <code>str</code> are appended, - in order, to the contents of this string buffer. The length of this - string buffer increases by the value of <code>len</code>. - - @param str the 8-Bit ASCII characters to be appended; must be non-null, - and must point to at least len characters - @param len the number of characters to append; must be non-negative - @return this string buffer. - */ - OUStringBuffer & appendAscii( const sal_Char * str, sal_Int32 len) - { - rtl_uStringbuffer_insert_ascii( &pData, &nCapacity, getLength(), str, len ); - return *this; - } - - /** - Appends the string representation of the <code>bool</code> - argument to the string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param b a <code>bool</code>. - @return this string buffer. - - @since LibreOffice 4.1 - */ - OUStringBuffer & append(bool b) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFBOOLEAN]; - return append( sz, rtl_ustr_valueOfBoolean( sz, b ) ); - } - - // Pointer can be automatically converted to bool, which is unwanted here. - // Explicitly delete all pointer append() overloads to prevent this - // (except for char* and sal_Unicode* overloads, which are handled elsewhere). - template< typename T > - typename internal::Enable< void, - !internal::CharPtrDetector< T* >::ok && !internal::SalUnicodePtrDetector< T* >::ok >::Type - append( T* ) SAL_DELETED_FUNCTION; - - // This overload is needed because OUString has a ctor from rtl_uString*, but - // the bool overload above would be prefered to the conversion. - /** - @internal - */ - OUStringBuffer & append(rtl_uString* str) - { - return append( OUString( str )); - } - - /** - Appends the string representation of the <code>sal_Bool</code> - argument to the string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param b a <code>sal_Bool</code>. - @return this string buffer. - */ - OUStringBuffer & append(sal_Bool b) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFBOOLEAN]; - return append( sz, rtl_ustr_valueOfBoolean( sz, b ) ); - } - - /** - Appends the string representation of the ASCII <code>char</code> - argument to this string buffer. - - The argument is appended to the contents of this string buffer. - The length of this string buffer increases by <code>1</code>. - - @param c an ASCII <code>char</code>. - @return this string buffer. - - @since LibreOffice 3.5 - */ - OUStringBuffer & append(char c) - { - assert(static_cast< unsigned char >(c) <= 0x7F); - return append(sal_Unicode(c)); - } - - /** - Appends the string representation of the <code>char</code> - argument to this string buffer. - - The argument is appended to the contents of this string buffer. - The length of this string buffer increases by <code>1</code>. - - @param c a <code>char</code>. - @return this string buffer. - */ - OUStringBuffer & append(sal_Unicode c) - { - return append( &c, 1 ); - } - - /** - Appends the string representation of the <code>sal_Int32</code> - argument to this string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param i an <code>sal_Int32</code>. - @param radix the radix - @return this string buffer. - */ - OUStringBuffer & append(sal_Int32 i, sal_Int16 radix = 10 ) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFINT32]; - return append( sz, rtl_ustr_valueOfInt32( sz, i, radix ) ); - } - - /** - Appends the string representation of the <code>long</code> - argument to this string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param l a <code>long</code>. - @param radix the radix - @return this string buffer. - */ - OUStringBuffer & append(sal_Int64 l, sal_Int16 radix = 10 ) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFINT64]; - return append( sz, rtl_ustr_valueOfInt64( sz, l, radix ) ); - } - - /** - Appends the string representation of the <code>float</code> - argument to this string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param f a <code>float</code>. - @return this string buffer. - */ - OUStringBuffer & append(float f) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFFLOAT]; - return append( sz, rtl_ustr_valueOfFloat( sz, f ) ); - } - - /** - Appends the string representation of the <code>double</code> - argument to this string buffer. - - The argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then appended to this string buffer. - - @param d a <code>double</code>. - @return this string buffer. - */ - OUStringBuffer & append(double d) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFDOUBLE]; - return append( sz, rtl_ustr_valueOfDouble( sz, d ) ); - } - - /** - Appends a single UTF-32 character to this string buffer. - - <p>The single UTF-32 character will be represented within the string - buffer as either one or two UTF-16 code units.</p> - - @param c a well-formed UTF-32 code unit (that is, a value in the range - <code>0</code>–<code>0x10FFFF</code>, but excluding - <code>0xD800</code>–<code>0xDFFF</code>) - - @return - this string buffer - */ - OUStringBuffer & appendUtf32(sal_uInt32 c) { - return insertUtf32(getLength(), c); - } - - /** - Inserts the string into this string buffer. - - The characters of the <code>String</code> argument are inserted, in - order, into this string buffer at the indicated offset. The length - of this string buffer is increased by the length of the argument. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param str a string. - @return this string buffer. - */ - OUStringBuffer & insert(sal_Int32 offset, const OUString & str) - { - return insert( offset, str.getStr(), str.getLength() ); - } - - /** - Inserts the string representation of the <code>char</code> array - argument into this string buffer. - - The characters of the array argument are inserted into the - contents of this string buffer at the position indicated by - <code>offset</code>. The length of this string buffer increases by - the length of the argument. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param str a character array. - @return this string buffer. - */ - OUStringBuffer & insert( sal_Int32 offset, const sal_Unicode * str ) - { - return insert( offset, str, rtl_ustr_getLength( str ) ); - } - - /** - Inserts the string representation of the <code>char</code> array - argument into this string buffer. - - The characters of the array argument are inserted into the - contents of this string buffer at the position indicated by - <code>offset</code>. The length of this string buffer increases by - the length of the argument. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param str a character array. - @param len the number of characters to append. - @return this string buffer. - */ - OUStringBuffer & insert( sal_Int32 offset, const sal_Unicode * str, sal_Int32 len) - { - // insert behind the last character - rtl_uStringbuffer_insert( &pData, &nCapacity, offset, str, len ); - return *this; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, OUStringBuffer& >::Type insert( sal_Int32 offset, T& literal ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_uStringbuffer_insert_ascii( &pData, &nCapacity, offset, literal, - internal::ConstCharArrayDetector< T, void >::size - 1 ); - return *this; - } - - /** - Inserts the string representation of the <code>sal_Bool</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param b a <code>sal_Bool</code>. - @return this string buffer. - */ - OUStringBuffer & insert(sal_Int32 offset, sal_Bool b) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFBOOLEAN]; - return insert( offset, sz, rtl_ustr_valueOfBoolean( sz, b ) ); - } - - /** - Inserts the string representation of the <code>char</code> - argument into this string buffer. - - The second argument is inserted into the contents of this string - buffer at the position indicated by <code>offset</code>. The length - of this string buffer increases by one. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param c a <code>char</code>. - @return this string buffer. - - @since LibreOffice 3.6 - */ - OUStringBuffer & insert(sal_Int32 offset, char c) - { - sal_Unicode u = c; - return insert( offset, &u, 1 ); - } - - /** - Inserts the string representation of the <code>char</code> - argument into this string buffer. - - The second argument is inserted into the contents of this string - buffer at the position indicated by <code>offset</code>. The length - of this string buffer increases by one. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param c a <code>char</code>. - @return this string buffer. - */ - OUStringBuffer & insert(sal_Int32 offset, sal_Unicode c) - { - return insert( offset, &c, 1 ); - } - - /** - Inserts the string representation of the second <code>sal_Int32</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param i an <code>sal_Int32</code>. - @param radix the radix. - @return this string buffer. - @exception StringIndexOutOfBoundsException if the offset is invalid. - */ - OUStringBuffer & insert(sal_Int32 offset, sal_Int32 i, sal_Int16 radix = 10 ) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFINT32]; - return insert( offset, sz, rtl_ustr_valueOfInt32( sz, i, radix ) ); - } - - /** - Inserts the string representation of the <code>long</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param l a <code>long</code>. - @param radix the radix. - @return this string buffer. - @exception StringIndexOutOfBoundsException if the offset is invalid. - */ - OUStringBuffer & insert(sal_Int32 offset, sal_Int64 l, sal_Int16 radix = 10 ) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFINT64]; - return insert( offset, sz, rtl_ustr_valueOfInt64( sz, l, radix ) ); - } - - /** - Inserts the string representation of the <code>float</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param f a <code>float</code>. - @return this string buffer. - @exception StringIndexOutOfBoundsException if the offset is invalid. - */ - OUStringBuffer insert(sal_Int32 offset, float f) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFFLOAT]; - return insert( offset, sz, rtl_ustr_valueOfFloat( sz, f ) ); - } - - /** - Inserts the string representation of the <code>double</code> - argument into this string buffer. - - The second argument is converted to a string as if by the method - <code>String.valueOf</code>, and the characters of that - string are then inserted into this string buffer at the indicated - offset. - <p> - The offset argument must be greater than or equal to - <code>0</code>, and less than or equal to the length of this - string buffer. - - @param offset the offset. - @param d a <code>double</code>. - @return this string buffer. - @exception StringIndexOutOfBoundsException if the offset is invalid. - */ - OUStringBuffer & insert(sal_Int32 offset, double d) - { - sal_Unicode sz[RTL_USTR_MAX_VALUEOFDOUBLE]; - return insert( offset, sz, rtl_ustr_valueOfDouble( sz, d ) ); - } - - /** - Inserts a single UTF-32 character into this string buffer. - - <p>The single UTF-32 character will be represented within the string - buffer as either one or two UTF-16 code units.</p> - - @param offset the offset into this string buffer (from zero to the length - of this string buffer, inclusive) - - @param c a well-formed UTF-32 code unit (that is, a value in the range - <code>0</code>–<code>0x10FFFF</code>, but excluding - <code>0xD800</code>–<code>0xDFFF</code>) - - @return this string buffer - */ - OUStringBuffer & insertUtf32(sal_Int32 offset, sal_uInt32 c) { - rtl_uStringbuffer_insertUtf32(&pData, &nCapacity, offset, c); - return *this; - } - - /** - Removes the characters in a substring of this sequence. - - The substring begins at the specified <code>start</code> and - is <code>len</code> characters long. - - start must be >= 0 && <= This->length - - @param start The beginning index, inclusive - @param len The substring length - @return this string buffer. - */ - OUStringBuffer & remove( sal_Int32 start, sal_Int32 len ) - { - rtl_uStringbuffer_remove( &pData, start, len ); - return *this; - } - - /** - Removes the tail of a string buffer start at the indicate position - - start must be >= 0 && <= This->length - - @param start The beginning index, inclusive. default to 0 - @return this string buffer. - - @since LibreOffice 4.0 - */ - OUStringBuffer & truncate( sal_Int32 start = 0 ) - { - rtl_uStringbuffer_remove( &pData, start, getLength() - start ); - return *this; - } - - /** - Replace all occurrences of - oldChar in this string buffer with newChar. - - @since LibreOffice 4.0 - - @param oldChar the old character. - @param newChar the new character. - @return this string buffer - */ - OUStringBuffer& replace( sal_Unicode oldChar, sal_Unicode newChar ) - { - sal_Int32 index = 0; - while((index = indexOf(oldChar, index)) >= 0) - { - pData->buffer[ index ] = newChar; - } - return *this; - } - - /** Allows access to the internal data of this OUStringBuffer, for effective - manipulation. - - This method should be used with care. After you have called this - method, you may use the returned pInternalData or pInternalCapacity only - as long as you make no other method call on this OUStringBuffer. - - @param pInternalData - This output parameter receives a pointer to the internal data - (rtl_uString pointer). pInternalData itself must not be null. - - @param pInternalCapacity - This output parameter receives a pointer to the internal capacity. - pInternalCapacity itself must not be null. - */ - inline void accessInternals(rtl_uString *** pInternalData, - sal_Int32 ** pInternalCapacity) - { - *pInternalData = &pData; - *pInternalCapacity = &nCapacity; - } - - - /** - Returns the index within this string of the first occurrence of the - specified character, starting the search at the specified index. - - @since LibreOffice 4.0 - - @param ch character to be located. - @param fromIndex the index to start the search from. - The index must be greater or equal than 0 - and less or equal as the string length. - @return the index of the first occurrence of the character in the - character sequence represented by this string that is - greater than or equal to fromIndex, or - -1 if the character does not occur. - */ - sal_Int32 indexOf( sal_Unicode ch, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - sal_Int32 ret = rtl_ustr_indexOfChar_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, ch ); - return (ret < 0 ? ret : ret+fromIndex); - } - - /** - Returns the index within this string of the last occurrence of the - specified character, searching backward starting at the end. - - @since LibreOffice 4.0 - - @param ch character to be located. - @return the index of the last occurrence of the character in the - character sequence represented by this string, or - -1 if the character does not occur. - */ - sal_Int32 lastIndexOf( sal_Unicode ch ) const SAL_THROW(()) - { - return rtl_ustr_lastIndexOfChar_WithLength( pData->buffer, pData->length, ch ); - } - - /** - Returns the index within this string of the last occurrence of the - specified character, searching backward starting before the specified - index. - - @since LibreOffice 4.0 - - @param ch character to be located. - @param fromIndex the index before which to start the search. - @return the index of the last occurrence of the character in the - character sequence represented by this string that - is less than fromIndex, or -1 - if the character does not occur before that point. - */ - sal_Int32 lastIndexOf( sal_Unicode ch, sal_Int32 fromIndex ) const SAL_THROW(()) - { - return rtl_ustr_lastIndexOfChar_WithLength( pData->buffer, fromIndex, ch ); - } - - /** - Returns the index within this string of the first occurrence of the - specified substring, starting at the specified index. - - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @since LibreOffice 4.0 - - @param str the substring to search for. - @param fromIndex the index to start the search from. - @return If the string argument occurs one or more times as a substring - within this string at the starting index, then the index - of the first character of the first such substring is - returned. If it does not occur as a substring starting - at fromIndex or beyond, -1 is returned. - */ - sal_Int32 indexOf( const OUString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - sal_Int32 ret = rtl_ustr_indexOfStr_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - str.pData->buffer, str.pData->length ); - return (ret < 0 ? ret : ret+fromIndex); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - - @since LibreOffice 4.0 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, sal_Int32 >::Type indexOf( T& literal, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - sal_Int32 ret = rtl_ustr_indexOfAscii_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, literal, - internal::ConstCharArrayDetector< T, void >::size - 1); - return ret < 0 ? ret : ret + fromIndex; - } - - /** - Returns the index within this string of the last occurrence of - the specified substring, searching backward starting at the end. - - The returned index indicates the starting index of the substring - in this string. - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @since LibreOffice 4.0 - - @param str the substring to search for. - @return If the string argument occurs one or more times as a substring - within this string, then the index of the first character of - the last such substring is returned. If it does not occur as - a substring, -1 is returned. - */ - sal_Int32 lastIndexOf( const OUString & str ) const SAL_THROW(()) - { - return rtl_ustr_lastIndexOfStr_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ); - } - - /** - Returns the index within this string of the last occurrence of - the specified substring, searching backward starting before the specified - index. - - The returned index indicates the starting index of the substring - in this string. - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @since LibreOffice 4.0 - - @param str the substring to search for. - @param fromIndex the index before which to start the search. - @return If the string argument occurs one or more times as a substring - within this string before the starting index, then the index - of the first character of the last such substring is - returned. Otherwise, -1 is returned. - */ - sal_Int32 lastIndexOf( const OUString & str, sal_Int32 fromIndex ) const SAL_THROW(()) - { - return rtl_ustr_lastIndexOfStr_WithLength( pData->buffer, fromIndex, - str.pData->buffer, str.pData->length ); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 4.0 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, sal_Int32 >::Type lastIndexOf( T& literal ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_ustr_lastIndexOfAscii_WithLength( - pData->buffer, pData->length, literal, internal::ConstCharArrayDetector< T, void >::size - 1); - } - - /** - Strip the given character from the start of the buffer. - - @since LibreOffice 4.0 - - @param c the character to strip - @return The number of characters stripped - - */ - sal_Int32 stripStart(sal_Unicode c = (sal_Unicode)' ') - { - sal_Int32 index; - for(index = 0; index < getLength() ; index++) - { - if(pData->buffer[ index ] != c) - { - break; - } - } - if(index) - { - remove(0, index); - } - return index; - } - - /** - Strip the given character from the end of the buffer. - - @since LibreOffice 4.0 - - @param c the character to strip - @return The number of characters stripped - - */ - sal_Int32 stripEnd(sal_Unicode c = (sal_Unicode)' ') - { - sal_Int32 result = getLength(); - sal_Int32 index; - for(index = getLength(); index > 0 ; index--) - { - if(pData->buffer[ index - 1 ] != c) - { - break; - } - } - if(index < getLength()) - { - truncate(index); - } - return result - getLength(); - } - /** - Strip the given character from the both end of the buffer. - - @since LibreOffice 4.0 - - @param c the character to strip - @return The number of characters stripped - - */ - sal_Int32 strip(sal_Unicode c = (sal_Unicode)' ') - { - return stripStart(c) + stripEnd(c); - } - /** - Returns a new string buffer that is a substring of this string. - - The substring begins at the specified beginIndex. If - beginIndex is negative or be greater than the length of - this string, behaviour is undefined. - - @param beginIndex the beginning index, inclusive. - @return the specified substring. - @since LibreOffice 4.1 - */ - OUStringBuffer copy( sal_Int32 beginIndex ) const SAL_THROW(()) - { - assert(beginIndex >= 0 && beginIndex <= getLength()); - return copy( beginIndex, getLength() - beginIndex ); - } - - /** - Returns a new string buffer that is a substring of this string. - - The substring begins at the specified beginIndex and contains count - characters. If either beginIndex or count are negative, - or beginIndex + count are greater than the length of this string - then behaviour is undefined. - - @param beginIndex the beginning index, inclusive. - @param count the number of characters. - @return the specified substring. - @since LibreOffice 4.1 - */ - OUStringBuffer copy( sal_Int32 beginIndex, sal_Int32 count ) const SAL_THROW(()) - { - assert(beginIndex >= 0 && beginIndex <= getLength()); - assert(count >= 0 && count <= getLength() - beginIndex); - rtl_uString *pNew = 0; - rtl_uStringbuffer_newFromStr_WithLength( &pNew, getStr() + beginIndex, count ); - return OUStringBuffer( pNew, count + 16 ); - } - -#ifdef LIBO_INTERNAL_ONLY - // This is to complement the RTL_FAST_STRING operator+, which allows any combination of valid operands, - // even two buffers. It's intentional it returns OUString, just like the operator+ would in the fast variant. -#ifndef RTL_FAST_STRING - /** - @internal - @since LibreOffice 4.1 - */ - friend OUString operator+( const OUStringBuffer& str1, const OUStringBuffer& str2 ) SAL_THROW(()) - { - return OUString( str1.pData ).concat( str2.pData ); - } -#endif -#endif - -private: - OUStringBuffer( rtl_uString * value, const sal_Int32 capacity ) - { - pData = value; - nCapacity = capacity; - } - - /** - A pointer to the data structur which contains the data. - */ - rtl_uString * pData; - - /** - The len of the pData->buffer. - */ - sal_Int32 nCapacity; -}; - -#ifdef RTL_FAST_STRING -/** - @internal -*/ -template<> -struct ToStringHelper< OUStringBuffer > - { - static int length( const OUStringBuffer& s ) { return s.getLength(); } - static sal_Unicode* addData( sal_Unicode* buffer, const OUStringBuffer& s ) { return addDataHelper( buffer, s.getStr(), s.getLength()); } - static const bool allowOStringConcat = false; - static const bool allowOUStringConcat = true; - }; -#endif - -} - -#ifdef RTL_STRING_UNITTEST -namespace rtl -{ -typedef rtlunittest::OUStringBuffer OUStringBuffer; -} -#endif - -#ifdef RTL_USING -using ::rtl::OUStringBuffer; -#endif - -#endif /* _RTL_USTRBUF_HXX_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/ustring.h b/sal/inc/rtl/ustring.h deleted file mode 100644 index da6720b3bcf6..000000000000 --- a/sal/inc/rtl/ustring.h +++ /dev/null @@ -1,2022 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_USTRING_H_ -#define _RTL_USTRING_H_ - -#include "sal/config.h" - -#include "osl/interlck.h" -#include "rtl/string.h" -#include "rtl/textenc.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* ======================================================================= */ - -/** Return the length of a string. - - The length is equal to the number of 16-bit Unicode characters in the - string, without the terminating NUL character. - - @param str - a null-terminated string. - - @return - the length of the sequence of characters represented by this string, - excluding the terminating NUL character. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_getLength( - const sal_Unicode * str ) SAL_THROW_EXTERN_C(); - -/** Compare two strings. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. Both strings must be - null-terminated. - - @param first - the first null-terminated string to be compared. - - @param second - the second null-terminated string which is compared with the first one. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_compare( - const sal_Unicode * first, const sal_Unicode * second ) SAL_THROW_EXTERN_C(); - -/** Compare two strings. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_compare_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Unicode * second, sal_Int32 secondLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings with a maximum count of characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @param shortenedLen - the maximum number of characters to compare. This length can be greater - or smaller than the lengths of the two strings. - - @return - 0 if both substrings are equal, a value less than 0 if the first substring - is less than the second substring, and a value greater than 0 if the first - substring is greater than the second substring. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_shortenedCompare_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Unicode * second, sal_Int32 secondLen, sal_Int32 shortenedLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings from back to front. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @return - 0 if both strings are equal, a value less than 0 if the first string - compares less than the second string, and a value greater than 0 if the - first string compares greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_reverseCompare_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Unicode * second, sal_Int32 secondLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings from back to front for equality. - - The comparison is based on the numeric value of each character in the - strings and returns 'true' if, ans only if, both strings are equal. - This function cannot be used for language-specific sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified len. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified len. - - @param len - the length of both strings. - - @return - true if both strings are equal, false if they are not equal. - */ - -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_ustr_asciil_reverseEquals_WithLength( - const sal_Unicode * first, const sal_Char * second, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Compare two strings, ignoring the case of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. Both strings must be null-terminated. - - @param first - the first null-terminated string to be compared. - - @param second - the second null-terminated string which is compared with the first one. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_compareIgnoreAsciiCase( - const sal_Unicode * first, const sal_Unicode * second ) SAL_THROW_EXTERN_C(); - -/** Compare two strings, ignoring the case of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_compareIgnoreAsciiCase_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Unicode * second, sal_Int32 secondLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings with a maximum count of characters, ignoring the case - of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @param shortenedLen - the maximum number of characters to compare. This length can be greater - or smaller than the lengths of the two strings. - - @return - 0 if both substrings are equal, a value less than 0 if the first substring - is less than the second substring, and a value greater than 0 if the first - substring is greater than the second substring. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Unicode * second, sal_Int32 secondLen, sal_Int32 shortenedLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. Both strings must be - null-terminated. - - Since this function is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range of 0 and 127, inclusive. - - @param first - the first null-terminated string to be compared. - - @param second - the second null-terminated ASCII string which is compared with the first - one. - - @return - 0 if both substrings are equal, a value less than 0 if the first substring - is less than the second substring, and a value greater than 0 if the first - substring is greater than the second substring. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_ascii_compare( - const sal_Unicode * first, const sal_Char * second ) SAL_THROW_EXTERN_C(); - -/** Compare two strings. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. - - Since this function is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range of 0 and 127, inclusive. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second null-terminated ASCII string which is compared with the first - one. - - @return - 0 if both substrings are equal, a value less than 0 if the first substring - is less than the second substring, and a value greater than 0 if the first - substring is greater than the second substring. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_ascii_compare_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Char * second ) SAL_THROW_EXTERN_C(); - -/** Compare two strings with a maximum count of characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. - - Since this function is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range of 0 and 127, inclusive. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second null-terminated ASCII string which is compared with the first - one. - - @param shortenedLen - the maximum number of characters to compare. This length can be greater - or smaller than the lengths of the two strings. - - @return - 0 if both substrings are equal, a value less than 0 if the first substring - is less than the second substring, and a value greater than 0 if the first - substring is greater than the second substring. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_ascii_shortenedCompare_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Char * second, sal_Int32 shortenedLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings from back to front. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. This function - cannot be used for language-specific sorting. - - Since this function is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range of 0 and 127, inclusive. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second ASCII string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @return - 0 if both strings are equal, a value less than 0 if the first string - compares less than the second string, and a value greater than 0 if the - first string compares greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_asciil_reverseCompare_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Char * second, sal_Int32 secondLen ) SAL_THROW_EXTERN_C(); - -/** Compare two strings, ignoring the case of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. Both strings must be null-terminated. - - Since this function is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range of 0 and 127, inclusive. - - @param first - the first null-terminated string to be compared. - - @param second - the second null-terminated ASCII string which is compared with the first - one. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_ascii_compareIgnoreAsciiCase( - const sal_Unicode * first, const sal_Char * second ) SAL_THROW_EXTERN_C(); - -/** Compare two strings, ignoring the case of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. - - Since this function is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range of 0 and 127, inclusive. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second null-terminated ASCII string which is compared with the first - one. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Char * second ) SAL_THROW_EXTERN_C(); - -/** Compare two strings, ignoring the case of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. - - Since this function is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range of 0 and 127, inclusive. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second string which is compared with the first one. Need not be - null-terminated, but must be at least as long as the specified secondLen. - - @param secondLen - the length of the second string. - - @return - 0 if both strings are equal, a value less than 0 if the first string is - less than the second string, and a value greater than 0 if the first - string is greater than the second string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( - sal_Unicode const * first, sal_Int32 firstLen, - char const * second, sal_Int32 secondLen) SAL_THROW_EXTERN_C(); - -/** Compare two strings with a maximum count of characters, ignoring the case - of ASCII characters. - - The comparison is based on the numeric value of each character in the - strings and returns a value indicating their relationship. Character - values between 65 and 90 (ASCII A--Z) are interpreted as values between 97 - and 122 (ASCII a--z). This function cannot be used for language-specific - sorting. - - Since this function is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range of 0 and 127, inclusive. - - @param first - the first string to be compared. Need not be null-terminated, but must be - at least as long as the specified firstLen. - - @param firstLen - the length of the first string. - - @param second - the second null-terminated ASCII string which is compared with the first - one. - - @param shortenedLen - the maximum number of characters to compare. This length can be greater - or smaller than the lengths of the two strings. - - @return - 0 if both substrings are equal, a value less than 0 if the first substring - is less than the second substring, and a value greater than 0 if the first - substring is greater than the second substring. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( - const sal_Unicode * first, sal_Int32 firstLen, const sal_Char * second, sal_Int32 shortenedLen ) SAL_THROW_EXTERN_C(); - -/** Return a hash code for a string. - - It is not allowed to store the hash code persistently, because later - versions could return other hash codes. The string must be - null-terminated. - - @param str - a null-terminated string. - - @return - a hash code for the given string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_hashCode( - const sal_Unicode * str ) SAL_THROW_EXTERN_C(); - -/** Return a hash code for a string. - - It is not allowed to store the hash code persistently, because later - versions could return other hash codes. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @return - a hash code for the given string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_hashCode_WithLength( - const sal_Unicode * str, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Search for the first occurrence of a character within a string. - - The string must be null-terminated. - - @param str - a null-terminated string. - - @param ch - the character to be searched for. - - @return - the index (starting at 0) of the first occurrence of the character in the - string, or -1 if the character does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_indexOfChar( - const sal_Unicode * str, sal_Unicode ch ) SAL_THROW_EXTERN_C(); - -/** Search for the first occurrence of a character within a string. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param ch - the character to be searched for. - - @return - the index (starting at 0) of the first occurrence of the character in the - string, or -1 if the character does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_indexOfChar_WithLength( - const sal_Unicode * str, sal_Int32 len, sal_Unicode ch ) SAL_THROW_EXTERN_C(); - -/** Search for the last occurrence of a character within a string. - - The string must be null-terminated. - - @param str - a null-terminated string. - - @param ch - the character to be searched for. - - @return - the index (starting at 0) of the last occurrence of the character in the - string, or -1 if the character does not occur. The returned value is - always smaller than the string length. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_lastIndexOfChar( - const sal_Unicode * str, sal_Unicode ch ) SAL_THROW_EXTERN_C(); - -/** Search for the last occurrence of a character within a string. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param ch - the character to be searched for. - - @return - the index (starting at 0) of the last occurrence of the character in the - string, or -1 if the character does not occur. The returned value is - always smaller than the string length. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_lastIndexOfChar_WithLength( - const sal_Unicode * str, sal_Int32 len, sal_Unicode ch ) SAL_THROW_EXTERN_C(); - -/** Search for the first occurrence of a substring within a string. - - If subStr is empty, or both str and subStr are empty, -1 is returned. - Both strings must be null-terminated. - - @param str - a null-terminated string. - - @param subStr - the null-terminated substring to be searched for. - - @return - the index (starting at 0) of the first character of the first occurrence - of the substring within the string, or -1 if the substring does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_indexOfStr( - const sal_Unicode * str, const sal_Unicode * subStr ) SAL_THROW_EXTERN_C(); - -/** Search for the first occurrence of a substring within a string. - - If subStr is empty, or both str and subStr are empty, -1 is returned. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param subStr - the substring to be searched for. Need not be null-terminated, but must - be at least as long as the specified subLen. - - @param subLen - the length of the substring. - - @return - the index (starting at 0) of the first character of the first occurrence - of the substring within the string, or -1 if the substring does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_indexOfStr_WithLength( - const sal_Unicode * str, sal_Int32 len, const sal_Unicode * subStr, sal_Int32 subLen ) SAL_THROW_EXTERN_C(); - -/** Search for the first occurrence of an ASCII substring within a string. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string; must be non-negative. - - @param subStr - the substring to be searched for. Need not be null-terminated, but must - be at least as long as the specified subLen. Must only contain characters - in the ASCII range 0x00--7F. - - @param subLen - the length of the substring; must be non-negative. - - @return - the index (starting at 0) of the first character of the first occurrence - of the substring within the string, or -1 if the substring does not occur. - If subLen is zero, -1 is returned. - - @since UDK 3.2.7 -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_indexOfAscii_WithLength( - sal_Unicode const * str, sal_Int32 len, - char const * subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C(); - -/** Search for the last occurrence of a substring within a string. - - If subStr is empty, or both str and subStr are empty, -1 is returned. - Both strings must be null-terminated. - - @param str - a null-terminated string. - - @param subStr - the null-terminated substring to be searched for. - - @return - the index (starting at 0) of the first character of the last occurrence - of the substring within the string, or -1 if the substring does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_lastIndexOfStr( - const sal_Unicode * str, const sal_Unicode * subStr ) SAL_THROW_EXTERN_C(); - -/** Search for the last occurrence of a substring within a string. - - If subStr is empty, or both str and subStr are empty, -1 is returned. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param subStr - the substring to be searched for. Need not be null-terminated, but must - be at least as long as the specified subLen. - - @param subLen - the length of the substring. - - @return - the index (starting at 0) of the first character of the first occurrence - of the substring within the string, or -1 if the substring does not occur. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_lastIndexOfStr_WithLength( - const sal_Unicode * str, sal_Int32 len, const sal_Unicode * subStr, sal_Int32 subLen ) SAL_THROW_EXTERN_C(); - -/** Search for the last occurrence of an ASCII substring within a string. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string; must be non-negative. - - @param subStr - the substring to be searched for. Need not be null-terminated, but must - be at least as long as the specified subLen. Must only contain characters - in the ASCII range 0x00--7F. - - @param subLen - the length of the substring; must be non-negative. - - @return - the index (starting at 0) of the first character of the last occurrence - of the substring within the string, or -1 if the substring does not occur. - If subLen is zero, -1 is returned. - - @since UDK 3.2.7 -*/ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_lastIndexOfAscii_WithLength( - sal_Unicode const * str, sal_Int32 len, - char const * subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C(); - -/** Replace all occurrences of a single character within a string. - - If oldChar does not occur within str, then the string is not modified. - The string must be null-terminated. - - @param str - a null-terminated string. - - @param oldChar - the old character. - - @param newChar - the new character. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_ustr_replaceChar( - sal_Unicode * str, sal_Unicode oldChar, sal_Unicode newChar ) SAL_THROW_EXTERN_C(); - -/** Replace all occurrences of a single character within a string. - - If oldChar does not occur within str, then the string is not modified. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - - @param oldChar - the old character. - - @param newChar - the new character. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_ustr_replaceChar_WithLength( - sal_Unicode * str, sal_Int32 len, sal_Unicode oldChar, sal_Unicode newChar ) SAL_THROW_EXTERN_C(); - -/** Convert all ASCII uppercase letters to lowercase within a string. - - The characters with values between 65 and 90 (ASCII A--Z) are replaced - with values between 97 and 122 (ASCII a--z). The string must be - null-terminated. - - @param str - a null-terminated string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_ustr_toAsciiLowerCase( - sal_Unicode * str ) SAL_THROW_EXTERN_C(); - -/** Convert all ASCII uppercase letters to lowercase within a string. - - The characters with values between 65 and 90 (ASCII A--Z) are replaced - with values between 97 and 122 (ASCII a--z). - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_ustr_toAsciiLowerCase_WithLength( - sal_Unicode * str, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Convert all ASCII lowercase letters to uppercase within a string. - - The characters with values between 97 and 122 (ASCII a--z) are replaced - with values between 65 and 90 (ASCII A--Z). The string must be - null-terminated. - - @param str - a null-terminated string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_ustr_toAsciiUpperCase( - sal_Unicode * str ) SAL_THROW_EXTERN_C(); - -/** Convert all ASCII lowercase letters to uppercase within a string. - - The characters with values between 97 and 122 (ASCII a--z) are replaced - with values between 65 and 90 (ASCII A--Z). - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the length of the string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_ustr_toAsciiUpperCase_WithLength( - sal_Unicode * str, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Remove white space from both ends of a string. - - All characters with values less than or equal to 32 (the space character) - are considered to be white space. This function cannot be used for - language-specific operations. The string must be null-terminated. - - @param str - a null-terminated string. - - @return - the new length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_trim( - sal_Unicode * str ) SAL_THROW_EXTERN_C(); - -/** Remove white space from both ends of the string. - - All characters with values less than or equal to 32 (the space character) - are considered to be white space. This function cannot be used for - language-specific operations. The string must be null-terminated. - - @param str - a string. Need not be null-terminated, but must be at least as long as - the specified len. - - @param len - the original length of the string. - - @return - the new length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_trim_WithLength( - sal_Unicode * str, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Create the string representation of a boolean. - - If b is true, the buffer is filled with the string "true" and 5 is - returned. If b is false, the buffer is filled with the string "false" and - 6 is returned. This function cannot be used for language-specific - operations. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_USTR_MAX_VALUEOFBOOLEAN define to - create a buffer that is big enough. - - @param b - a boolean value. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_valueOfBoolean( - sal_Unicode * str, sal_Bool b ) SAL_THROW_EXTERN_C(); -#define RTL_USTR_MAX_VALUEOFBOOLEAN RTL_STR_MAX_VALUEOFBOOLEAN - -/** Create the string representation of a character. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_USTR_MAX_VALUEOFCHAR define to create a - buffer that is big enough. - - @param ch - a character value. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_valueOfChar( - sal_Unicode * str, sal_Unicode ch ) SAL_THROW_EXTERN_C(); -#define RTL_USTR_MAX_VALUEOFCHAR RTL_STR_MAX_VALUEOFCHAR - -/** Create the string representation of an integer. - - This function cannot be used for language-specific operations. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_USTR_MAX_VALUEOFINT32 define to create - a buffer that is big enough. - - @param i - an integer value. - - @param radix - the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX - (36), inclusive. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_valueOfInt32( - sal_Unicode * str, sal_Int32 i, sal_Int16 radix ) SAL_THROW_EXTERN_C(); -#define RTL_USTR_MIN_RADIX RTL_STR_MIN_RADIX -#define RTL_USTR_MAX_RADIX RTL_STR_MAX_RADIX -#define RTL_USTR_MAX_VALUEOFINT32 RTL_STR_MAX_VALUEOFINT32 - -/** Create the string representation of a long integer. - - This function cannot be used for language-specific operations. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_USTR_MAX_VALUEOFINT64 define to create - a buffer that is big enough. - - @param l - a long integer value. - - @param radix - the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX - (36), inclusive. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_valueOfInt64( - sal_Unicode * str, sal_Int64 l, sal_Int16 radix ) SAL_THROW_EXTERN_C(); -#define RTL_USTR_MAX_VALUEOFINT64 RTL_STR_MAX_VALUEOFINT64 - -/** Create the string representation of an unsigned long integer. - - This function cannot be used for language-specific operations. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_USTR_MAX_VALUEOFUINT64 define to create - a buffer that is big enough. - - @param l - a long integer value. - - @param radix - the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX - (36), inclusive. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_valueOfUInt64( - sal_Unicode * str, sal_uInt64 l, sal_Int16 radix ) SAL_THROW_EXTERN_C(); -#define RTL_USTR_MAX_VALUEOFINT64 RTL_STR_MAX_VALUEOFINT64 - -/** Create the string representation of a float. - - This function cannot be used for language-specific conversion. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_USTR_MAX_VALUEOFFLOAT define to create - a buffer that is big enough. - - @param f - a float value. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_valueOfFloat( - sal_Unicode * str, float f ) SAL_THROW_EXTERN_C(); -#define RTL_USTR_MAX_VALUEOFFLOAT RTL_STR_MAX_VALUEOFFLOAT - -/** Create the string representation of a double. - - This function cannot be used for language-specific conversion. - - @param str - a buffer that is big enough to hold the result and the terminating NUL - character. You should use the RTL_USTR_MAX_VALUEOFDOUBLE define to create - a buffer that is big enough. - - @param d - a double value. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_valueOfDouble( - sal_Unicode * str, double d ) SAL_THROW_EXTERN_C(); -#define RTL_USTR_MAX_VALUEOFDOUBLE RTL_STR_MAX_VALUEOFDOUBLE - -/** Interpret a string as a boolean. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @return - true if the string is "1" or "true" in any ASCII case, false otherwise. - */ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_ustr_toBoolean( - const sal_Unicode * str ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as an integer. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @param radix - the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX - (36), inclusive. - - @return - the integer value represented by the string, or 0 if the string does not - represent an integer. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_toInt32( - const sal_Unicode * str, sal_Int16 radix ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as a long integer. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @param radix - the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX - (36), inclusive. - - @return - the long integer value represented by the string, or 0 if the string does - not represent a long integer. - */ -SAL_DLLPUBLIC sal_Int64 SAL_CALL rtl_ustr_toInt64( - const sal_Unicode * str, sal_Int16 radix ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as an unsigned long integer. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @param radix - the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX - (36), inclusive. - - @return - the unsigned long integer value represented by the string, or 0 if the - string does not represent an unsigned long integer. - - @since LibreOffice 4.1 - */ -SAL_DLLPUBLIC sal_uInt64 SAL_CALL rtl_ustr_toUInt64( - const sal_Unicode * str, sal_Int16 radix ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as a float. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @return - the float value represented by the string, or 0.0 if the string does not - represent a float. - */ -SAL_DLLPUBLIC float SAL_CALL rtl_ustr_toFloat( - const sal_Unicode * str ) SAL_THROW_EXTERN_C(); - -/** Interpret a string as a double. - - This function cannot be used for language-specific conversion. The string - must be null-terminated. - - @param str - a null-terminated string. - - @return - the float value represented by the string, or 0.0 if the string does not - represent a double. - */ -SAL_DLLPUBLIC double SAL_CALL rtl_ustr_toDouble( - const sal_Unicode * str ) SAL_THROW_EXTERN_C(); - -/* ======================================================================= */ - -#if defined(SAL_W32) -#pragma pack(push, 4) -#endif - -/** @cond INTERNAL */ -/** The implementation of a Unicode string. -*/ -typedef struct _rtl_uString -{ - oslInterlockedCount refCount; /* opaque */ - sal_Int32 length; - sal_Unicode buffer[1]; -} rtl_uString; -/** @endcond */ - -#if defined(SAL_W32) -#pragma pack(pop) -#endif - -/* ----------------------------------------------------------------------- */ - -/** Increment the reference count of a string. - - @param str - a string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_acquire( - rtl_uString * str ) SAL_THROW_EXTERN_C(); - -/** Decrement the reference count of a string. - - If the count goes to zero than the string data is deleted. - - @param str - a string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_release( - rtl_uString * str ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string containing no characters. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_new( - rtl_uString ** newStr ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string containing space for a given number of characters. - - The reference count of the new string will be 1. The length of the string - will be nLen. This function does not handle out-of-memory conditions. - - For nLen < 0 or failed allocation this method returns NULL. - - The characters of the capacity are not cleared, and the length is set to - nLen, unlike the similar method of rtl_uString_new_WithLength which - zeros out the buffer, and sets the length to 0. So should be somewhat - more efficient for allocating a new string. - - call rtl_uString_release to release the string - alternatively pass ownership to an OUString with - rtl::OUString(newStr, SAL_NO_ACQUIRE); - - @param[in] nLen the number of characters. - @return pointer to the new string. - - @since LibreOffice 4.1 - */ -SAL_DLLPUBLIC rtl_uString * SAL_CALL rtl_uString_alloc(sal_Int32 nLen) SAL_THROW_EXTERN_C(); - -/** Allocate a new string containing space for a given number of characters. - - If len is greater than zero, the reference count of the new string will be - 1. The values of all characters are set to 0 and the length of the string - is 0. This function does not handle out-of-memory conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param nLen - the number of characters. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_new_WithLength( - rtl_uString ** newStr, sal_Int32 nLen ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string that contains a copy of another string. - - If the length of value is greater than zero, the reference count of the - new string will be 1. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param value - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromString( - rtl_uString ** newStr, const rtl_uString * value ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string that contains a copy of a character array. - - If the length of value is greater than zero, the reference count of the - new string will be 1. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param value - a null-terminated character array. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromStr( - rtl_uString ** newStr, const sal_Unicode * value ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string that contains a copy of a character array. - - If the length of value is greater than zero, the reference count of the - new string will be 1. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param value - a character array. Need not be null-terminated, but must be at least as - long as the specified len. - - @param len - the length of the character array. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromStr_WithLength( - rtl_uString ** newStr, const sal_Unicode * value, sal_Int32 len ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string that is a substring of this string. - - The substring begins at the specified beginIndex and contains count - characters. Meaningless combinations such as negative beginIndex, - or beginIndex + count greater than the length of the string have - undefined behaviour. - - @param[out] newStr the specified substring. - @param[in] from the String to take the substring from. - @param[in] beginIndex the beginning index, inclusive. - @param[in] count the number of characters. - @return the specified substring. - - @since LibreOffice 4.0 - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromSubString( - rtl_uString ** newStr, const rtl_uString * from, - sal_Int32 beginIndex, sal_Int32 count ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string that contains a copy of a character array. - - If the length of value is greater than zero, the reference count of the - new string will be 1. This function does not handle out-of-memory - conditions. - - Since this function is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range of 0 and 127, inclusive. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param value - a null-terminated ASCII character array. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromAscii( - rtl_uString ** newStr, const sal_Char * value ) SAL_THROW_EXTERN_C(); - -/** - @internal - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromLiteral( - rtl_uString ** newStr, const sal_Char * value, sal_Int32 len, - sal_Int32 allocExtra ) SAL_THROW_EXTERN_C(); - -/** Allocate a new string from an array of Unicode code points. - - @param newString - a non-null pointer to a (possibly null) rtl_uString pointer, which (if - non-null) will have been passed to rtl_uString_release before the function - returns. Upon return, points to the newly allocated string or to null if - there was either an out-of-memory condition or the resulting number of - UTF-16 code units would have been larger than SAL_MAX_INT32. The newly - allocated string (if any) must ultimately be passed to rtl_uString_release. - - @param codePoints - an array of at least codePointCount code points, which each must be in the - range from 0 to 0x10FFFF, inclusive. May be null if codePointCount is zero. - - @param codePointCount - the non-negative number of code points. - - @since UDK 3.2.7 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newFromCodePoints( - rtl_uString ** newString, sal_uInt32 const * codePoints, - sal_Int32 codePointCount) SAL_THROW_EXTERN_C(); - -/** Assign a new value to a string. - - First releases any value str might currently hold, then acquires - rightValue. - - @param str - pointer to the string. The pointed-to data must be null or a valid - string. - - @param rightValue - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_assign( - rtl_uString ** str, rtl_uString * rightValue ) SAL_THROW_EXTERN_C(); - -/** Return the length of a string. - - The length is equal to the number of characters in the string. - - @param str - a valid string. - - @return - the length of the string. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_uString_getLength( - const rtl_uString * str ) SAL_THROW_EXTERN_C(); - -/** Return a pointer to the underlying character array of a string. - - @param str - a valid string. - - @return - a pointer to the null-terminated character array. - */ -SAL_DLLPUBLIC sal_Unicode * SAL_CALL rtl_uString_getStr( - rtl_uString * str ) SAL_THROW_EXTERN_C(); - -/** Create a new string that is the concatenation of two other strings. - - The new string does not necessarily have a reference count of 1 (in cases - where one of the two other strings is empty), so it must not be modified - without checking the reference count. This function does not handle - out-of-memory conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param left - a valid string. - - @param right - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newConcat( - rtl_uString ** newStr, rtl_uString * left, rtl_uString * right ) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing a substring of another string. - - The new string results from replacing a number of characters (count), - starting at the specified position (index) in the original string (str), - with some new substring (subStr). If subStr is null, than only a number - of characters is deleted. - - The new string does not necessarily have a reference count of 1, so it - must not be modified without checking the reference count. This function - does not handle out-of-memory conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - - @param idx - the index into str at which to start replacement. Must be between 0 and - the length of str, inclusive. - - @param count - the number of characters to remove. Must not be negative, and the sum of - index and count must not exceed the length of str. - - @param subStr - either null or a valid string to be inserted. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceStrAt( - rtl_uString ** newStr, rtl_uString * str, sal_Int32 idx, sal_Int32 count, rtl_uString * subStr ) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing all occurrences of a single character - within another string. - - The new string results from replacing all occurrences of oldChar in str - with newChar. - - The new string does not necessarily have a reference count of 1 (in cases - where oldChar does not occur in str), so it must not be modified without - checking the reference count. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - - @param oldChar - the old character. - - @param newChar - the new character. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplace( - rtl_uString ** newStr, rtl_uString * str, sal_Unicode oldChar, sal_Unicode newChar ) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing the first occurrence of a given substring - with another substring. - - @param[in, out] newStr pointer to the new string; must not be null; must - point to null or a valid rtl_uString - - @param str pointer to the original string; must not be null - - @param from pointer to the substring to be replaced; must not be null - - @param to pointer to the replacing substring; must not be null - - @param[in,out] index pointer to a start index, must not be null; upon entry - to the function its value is the index into the original string at which to - start searching for the \p from substring, the value must be non-negative - and not greater than the original string's length; upon exit from the - function its value is the index into the original string at which the - replacement took place or -1 if no replacement took place - - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirst( - rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from, - rtl_uString const * to, sal_Int32 * index) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing the first occurrence of a given substring - with another substring. - - @param[in, out] newStr pointer to the new string; must not be null; must - point to null or a valid rtl_uString - - @param str pointer to the original string; must not be null - - @param from pointer to the substring to be replaced; must not be null and - must point to memory of at least \p fromLength ASCII bytes - - @param fromLength the length of the \p from substring; must be non-negative - - @param to pointer to the replacing substring; must not be null - - @param[in,out] index pointer to a start index, must not be null; upon entry - to the function its value is the index into the original string at which to - start searching for the \p from substring, the value must be non-negative - and not greater than the original string's length; upon exit from the - function its value is the index into the original string at which the - replacement took place or -1 if no replacement took place - - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirstAsciiL( - rtl_uString ** newStr, rtl_uString * str, char const * from, - sal_Int32 fromLength, rtl_uString const * to, sal_Int32 * index) - SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing the first occurrence of a given substring - with another substring. - - @param[in, out] newStr pointer to the new string; must not be null; must - point to null or a valid rtl_uString - - @param str pointer to the original string; must not be null - - @param from pointer to the substring to be replaced; must not be null and - must point to memory of at least \p fromLength ASCII bytes - - @param fromLength the length of the \p from substring; must be non-negative - - @param to pointer to the substring to be replaced; must not be null and - must point to memory of at least \p toLength ASCII bytes - - @param toLength the length of the \p to substring; must be non-negative - - @param[in,out] index pointer to a start index, must not be null; upon entry - to the function its value is the index into the original string at which to - start searching for the \p from substring, the value must be non-negative - and not greater than the original string's length; upon exit from the - function its value is the index into the original string at which the - replacement took place or -1 if no replacement took place - - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceFirstAsciiLAsciiL( - rtl_uString ** newStr, rtl_uString * str, char const * from, - sal_Int32 fromLength, char const * to, sal_Int32 toLength, - sal_Int32 * index) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing all occurrences of a given substring with - another substring. - - Replacing subsequent occurrences picks up only after a given replacement. - That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx". - - @param[in, out] newStr pointer to the new string; must not be null; must - point to null or a valid rtl_uString - - @param str pointer to the original string; must not be null - - @param from pointer to the substring to be replaced; must not be null - - @param to pointer to the replacing substring; must not be null - - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAll( - rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from, - rtl_uString const * to) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing all occurrences of a given substring with - another substring. - - Replacing subsequent occurrences picks up only after a given replacement. - That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx". - - @param[in, out] newStr pointer to the new string; must not be null; must - point to null or a valid rtl_uString - - @param str pointer to the original string; must not be null - - @param from pointer to the substring to be replaced; must not be null - - @param to pointer to the replacing substring; must not be null - - @param fromIndex the position in the string where we will begin searching - - @since LibreOffice 4.0 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllFromIndex( - rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from, - rtl_uString const * to, sal_Int32 fromIndex) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing all occurrences of a given substring with - another substring. - - Replacing subsequent occurrences picks up only after a given replacement. - That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx". - - @param[in, out] newStr pointer to the new string; must not be null; must - point to null or a valid rtl_uString - - @param str pointer to the original string; must not be null - - @param from pointer to the substring to be replaced; must not be null and - must point to memory of at least \p fromLength ASCII bytes - - @param fromLength the length of the \p from substring; must be non-negative - - @param to pointer to the replacing substring; must not be null - - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllAsciiL( - rtl_uString ** newStr, rtl_uString * str, char const * from, - sal_Int32 fromLength, rtl_uString const * to) SAL_THROW_EXTERN_C(); - -/** Create a new string by replacing all occurrences of a given substring with - another substring. - - Replacing subsequent occurrences picks up only after a given replacement. - That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx". - - @param[in, out] newStr pointer to the new string; must not be null; must - point to null or a valid rtl_uString - - @param str pointer to the original string; must not be null - - @param from pointer to the substring to be replaced; must not be null and - must point to memory of at least \p fromLength ASCII bytes - - @param fromLength the length of the \p from substring; must be non-negative - - @param to pointer to the substring to be replaced; must not be null and - must point to memory of at least \p toLength ASCII bytes - - @param toLength the length of the \p to substring; must be non-negative - - @since LibreOffice 3.6 -*/ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newReplaceAllAsciiLAsciiL( - rtl_uString ** newStr, rtl_uString * str, char const * from, - sal_Int32 fromLength, char const * to, sal_Int32 toLength) - SAL_THROW_EXTERN_C(); - -/** Create a new string by converting all ASCII uppercase letters to lowercase - within another string. - - The new string results from replacing all characters with values between - 65 and 90 (ASCII A--Z) by values between 97 and 122 (ASCII a--z). - - This function cannot be used for language-specific conversion. The new - string does not necessarily have a reference count of 1 (in cases where - no characters need to be converted), so it must not be modified without - checking the reference count. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newToAsciiLowerCase( - rtl_uString ** newStr, rtl_uString * str ) SAL_THROW_EXTERN_C(); - -/** Create a new string by converting all ASCII lowercase letters to uppercase - within another string. - - The new string results from replacing all characters with values between - 97 and 122 (ASCII a--z) by values between 65 and 90 (ASCII A--Z). - - This function cannot be used for language-specific conversion. The new - string does not necessarily have a reference count of 1 (in cases where - no characters need to be converted), so it must not be modified without - checking the reference count. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newToAsciiUpperCase( - rtl_uString ** newStr, rtl_uString * str ) SAL_THROW_EXTERN_C(); - -/** Create a new string by removing white space from both ends of another - string. - - The new string results from removing all characters with values less than - or equal to 32 (the space character) form both ends of str. - - This function cannot be used for language-specific conversion. The new - string does not necessarily have a reference count of 1 (in cases where - no characters need to be removed), so it must not be modified without - checking the reference count. This function does not handle out-of-memory - conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a valid string. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_newTrim( - rtl_uString ** newStr, rtl_uString * str ) SAL_THROW_EXTERN_C(); - -/** Create a new string by extracting a single token from another string. - - Starting at index, the token's next token is searched for. If there is no - such token, the result is an empty string. Otherwise, all characters from - the start of that token and up to, but not including the next occurrence - of cTok make up the resulting token. The return value is the position of - the next token, or -1 if no more tokens follow. - - Example code could look like - rtl_uString * pToken = NULL; - sal_Int32 nIndex = 0; - do - { - ... - nIndex = rtl_uString_getToken(&pToken, pStr, 0, ';', nIndex); - ... - } - while (nIndex >= 0); - - The new string does not necessarily have a reference count of 1, so it - must not be modified without checking the reference count. This function - does not handle out-of-memory conditions. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. If either token or index is negative, an empty token is stored in - newStr (and -1 is returned). - - @param str - a valid string. - - @param token - the number of the token to return, starting at index. - - @param cTok - the character that separates the tokens. - - @param idx - the position at which searching for the token starts. Must not be greater - than the length of str. - - @return - the index of the next token, or -1 if no more tokens follow. - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_uString_getToken( - rtl_uString ** newStr , rtl_uString * str, sal_Int32 token, sal_Unicode cTok, sal_Int32 idx ) SAL_THROW_EXTERN_C(); - -/* ======================================================================= */ - -/** Supply an ASCII string literal together with its length and text encoding. - - This macro can be used to compute (some of) the arguments in function calls - like rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo")). - - @param constAsciiStr - must be an expression of type "(possibly cv-qualified reference to) array of - (possibly cv-qualified) char." Each element of the referenced array must - represent an ASCII value in the range 0x00--0x7F. The last element of the - referenced array is not considered part of the represented ASCII string, and - its value should be 0x00. Depending on where this macro is used, the nature - of the supplied expression might be further restricted. -*/ -// The &foo[0] trick is intentional, it makes sure the type is char* or const char* -// (plain cast to const char* would not work with non-const char foo[]="a", which seems to be allowed). -// This is to avoid mistaken use with functions that accept string literals -// (i.e. const char (&)[N]) where usage of this macro otherwise could match -// the argument and a following int argument with a default value (e.g. OUString::match()). -#define RTL_CONSTASCII_USTRINGPARAM( constAsciiStr ) (&(constAsciiStr)[0]), \ - ((sal_Int32)(SAL_N_ELEMENTS(constAsciiStr)-1)), RTL_TEXTENCODING_ASCII_US - -/* ======================================================================= */ - -/* predefined constants for String-Conversion */ -#define OSTRING_TO_OUSTRING_CVTFLAGS (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE |\ - RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT |\ - RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT) - -/* ----------------------------------------------------------------------- */ - -/** Create a new Unicode string by converting a byte string, using a specific - text encoding. - - The lengths of the byte string and the Unicode string may differ (e.g., - for double-byte encodings, UTF-7, UTF-8). - - If the length of the byte string is greater than zero, the reference count - of the new string will be 1. - - If an out-of-memory condition occurs, newStr will point to a null pointer - upon return. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - @param str - a byte character array. Need not be null-terminated, but must be at - least as long as the specified len. - - @param len - the length of the byte character array. - - @param encoding - the text encoding to use for conversion. - - @param convertFlags - flags which control the conversion. Either use - OSTRING_TO_OUSTRING_CVTFLAGS, or see - <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more - details. - */ -SAL_DLLPUBLIC void SAL_CALL rtl_string2UString( - rtl_uString ** newStr, const sal_Char * str, sal_Int32 len, rtl_TextEncoding encoding, sal_uInt32 convertFlags ) SAL_THROW_EXTERN_C(); - -/* ======================================================================= */ -/* Interning methods */ - -/** Return a canonical representation for a string. - - A pool of strings, initially empty is maintained privately - by the string class. On invocation, if present in the pool - the original string will be returned. Otherwise this string, - or a copy thereof will be added to the pool and returned. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - If an out-of-memory condition occurs, newStr will point to a null pointer - upon return. - - @param str - pointer to the string to be interned. - - @since UDK 3.2.7 - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_intern( - rtl_uString ** newStr, rtl_uString * str) SAL_THROW_EXTERN_C(); - -/** Return a canonical representation for a string. - - A pool of strings, initially empty is maintained privately - by the string class. On invocation, if present in the pool - the original string will be returned. Otherwise this string, - or a copy thereof will be added to the pool and returned. - - @param newStr - pointer to the new string. The pointed-to data must be null or a valid - string. - - If an out-of-memory condition occurs, newStr will point to a null pointer - upon return. - - @param str - a byte character array. Need not be null-terminated, but must be at - least as long as the specified len. - - @param len - the length of the byte character array. - - @param encoding - the text encoding to use for conversion. - - @param convertFlags - flags which control the conversion. Either use - OSTRING_TO_OUSTRING_CVTFLAGS, or see - <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more - details. - - @param pInfo - pointer to return conversion status in, or NULL. - - @since UDK 3.2.7 - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_internConvert( - rtl_uString ** newStr, - const sal_Char * str, - sal_Int32 len, - rtl_TextEncoding encoding, - sal_uInt32 convertFlags, - sal_uInt32 *pInfo) SAL_THROW_EXTERN_C(); - -/** Iterate through a string based on code points instead of UTF-16 code units. - - See Chapter 3 of The Unicode Standard 5.0 (Addison--Wesley, 2006) for - definitions of the various terms used in this description. - - The given string is interpreted as a sequence of zero or more UTF-16 code - units. For each index into this sequence (from zero to one less than the - length of the sequence, inclusive), a code point represented starting at the - given index is computed as follows: - - - If the UTF-16 code unit addressed by the index constitutes a well-formed - UTF-16 code unit sequence, the computed code point is the scalar value - encoded by that UTF-16 code unit sequence. - - - Otherwise, if the index is at least two UTF-16 code units away from the - end of the sequence, and the sequence of two UTF-16 code units addressed by - the index constitutes a well-formed UTF-16 code unit sequence, the computed - code point is the scalar value encoded by that UTF-16 code unit sequence. - - - Otherwise, the computed code point is the UTF-16 code unit addressed by - the index. (This last case catches unmatched surrogates as well as indices - pointing into the middle of surrogate pairs.) - - @param string - pointer to a valid string; must not be null. - - @param indexUtf16 - pointer to a UTF-16 based index into the given string; must not be null. On - entry, the index must be in the range from zero to the length of the string - (in UTF-16 code units), inclusive. Upon successful return, the index will - be updated to address the UTF-16 code unit that is the given - incrementCodePoints away from the initial index. - - @param incrementCodePoints - the number of code points to move the given *indexUtf16. If non-negative, - moving is done after determining the code point at the index. If negative, - moving is done before determining the code point at the (then updated) - index. The value must be such that the resulting UTF-16 based index is in - the range from zero to the length of the string (in UTF-16 code units), - inclusive. - - @return - the code point (an integer in the range from 0 to 0x10FFFF, inclusive) that - is represented within the string starting at the index computed as follows: - If incrementCodePoints is non-negative, the index is the initial value of - *indexUtf16; if incrementCodePoints is negative, the index is the updated - value of *indexUtf16. In either case, the computed index must be in the - range from zero to one less than the length of the string (in UTF-16 code - units), inclusive. - - @since UDK 3.2.7 -*/ -SAL_DLLPUBLIC sal_uInt32 SAL_CALL rtl_uString_iterateCodePoints( - rtl_uString const * string, sal_Int32 * indexUtf16, - sal_Int32 incrementCodePoints); - -/** Converts a byte string to a Unicode string, signalling failure. - - @param target - An out parameter receiving the converted string. Must not be null itself, - and must contain either null or a pointer to a valid rtl_uString; the - contents are unspecified if conversion fails (rtl_convertStringToUString - returns false). - - @param source - The byte string. May only be null if length is zero. - - @param length - The length of the byte string. Must be non-negative. - - @param encoding - The text encoding to convert from. Must be an octet encoding (i.e., - rtl_isOctetTextEncoding(encoding) must return true). - - @param flags - A combination of RTL_TEXTTOUNICODE_FLAGS that detail how to do the - conversion (see rtl_convertTextToUnicode). RTL_TEXTTOUNICODE_FLAGS_FLUSH - need not be included, it is implicitly assumed. Typical uses are either - RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | - RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | - RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR (fail if a byte or multi-byte sequence - cannot be converted from the source encoding) or - OSTRING_TO_OUSTRING_CVTFLAGS (make a best efforts conversion). - - @return - True if the conversion succeeded, false otherwise. - - @since UDK 3.2.9 -*/ -SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_convertStringToUString( - rtl_uString ** target, char const * source, sal_Int32 length, - rtl_TextEncoding encoding, sal_uInt32 flags) SAL_THROW_EXTERN_C(); - -/** Ensure a string has enough space for a given number of characters. - - If the given string is large enough and has refcount of 1, it is not altered in any way. - Otherwise it is replaced by a copy that has enough space for the given number of characters, - data from the source string is copied to the beginning of it, the content of the remaining - capacity undefined, the string has refcount of 1, and refcount of the original string is decreased. - - @param str - pointer to the string. The pointed-to data must be a valid string. - - @param size - the number of characters - - @since LibreOffice 4.1 - @internal - */ -SAL_DLLPUBLIC void SAL_CALL rtl_uString_ensureCapacity( rtl_uString ** str, sal_Int32 size ) SAL_THROW_EXTERN_C(); - -#ifdef __cplusplus -} -#endif - -#endif /* _RTL_USTRING_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/ustring.hxx b/sal/inc/rtl/ustring.hxx deleted file mode 100644 index 13756f868198..000000000000 --- a/sal/inc/rtl/ustring.hxx +++ /dev/null @@ -1,2416 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _RTL_USTRING_HXX_ -#define _RTL_USTRING_HXX_ - -#include "sal/config.h" - -#include <cassert> -#include <ostream> -#include <string.h> - -#include "osl/diagnose.h" -#include <rtl/ustring.h> -#include <rtl/string.hxx> -#include <rtl/stringutils.hxx> -#include <rtl/textenc.h> -#include "sal/log.hxx" - -#ifdef RTL_FAST_STRING -#include <rtl/stringconcat.hxx> -#endif - -#if defined EXCEPTIONS_OFF -#include <stdlib.h> -#else -#include <new> -#endif - -// The unittest uses slightly different code to help check that the proper -// calls are made. The class is put into a different namespace to make -// sure the compiler generates a different (if generating also non-inline) -// copy of the function and does not merge them together. The class -// is "brought" into the proper rtl namespace by a typedef below. -#ifdef RTL_STRING_UNITTEST -#define rtl rtlunittest -#endif - -namespace rtl -{ - -#ifdef RTL_STRING_UNITTEST -#undef rtl -#endif - -/* ======================================================================= */ - -/** - This String class provides base functionality for C++ like Unicode - character array handling. The advantage of this class is that it - handles all the memory management for you - and it does it - more efficiently. If you assign a string to another string, the - data of both strings are shared (without any copy operation or - memory allocation) as long as you do not change the string. This class - also stores the length of the string, so that many operations are - faster than the C-str-functions. - - This class provides only readonly string handling. So you could create - a string and you could only query the content from this string. - It provides also functionality to change the string, but this results - in every case in a new string instance (in the most cases with a - memory allocation). You don't have functionality to change the - content of the string. If you want to change the string content, then - you should use the OStringBuffer class, which provides these - functionalities and avoids too much memory allocation. - - The design of this class is similar to the string classes in Java so - less people should have understanding problems when they use this class. -*/ - -class SAL_WARN_UNUSED OUString -{ -public: - /// @cond INTERNAL - rtl_uString * pData; - /// @endcond - -private: - class DO_NOT_ACQUIRE{}; - - OUString( rtl_uString * value, SAL_UNUSED_PARAMETER DO_NOT_ACQUIRE * ) - { - pData = value; - } - -public: - /** - New string containing no characters. - */ - OUString() SAL_THROW(()) - { - pData = 0; - rtl_uString_new( &pData ); - } - - /** - New string from OUString. - - @param str a OUString. - */ - OUString( const OUString & str ) SAL_THROW(()) - { - pData = str.pData; - rtl_uString_acquire( pData ); - } - - /** - New string from OUString data. - - @param str a OUString data. - */ - OUString( rtl_uString * str ) SAL_THROW(()) - { - pData = str; - rtl_uString_acquire( pData ); - } - - /** New OUString from OUString data without acquiring it. Takeover of ownership. - - The SAL_NO_ACQUIRE dummy parameter is only there to distinguish this - from other constructors. - - @param str - OUString data - */ - inline OUString( rtl_uString * str, __sal_NoAcquire ) SAL_THROW(()) - { pData = str; } - - /** - New string from a single Unicode character. - - @param value a Unicode character. - */ - explicit OUString( sal_Unicode value ) SAL_THROW(()) - : pData (0) - { - rtl_uString_newFromStr_WithLength( &pData, &value, 1 ); - } - - /** - New string from a Unicode character buffer array. - - @param value a NULL-terminated Unicode character array. - */ - OUString( const sal_Unicode * value ) SAL_THROW(()) - { - pData = 0; - rtl_uString_newFromStr( &pData, value ); - } - - /** - New string from a Unicode character buffer array. - - @param value a Unicode character array. - @param length the number of character which should be copied. - The character array length must be greater than - or equal to this value. - */ - OUString( const sal_Unicode * value, sal_Int32 length ) SAL_THROW(()) - { - pData = 0; - rtl_uString_newFromStr_WithLength( &pData, value, length ); - } - - /** - New string from an 8-Bit string literal that is expected to contain only - characters in the ASCII set (i.e. first 128 characters). This constructor - allows an efficient and convenient way to create OUString - instances from ASCII literals. When creating strings from data that - is not pure ASCII, it needs to be converted to OUString by explicitly - providing the encoding to use for the conversion. - - If there are any embedded \0's in the string literal, the result is undefined. - Use the overload that explicitly accepts length. - - @param literal the 8-bit ASCII string literal - - @since LibreOffice 3.6 - */ - template< typename T > - OUString( T& literal, typename internal::ConstCharArrayDetector< T, internal::Dummy >::Type = internal::Dummy() ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - pData = 0; - if( internal::ConstCharArrayDetector< T, void >::size - 1 == 0 ) // empty string - rtl_uString_new( &pData ); - else - rtl_uString_newFromLiteral( &pData, literal, internal::ConstCharArrayDetector< T, void >::size - 1, 0 ); -#ifdef RTL_STRING_UNITTEST - rtl_string_unittest_const_literal = true; -#endif - } - -#ifdef RTL_STRING_UNITTEST - /** - * Only used by unittests to detect incorrect conversions. - * @internal - */ - template< typename T > - OUString( T&, typename internal::ExceptConstCharArrayDetector< T >::Type = internal::Dummy() ) - { - pData = 0; - rtl_uString_newFromLiteral( &pData, "!!br0ken!!", 10, 0 ); // set to garbage - rtl_string_unittest_invalid_conversion = true; - } - /** - * Only used by unittests to detect incorrect conversions. - * @internal - */ - template< typename T > - OUString( const T&, typename internal::ExceptCharArrayDetector< T >::Type = internal::Dummy() ) - { - pData = 0; - rtl_uString_newFromLiteral( &pData, "!!br0ken!!", 10, 0 ); // set to garbage - rtl_string_unittest_invalid_conversion = true; - } -#endif - - /** - New string from an 8-Bit character buffer array. - - @param value An 8-Bit character array. - @param length The number of character which should be converted. - The 8-Bit character array length must be - greater than or equal to this value. - @param encoding The text encoding from which the 8-Bit character - sequence should be converted. - @param convertFlags Flags which control the conversion. - see RTL_TEXTTOUNICODE_FLAGS_... - - @exception std::bad_alloc is thrown if an out-of-memory condition occurs - */ - OUString( const sal_Char * value, sal_Int32 length, - rtl_TextEncoding encoding, - sal_uInt32 convertFlags = OSTRING_TO_OUSTRING_CVTFLAGS ) - { - pData = 0; - rtl_string2UString( &pData, value, length, encoding, convertFlags ); - if (pData == 0) { -#if defined EXCEPTIONS_OFF - abort(); -#else - throw std::bad_alloc(); -#endif - } - } - - /** Create a new string from an array of Unicode code points. - - @param codePoints - an array of at least codePointCount code points, which each must be in - the range from 0 to 0x10FFFF, inclusive. May be null if codePointCount - is zero. - - @param codePointCount - the non-negative number of code points. - - @exception std::bad_alloc - is thrown if either an out-of-memory condition occurs or the resulting - number of UTF-16 code units would have been larger than SAL_MAX_INT32. - - @since UDK 3.2.7 - */ - inline explicit OUString( - sal_uInt32 const * codePoints, sal_Int32 codePointCount): - pData(NULL) - { - rtl_uString_newFromCodePoints(&pData, codePoints, codePointCount); - if (pData == NULL) { -#if defined EXCEPTIONS_OFF - abort(); -#else - throw std::bad_alloc(); -#endif - } - } - -#ifdef RTL_FAST_STRING - /** - @overload - @internal - */ - template< typename T1, typename T2 > - OUString( const OUStringConcat< T1, T2 >& c ) - { - const sal_Int32 l = c.length(); - pData = rtl_uString_alloc( l ); - if (l != 0) - { - sal_Unicode* end = c.addData( pData->buffer ); - pData->length = end - pData->buffer; - *end = '\0'; - // TODO realloc in case pData->length is noticeably smaller than l? - } - } -#endif - - /** - Release the string data. - */ - ~OUString() SAL_THROW(()) - { - rtl_uString_release( pData ); - } - - /** Provides an OUString const & passing a storage pointer of an - rtl_uString * handle. - It is more convenient to use C++ OUString member functions when dealing - with rtl_uString * handles. Using this function avoids unnecessary - acquire()/release() calls for a temporary OUString object. - - @param ppHandle - pointer to storage - @return - OUString const & based on given storage - */ - static inline OUString const & unacquired( rtl_uString * const * ppHandle ) - { return * reinterpret_cast< OUString const * >( ppHandle ); } - - /** - Assign a new string. - - @param str a OUString. - */ - OUString & operator=( const OUString & str ) SAL_THROW(()) - { - rtl_uString_assign( &pData, str.pData ); - return *this; - } - - /** - Assign a new string from an 8-Bit string literal that is expected to contain only - characters in the ASCII set (i.e. first 128 characters). This operator - allows an efficient and convenient way to assign OUString - instances from ASCII literals. When assigning strings from data that - is not pure ASCII, it needs to be converted to OUString by explicitly - providing the encoding to use for the conversion. - - @param literal the 8-bit ASCII string literal - - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, OUString& >::Type operator=( T& literal ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - if( internal::ConstCharArrayDetector< T, void >::size - 1 == 0 ) // empty string - rtl_uString_new( &pData ); - else - rtl_uString_newFromLiteral( &pData, literal, internal::ConstCharArrayDetector< T, void >::size - 1, 0 ); - return *this; - } - - /** - Append a string to this string. - - @param str a OUString. - */ - OUString & operator+=( const OUString & str ) SAL_THROW(()) - { - rtl_uString_newConcat( &pData, pData, str.pData ); - return *this; - } - -#ifdef RTL_FAST_STRING - /** - @overload - @internal - */ - template< typename T1, typename T2 > - OUString& operator+=( const OUStringConcat< T1, T2 >& c ) - { - const int l = c.length(); - if( l == 0 ) - return *this; - rtl_uString_ensureCapacity( &pData, pData->length + l ); - sal_Unicode* end = c.addData( pData->buffer + pData->length ); - *end = '\0'; - pData->length = end - pData->buffer; - return *this; - } -#endif - - /** - Returns the length of this string. - - The length is equal to the number of Unicode characters in this string. - - @return the length of the sequence of characters represented by this - object. - */ - sal_Int32 getLength() const SAL_THROW(()) { return pData->length; } - - /** - Checks if a string is empty. - - @return true if the string is empty; - false, otherwise. - - @since LibreOffice 3.4 - */ - bool isEmpty() const SAL_THROW(()) - { - return pData->length == 0; - } - - /** - Returns a pointer to the Unicode character buffer for this string. - - It isn't necessarily NULL terminated. - - @return a pointer to the Unicode characters buffer for this object. - */ - const sal_Unicode * getStr() const SAL_THROW(()) { return pData->buffer; } - - /** - Access to individual characters. - - @param index must be non-negative and less than length. - - @return the character at the given index. - - @since LibreOffice 3.5 - */ - sal_Unicode operator [](sal_Int32 index) const { - assert(index >= 0 && index <= getLength()); - //TODO: should really check for < getLength(), but there is quite - // some clever code out there that violates this function's - // documented precondition and relies on s[s.getLength()] == 0 and - // that would need to be fixed first - return getStr()[index]; - } - - /** - Compares two strings. - - The comparison is based on the numeric value of each character in - the strings and return a value indicating their relationship. - This function can't be used for language specific sorting. - - @param str the object to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - */ - sal_Int32 compareTo( const OUString & str ) const SAL_THROW(()) - { - return rtl_ustr_compare_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ); - } - - /** - Compares two strings with a maximum count of characters. - - The comparison is based on the numeric value of each character in - the strings and return a value indicating their relationship. - This function can't be used for language specific sorting. - - @param str the object to be compared. - @param maxLength the maximum count of characters to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - - @since UDK 3.2.7 - */ - sal_Int32 compareTo( const OUString & str, sal_Int32 maxLength ) const SAL_THROW(()) - { - return rtl_ustr_shortenedCompare_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length, maxLength ); - } - - /** - Compares two strings in reverse order. - - The comparison is based on the numeric value of each character in - the strings and return a value indicating their relationship. - This function can't be used for language specific sorting. - - @param str the object to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - */ - sal_Int32 reverseCompareTo( const OUString & str ) const SAL_THROW(()) - { - return rtl_ustr_reverseCompare_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 4.1 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, sal_Int32 >::Type reverseCompareTo( T& literal ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_ustr_asciil_reverseCompare_WithLength( pData->buffer, pData->length, - literal, internal::ConstCharArrayDetector< T, void >::size - 1 ); - } - - /** - Perform a comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string. - This function can't be used for language specific comparison. - - @param str the object to be compared. - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equals( const OUString & str ) const SAL_THROW(()) - { - if ( pData->length != str.pData->length ) - return sal_False; - if ( pData == str.pData ) - return sal_True; - return rtl_ustr_reverseCompare_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ) == 0; - } - - /** - Perform a ASCII lowercase comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string, - ignoring the case. - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - This function can't be used for language specific comparison. - - @param str the object to be compared. - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equalsIgnoreAsciiCase( const OUString & str ) const SAL_THROW(()) - { - if ( pData->length != str.pData->length ) - return sal_False; - if ( pData == str.pData ) - return sal_True; - return rtl_ustr_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ) == 0; - } - - /** - Perform a ASCII lowercase comparison of two strings. - - Compare the two strings with uppercase ASCII - character values between 65 and 90 (ASCII A-Z) interpreted as - values between 97 and 122 (ASCII a-z). - This function can't be used for language specific comparison. - - @param str the object to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - - @since LibreOffice 4.0 - */ - sal_Int32 compareToIgnoreAsciiCase( const OUString & str ) const SAL_THROW(()) - { - return rtl_ustr_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ); - } - - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type equalsIgnoreAsciiCase( T& literal ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - if ( pData->length != internal::ConstCharArrayDetector< T, void >::size - 1 ) - return sal_False; - - return rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, literal ) == 0; - } - - /** - Match against a substring appearing in this string. - - The result is true if and only if the second string appears as a substring - of this string, at the given position. - This function can't be used for language specific comparison. - - @param str the object (substring) to be compared. - @param fromIndex the index to start the comparion from. - The index must be greater than or equal to 0 - and less or equal as the string length. - @return sal_True if str match with the characters in the string - at the given position; - sal_False, otherwise. - */ - sal_Bool match( const OUString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - return rtl_ustr_shortenedCompare_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - str.pData->buffer, str.pData->length, str.pData->length ) == 0; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type match( T& literal, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_ustr_ascii_shortenedCompare_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - literal, internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; - } - - /** - Match against a substring appearing in this string, ignoring the case of - ASCII letters. - - The result is true if and only if the second string appears as a substring - of this string, at the given position. - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - This function can't be used for language specific comparison. - - @param str the object (substring) to be compared. - @param fromIndex the index to start the comparion from. - The index must be greater than or equal to 0 - and less than or equal to the string length. - @return sal_True if str match with the characters in the string - at the given position; - sal_False, otherwise. - */ - sal_Bool matchIgnoreAsciiCase( const OUString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - return rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - str.pData->buffer, str.pData->length, - str.pData->length ) == 0; - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type matchIgnoreAsciiCase( T& literal, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - literal, internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; - } - - /** - Compares two strings. - - The comparison is based on the numeric value of each character in - the strings and return a value indicating their relationship. - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated. - This function can't be used for language specific sorting. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - */ - sal_Int32 compareToAscii( const sal_Char* asciiStr ) const SAL_THROW(()) - { - return rtl_ustr_ascii_compare_WithLength( pData->buffer, pData->length, asciiStr ); - } - - /** - Compares two strings with a maximum count of characters. - - The comparison is based on the numeric value of each character in - the strings and return a value indicating their relationship. - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated. - This function can't be used for language specific sorting. - - @deprecated This is a confusing overload with unexpectedly different - semantics from the one-parameter form, so it is marked as deprecated. - Practically all uses compare the return value against zero and can thus - be replaced with uses of startsWith. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @param maxLength the maximum count of characters to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - */ - SAL_DEPRECATED( - "replace s1.compareToAscii(s2, strlen(s2)) == 0 with s1.startsWith(s2)") - sal_Int32 compareToAscii( const sal_Char * asciiStr, sal_Int32 maxLength ) const SAL_THROW(()) - { - return rtl_ustr_ascii_shortenedCompare_WithLength( pData->buffer, pData->length, - asciiStr, maxLength ); - } - - /** - Compares two strings in reverse order. - - This could be useful, if normally both strings start with the same - content. The comparison is based on the numeric value of each character - in the strings and return a value indicating their relationship. - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and 127. - The ASCII string must be NULL-terminated and must be greater than - or equal to asciiStrLength. - This function can't be used for language specific sorting. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @param asciiStrLength the length of the ascii string - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - */ - sal_Int32 reverseCompareToAsciiL( const sal_Char * asciiStr, sal_Int32 asciiStrLength ) const SAL_THROW(()) - { - return rtl_ustr_asciil_reverseCompare_WithLength( pData->buffer, pData->length, - asciiStr, asciiStrLength ); - } - - /** - Perform a comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string. - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated. - This function can't be used for language specific comparison. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equalsAscii( const sal_Char* asciiStr ) const SAL_THROW(()) - { - return rtl_ustr_ascii_compare_WithLength( pData->buffer, pData->length, - asciiStr ) == 0; - } - - /** - Perform a comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string. - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated and must be greater than - or equal to asciiStrLength. - This function can't be used for language specific comparison. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @param asciiStrLength the length of the ascii string - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equalsAsciiL( const sal_Char* asciiStr, sal_Int32 asciiStrLength ) const SAL_THROW(()) - { - if ( pData->length != asciiStrLength ) - return sal_False; - - return rtl_ustr_asciil_reverseEquals_WithLength( - pData->buffer, asciiStr, asciiStrLength ); - } - - /** - Perform a ASCII lowercase comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string, - ignoring the case. - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated. - This function can't be used for language specific comparison. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equalsIgnoreAsciiCaseAscii( const sal_Char * asciiStr ) const SAL_THROW(()) - { - return rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, asciiStr ) == 0; - } - - /** - Compares two ASCII strings ignoring case - - The comparison is based on the numeric value of each character in - the strings and return a value indicating their relationship. - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated. - This function can't be used for language specific sorting. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @return 0 - if both strings are equal - < 0 - if this string is less than the string argument - > 0 - if this string is greater than the string argument - - @since LibreOffice 3.5 - */ - sal_Int32 compareToIgnoreAsciiCaseAscii( const sal_Char * asciiStr ) const SAL_THROW(()) - { - return rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, asciiStr ); - } - - /** - Perform an ASCII lowercase comparison of two strings. - - The result is true if and only if second string - represents the same sequence of characters as the first string, - ignoring the case. - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and 127. - The ASCII string must be NULL-terminated and must be greater than - or equal to asciiStrLength. - This function can't be used for language specific comparison. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @param asciiStrLength the length of the ascii string - @return sal_True if the strings are equal; - sal_False, otherwise. - */ - sal_Bool equalsIgnoreAsciiCaseAsciiL( const sal_Char * asciiStr, sal_Int32 asciiStrLength ) const SAL_THROW(()) - { - if ( pData->length != asciiStrLength ) - return sal_False; - - return rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, asciiStr ) == 0; - } - - /** - Match against a substring appearing in this string. - - The result is true if and only if the second string appears as a substring - of this string, at the given position. - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated and must be greater than or - equal to asciiStrLength. - This function can't be used for language specific comparison. - - @param asciiStr the object (substring) to be compared. - @param asciiStrLength the length of asciiStr. - @param fromIndex the index to start the comparion from. - The index must be greater than or equal to 0 - and less than or equal to the string length. - @return sal_True if str match with the characters in the string - at the given position; - sal_False, otherwise. - */ - sal_Bool matchAsciiL( const sal_Char* asciiStr, sal_Int32 asciiStrLength, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - return rtl_ustr_ascii_shortenedCompare_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - asciiStr, asciiStrLength ) == 0; - } - - // This overload is left undefined, to detect calls of matchAsciiL that - // erroneously use RTL_CONSTASCII_USTRINGPARAM instead of - // RTL_CONSTASCII_STRINGPARAM (but would lead to ambiguities on 32 bit - // platforms): -#if SAL_TYPES_SIZEOFLONG == 8 - void matchAsciiL(char const *, sal_Int32, rtl_TextEncoding) const; -#endif - - /** - Match against a substring appearing in this string, ignoring the case of - ASCII letters. - - The result is true if and only if the second string appears as a substring - of this string, at the given position. - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated and must be greater than or - equal to asciiStrLength. - This function can't be used for language specific comparison. - - @param asciiStr the 8-Bit ASCII character string to be compared. - @param asciiStrLength the length of the ascii string - @param fromIndex the index to start the comparion from. - The index must be greater than or equal to 0 - and less than or equal to the string length. - @return sal_True if str match with the characters in the string - at the given position; - sal_False, otherwise. - */ - sal_Bool matchIgnoreAsciiCaseAsciiL( const sal_Char* asciiStr, sal_Int32 asciiStrLength, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - return rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - asciiStr, asciiStrLength ) == 0; - } - - // This overload is left undefined, to detect calls of - // matchIgnoreAsciiCaseAsciiL that erroneously use - // RTL_CONSTASCII_USTRINGPARAM instead of RTL_CONSTASCII_STRINGPARAM (but - // would lead to ambiguities on 32 bit platforms): -#if SAL_TYPES_SIZEOFLONG == 8 - void matchIgnoreAsciiCaseAsciiL(char const *, sal_Int32, rtl_TextEncoding) - const; -#endif - - /** - Check whether this string starts with a given substring. - - @param str the substring to be compared - - @return true if and only if the given str appears as a substring at the - start of this string - - @since LibreOffice 4.0 - */ - bool startsWith(OUString const & str) const { - return match(str, 0); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 4.0 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type startsWith( T& literal ) const - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return internal::ConstCharArrayDetector< T, void >::size - 1 <= pData->length - && rtl_ustr_asciil_reverseEquals_WithLength( pData->buffer, literal, - internal::ConstCharArrayDetector< T, void >::size - 1); - } - - /** - Check whether this string starts with a given string, ignoring the case of - ASCII letters. - - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - This function can't be used for language specific comparison. - - @param str the object (substring) to be compared. - @return true if this string starts with str, ignoring the case of ASCII - letters ("A"--"Z" and "a"--"z"); otherwise, false is returned - @since LibreOffice 4.0 - */ - sal_Bool startsWithIgnoreAsciiCase( const OUString & str ) const SAL_THROW(()) - { - return matchIgnoreAsciiCase(str, 0); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 4.0 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type startsWithIgnoreAsciiCase( T& literal ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( - pData->buffer, - internal::ConstCharArrayDetector< T, void >::size - 1, literal, - internal::ConstCharArrayDetector< T, void >::size - 1) - == 0); - } - - /** - Check whether this string ends with a given substring. - - @param str the substring to be compared - - @return true if and only if the given str appears as a substring at the - end of this string - - @since LibreOffice 3.6 - */ - bool endsWith(OUString const & str) const { - return str.getLength() <= getLength() - && match(str, getLength() - str.getLength()); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type endsWith( T& literal ) const - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return internal::ConstCharArrayDetector< T, void >::size - 1 <= pData->length - && rtl_ustr_asciil_reverseEquals_WithLength( - pData->buffer + pData->length - ( internal::ConstCharArrayDetector< T, void >::size - 1 ), literal, - internal::ConstCharArrayDetector< T, void >::size - 1); - } - - /** - Check whether this string ends with a given ASCII string. - - @param asciiStr a sequence of at least asciiStrLength ASCII characters - (bytes in the range 0x00--0x7F) - @param asciiStrLength the length of asciiStr; must be non-negative - @return true if this string ends with asciiStr; otherwise, false is - returned - - @since UDK 3.2.7 - */ - inline bool endsWithAsciiL(char const * asciiStr, sal_Int32 asciiStrLength) - const - { - return asciiStrLength <= pData->length - && rtl_ustr_asciil_reverseEquals_WithLength( - pData->buffer + pData->length - asciiStrLength, asciiStr, - asciiStrLength); - } - - /** - Check whether this string ends with a given string, ignoring the case of - ASCII letters. - - Character values between 65 and 90 (ASCII A-Z) are interpreted as - values between 97 and 122 (ASCII a-z). - This function can't be used for language specific comparison. - - @param str the object (substring) to be compared. - @return true if this string ends with str, ignoring the case of ASCII - letters ("A"--"Z" and "a"--"z"); otherwise, false is returned - @since LibreOffice 3.6 - */ - sal_Bool endsWithIgnoreAsciiCase( const OUString & str ) const SAL_THROW(()) - { - return str.getLength() <= getLength() - && matchIgnoreAsciiCase(str, getLength() - str.getLength()); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, bool >::Type endsWithIgnoreAsciiCase( T& literal ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return internal::ConstCharArrayDetector< T, void >::size - 1 <= pData->length - && (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( - pData->buffer + pData->length - ( internal::ConstCharArrayDetector< T, void >::size - 1 ), - internal::ConstCharArrayDetector< T, void >::size - 1, literal, - internal::ConstCharArrayDetector< T, void >::size - 1) - == 0); - } - - /** - Check whether this string ends with a given ASCII string, ignoring the - case of ASCII letters. - - @param asciiStr a sequence of at least asciiStrLength ASCII characters - (bytes in the range 0x00--0x7F) - @param asciiStrLength the length of asciiStr; must be non-negative - @return true if this string ends with asciiStr, ignoring the case of ASCII - letters ("A"--"Z" and "a"--"z"); otherwise, false is returned - */ - inline bool endsWithIgnoreAsciiCaseAsciiL( - char const * asciiStr, sal_Int32 asciiStrLength) const - { - return asciiStrLength <= pData->length - && (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( - pData->buffer + pData->length - asciiStrLength, - asciiStrLength, asciiStr, asciiStrLength) - == 0); - } - - friend sal_Bool operator == ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) - { return rStr1.equals(rStr2); } - friend sal_Bool operator == ( const OUString& rStr1, const sal_Unicode * pStr2 ) SAL_THROW(()) - { return rStr1.compareTo( pStr2 ) == 0; } - friend sal_Bool operator == ( const sal_Unicode * pStr1, const OUString& rStr2 ) SAL_THROW(()) - { return OUString( pStr1 ).compareTo( rStr2 ) == 0; } - - friend sal_Bool operator != ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) - { return !(operator == ( rStr1, rStr2 )); } - friend sal_Bool operator != ( const OUString& rStr1, const sal_Unicode * pStr2 ) SAL_THROW(()) - { return !(operator == ( rStr1, pStr2 )); } - friend sal_Bool operator != ( const sal_Unicode * pStr1, const OUString& rStr2 ) SAL_THROW(()) - { return !(operator == ( pStr1, rStr2 )); } - - friend sal_Bool operator < ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) - { return rStr1.compareTo( rStr2 ) < 0; } - friend sal_Bool operator > ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) - { return rStr1.compareTo( rStr2 ) > 0; } - friend sal_Bool operator <= ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) - { return rStr1.compareTo( rStr2 ) <= 0; } - friend sal_Bool operator >= ( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) - { return rStr1.compareTo( rStr2 ) >= 0; } - - /** - * Compare string to an ASCII string literal. - * - * This operator is equal to calling equalsAsciiL(). - * - * @since LibreOffice 3.6 - */ - template< typename T > - friend inline typename internal::ConstCharArrayDetector< T, bool >::Type operator==( const OUString& string, T& literal ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return string.equalsAsciiL( literal, internal::ConstCharArrayDetector< T, void >::size - 1 ); - } - /** - * Compare string to an ASCII string literal. - * - * This operator is equal to calling equalsAsciiL(). - * - * @since LibreOffice 3.6 - */ - template< typename T > - friend inline typename internal::ConstCharArrayDetector< T, bool >::Type operator==( T& literal, const OUString& string ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return string.equalsAsciiL( literal, internal::ConstCharArrayDetector< T, void >::size - 1 ); - } - /** - * Compare string to an ASCII string literal. - * - * This operator is equal to calling !equalsAsciiL(). - * - * @since LibreOffice 3.6 - */ - template< typename T > - friend inline typename internal::ConstCharArrayDetector< T, bool >::Type operator!=( const OUString& string, T& literal ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return !string.equalsAsciiL( literal, internal::ConstCharArrayDetector< T, void >::size - 1 ); - } - /** - * Compare string to an ASCII string literal. - * - * This operator is equal to calling !equalsAsciiL(). - * - * @since LibreOffice 3.6 - */ - template< typename T > - friend inline typename internal::ConstCharArrayDetector< T, bool >::Type operator!=( T& literal, const OUString& string ) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return !string.equalsAsciiL( literal, internal::ConstCharArrayDetector< T, void >::size - 1 ); - } - - /** - Returns a hashcode for this string. - - @return a hash code value for this object. - - @see rtl::OUStringHash for convenient use of boost::unordered_map - */ - sal_Int32 hashCode() const SAL_THROW(()) - { - return rtl_ustr_hashCode_WithLength( pData->buffer, pData->length ); - } - - /** - Returns the index within this string of the first occurrence of the - specified character, starting the search at the specified index. - - @param ch character to be located. - @param fromIndex the index to start the search from. - The index must be greater than or equal to 0 - and less than or equal to the string length. - @return the index of the first occurrence of the character in the - character sequence represented by this string that is - greater than or equal to fromIndex, or - -1 if the character does not occur. - */ - sal_Int32 indexOf( sal_Unicode ch, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - sal_Int32 ret = rtl_ustr_indexOfChar_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, ch ); - return (ret < 0 ? ret : ret+fromIndex); - } - - /** - Returns the index within this string of the last occurrence of the - specified character, searching backward starting at the end. - - @param ch character to be located. - @return the index of the last occurrence of the character in the - character sequence represented by this string, or - -1 if the character does not occur. - */ - sal_Int32 lastIndexOf( sal_Unicode ch ) const SAL_THROW(()) - { - return rtl_ustr_lastIndexOfChar_WithLength( pData->buffer, pData->length, ch ); - } - - /** - Returns the index within this string of the last occurrence of the - specified character, searching backward starting before the specified - index. - - @param ch character to be located. - @param fromIndex the index before which to start the search. - @return the index of the last occurrence of the character in the - character sequence represented by this string that - is less than fromIndex, or -1 - if the character does not occur before that point. - */ - sal_Int32 lastIndexOf( sal_Unicode ch, sal_Int32 fromIndex ) const SAL_THROW(()) - { - return rtl_ustr_lastIndexOfChar_WithLength( pData->buffer, fromIndex, ch ); - } - - /** - Returns the index within this string of the first occurrence of the - specified substring, starting at the specified index. - - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @param str the substring to search for. - @param fromIndex the index to start the search from. - @return If the string argument occurs one or more times as a substring - within this string at the starting index, then the index - of the first character of the first such substring is - returned. If it does not occur as a substring starting - at fromIndex or beyond, -1 is returned. - */ - sal_Int32 indexOf( const OUString & str, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - sal_Int32 ret = rtl_ustr_indexOfStr_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - str.pData->buffer, str.pData->length ); - return (ret < 0 ? ret : ret+fromIndex); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, sal_Int32 >::Type indexOf( T& literal, sal_Int32 fromIndex = 0 ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - sal_Int32 ret = rtl_ustr_indexOfAscii_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, literal, - internal::ConstCharArrayDetector< T, void >::size - 1); - return ret < 0 ? ret : ret + fromIndex; - } - - /** - Returns the index within this string of the first occurrence of the - specified ASCII substring, starting at the specified index. - - @param str - the substring to be searched for. Need not be null-terminated, but must - be at least as long as the specified len. Must only contain characters - in the ASCII range 0x00--7F. - - @param len - the length of the substring; must be non-negative. - - @param fromIndex - the index to start the search from. Must be in the range from zero to - the length of this string, inclusive. - - @return - the index (starting at 0) of the first character of the first occurrence - of the substring within this string starting at the given fromIndex, or - -1 if the substring does not occur. If len is zero, -1 is returned. - - @since UDK 3.2.7 - */ - sal_Int32 indexOfAsciiL( - char const * str, sal_Int32 len, sal_Int32 fromIndex = 0) const - SAL_THROW(()) - { - sal_Int32 ret = rtl_ustr_indexOfAscii_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, str, len); - return ret < 0 ? ret : ret + fromIndex; - } - - // This overload is left undefined, to detect calls of indexOfAsciiL that - // erroneously use RTL_CONSTASCII_USTRINGPARAM instead of - // RTL_CONSTASCII_STRINGPARAM (but would lead to ambiguities on 32 bit - // platforms): -#if SAL_TYPES_SIZEOFLONG == 8 - void indexOfAsciiL(char const *, sal_Int32 len, rtl_TextEncoding) const; -#endif - - /** - Returns the index within this string of the last occurrence of - the specified substring, searching backward starting at the end. - - The returned index indicates the starting index of the substring - in this string. - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @param str the substring to search for. - @return If the string argument occurs one or more times as a substring - within this string, then the index of the first character of - the last such substring is returned. If it does not occur as - a substring, -1 is returned. - */ - sal_Int32 lastIndexOf( const OUString & str ) const SAL_THROW(()) - { - return rtl_ustr_lastIndexOfStr_WithLength( pData->buffer, pData->length, - str.pData->buffer, str.pData->length ); - } - - /** - Returns the index within this string of the last occurrence of - the specified substring, searching backward starting before the specified - index. - - The returned index indicates the starting index of the substring - in this string. - If str doesn't include any character, always -1 is - returned. This is also the case, if both strings are empty. - - @param str the substring to search for. - @param fromIndex the index before which to start the search. - @return If the string argument occurs one or more times as a substring - within this string before the starting index, then the index - of the first character of the last such substring is - returned. Otherwise, -1 is returned. - */ - sal_Int32 lastIndexOf( const OUString & str, sal_Int32 fromIndex ) const SAL_THROW(()) - { - return rtl_ustr_lastIndexOfStr_WithLength( pData->buffer, fromIndex, - str.pData->buffer, str.pData->length ); - } - - /** - @overload - This function accepts an ASCII string literal as its argument. - @since LibreOffice 3.6 - */ - template< typename T > - typename internal::ConstCharArrayDetector< T, sal_Int32 >::Type lastIndexOf( T& literal ) const SAL_THROW(()) - { - assert( strlen( literal ) == internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_ustr_lastIndexOfAscii_WithLength( - pData->buffer, pData->length, literal, internal::ConstCharArrayDetector< T, void >::size - 1); - } - - /** - Returns the index within this string of the last occurrence of the - specified ASCII substring. - - @param str - the substring to be searched for. Need not be null-terminated, but must - be at least as long as the specified len. Must only contain characters - in the ASCII range 0x00--7F. - - @param len - the length of the substring; must be non-negative. - - @return - the index (starting at 0) of the first character of the last occurrence - of the substring within this string, or -1 if the substring does not - occur. If len is zero, -1 is returned. - - @since UDK 3.2.7 - */ - sal_Int32 lastIndexOfAsciiL(char const * str, sal_Int32 len) const - SAL_THROW(()) - { - return rtl_ustr_lastIndexOfAscii_WithLength( - pData->buffer, pData->length, str, len); - } - - /** - Returns a new string that is a substring of this string. - - The substring begins at the specified beginIndex. If - beginIndex is negative or be greater than the length of - this string, behaviour is undefined. - - @param beginIndex the beginning index, inclusive. - @return the specified substring. - */ - SAL_WARN_UNUSED_RESULT OUString copy( sal_Int32 beginIndex ) const SAL_THROW(()) - { - rtl_uString *pNew = 0; - rtl_uString_newFromSubString( &pNew, pData, beginIndex, getLength() - beginIndex ); - return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a new string that is a substring of this string. - - The substring begins at the specified beginIndex and contains count - characters. If either beginIndex or count are negative, - or beginIndex + count are greater than the length of this string - then behaviour is undefined. - - @param beginIndex the beginning index, inclusive. - @param count the number of characters. - @return the specified substring. - */ - SAL_WARN_UNUSED_RESULT OUString copy( sal_Int32 beginIndex, sal_Int32 count ) const SAL_THROW(()) - { - rtl_uString *pNew = 0; - rtl_uString_newFromSubString( &pNew, pData, beginIndex, count ); - return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Concatenates the specified string to the end of this string. - - @param str the string that is concatenated to the end - of this string. - @return a string that represents the concatenation of this string - followed by the string argument. - */ - SAL_WARN_UNUSED_RESULT OUString concat( const OUString & str ) const SAL_THROW(()) - { - rtl_uString* pNew = 0; - rtl_uString_newConcat( &pNew, pData, str.pData ); - return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - -#ifndef RTL_FAST_STRING - friend OUString operator+( const OUString& rStr1, const OUString& rStr2 ) SAL_THROW(()) - { - return rStr1.concat( rStr2 ); - } -#endif - - /** - Returns a new string resulting from replacing n = count characters - from position index in this string with newStr. - - @param index the replacing index in str. - The index must be greater than or equal to 0 and - less than or equal to the length of the string. - @param count the count of characters that will be replaced - The count must be greater than or equal to 0 and - less than or equal to the length of the string minus index. - @param newStr the new substring. - @return the new string. - */ - SAL_WARN_UNUSED_RESULT OUString replaceAt( sal_Int32 index, sal_Int32 count, const OUString& newStr ) const SAL_THROW(()) - { - rtl_uString* pNew = 0; - rtl_uString_newReplaceStrAt( &pNew, pData, index, count, newStr.pData ); - return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a new string resulting from replacing all occurrences of - oldChar in this string with newChar. - - If the character oldChar does not occur in the character sequence - represented by this object, then the string is assigned with - str. - - @param oldChar the old character. - @param newChar the new character. - @return a string derived from this string by replacing every - occurrence of oldChar with newChar. - */ - SAL_WARN_UNUSED_RESULT OUString replace( sal_Unicode oldChar, sal_Unicode newChar ) const SAL_THROW(()) - { - rtl_uString* pNew = 0; - rtl_uString_newReplace( &pNew, pData, oldChar, newChar ); - return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a new string resulting from replacing the first occurrence of a - given substring with another substring. - - @param from the substring to be replaced - - @param to the replacing substring - - @param[in,out] index pointer to a start index; if the pointer is - non-null: upon entry to the function, its value is the index into this - string at which to start searching for the \p from substring, the value - must be non-negative and not greater than this string's length; upon exiting - the function its value is the index into this string at which the - replacement took place or -1 if no replacement took place; if the pointer - is null, searching always starts at index 0 - - @since LibreOffice 3.6 - */ - SAL_WARN_UNUSED_RESULT OUString replaceFirst( - OUString const & from, OUString const & to, sal_Int32 * index = 0) const - { - rtl_uString * s = 0; - sal_Int32 i = 0; - rtl_uString_newReplaceFirst( - &s, pData, from.pData, to.pData, index == 0 ? &i : index); - return OUString(s, SAL_NO_ACQUIRE); - } - - /** - Returns a new string resulting from replacing the first occurrence of a - given substring with another substring. - - @param from ASCII string literal, the substring to be replaced - - @param to the replacing substring - - @param[in,out] index pointer to a start index; if the pointer is - non-null: upon entry to the function, its value is the index into the this - string at which to start searching for the \p from substring, the value - must be non-negative and not greater than this string's length; upon exiting - the function its value is the index into this string at which the - replacement took place or -1 if no replacement took place; if the pointer - is null, searching always starts at index 0 - - @since LibreOffice 3.6 - */ - template< typename T > - SAL_WARN_UNUSED_RESULT typename internal::ConstCharArrayDetector< T, OUString >::Type replaceFirst( T& from, OUString const & to, - sal_Int32 * index = 0) const - { - rtl_uString * s = 0; - sal_Int32 i = 0; - assert( strlen( from ) == internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_uString_newReplaceFirstAsciiL( - &s, pData, from, internal::ConstCharArrayDetector< T, void >::size - 1, to.pData, index == 0 ? &i : index); - return OUString(s, SAL_NO_ACQUIRE); - } - - /** - Returns a new string resulting from replacing the first occurrence of a - given substring with another substring. - - @param from ASCII string literal, the substring to be replaced - - @param to ASCII string literal, the substring to be replaced - - @param[in,out] index pointer to a start index; if the pointer is - non-null: upon entry to the function, its value is the index into the this - string at which to start searching for the \p from substring, the value - must be non-negative and not greater than this string's length; upon exiting - the function its value is the index into this string at which the - replacement took place or -1 if no replacement took place; if the pointer - is null, searching always starts at index 0 - - @since LibreOffice 3.6 - */ - template< typename T1, typename T2 > - SAL_WARN_UNUSED_RESULT typename internal::ConstCharArrayDetector< T1, typename internal::ConstCharArrayDetector< T2, OUString >::Type >::Type - replaceFirst( T1& from, T2& to, sal_Int32 * index = 0) const - { - rtl_uString * s = 0; - sal_Int32 i = 0; - assert( strlen( from ) == internal::ConstCharArrayDetector< T1 >::size - 1 ); - assert( strlen( to ) == internal::ConstCharArrayDetector< T2 >::size - 1 ); - rtl_uString_newReplaceFirstAsciiLAsciiL( - &s, pData, from, internal::ConstCharArrayDetector< T1, void >::size - 1, to, - internal::ConstCharArrayDetector< T2, void >::size - 1, index == 0 ? &i : index); - return OUString(s, SAL_NO_ACQUIRE); - } - - /** - Returns a new string resulting from replacing all occurrences of a given - substring with another substring. - - Replacing subsequent occurrences picks up only after a given replacement. - That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx". - - @param from the substring to be replaced - - @param to the replacing substring - - @param fromIndex the position in the string where we will begin searching - - @since LibreOffice 4.0 - */ - SAL_WARN_UNUSED_RESULT OUString replaceAll( - OUString const & from, OUString const & to, sal_Int32 fromIndex = 0) const - { - rtl_uString * s = 0; - rtl_uString_newReplaceAllFromIndex(&s, pData, from.pData, to.pData, fromIndex); - return OUString(s, SAL_NO_ACQUIRE); - } - - /** - Returns a new string resulting from replacing all occurrences of a given - substring with another substring. - - Replacing subsequent occurrences picks up only after a given replacement. - That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx". - - @param from ASCII string literal, the substring to be replaced - - @param to the replacing substring - - @since LibreOffice 3.6 - */ - template< typename T > - SAL_WARN_UNUSED_RESULT typename internal::ConstCharArrayDetector< T, OUString >::Type replaceAll( T& from, OUString const & to) const - { - rtl_uString * s = 0; - assert( strlen( from ) == internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_uString_newReplaceAllAsciiL(&s, pData, from, internal::ConstCharArrayDetector< T, void >::size - 1, to.pData); - return OUString(s, SAL_NO_ACQUIRE); - } - - /** - Returns a new string resulting from replacing all occurrences of a given - substring with another substring. - - Replacing subsequent occurrences picks up only after a given replacement. - That is, replacing from "xa" to "xx" in "xaa" results in "xxa", not "xxx". - - @param from ASCII string literal, the substring to be replaced - - @param to ASCII string literal, the substring to be replaced - - @since LibreOffice 3.6 - */ - template< typename T1, typename T2 > - SAL_WARN_UNUSED_RESULT typename internal::ConstCharArrayDetector< T1, typename internal::ConstCharArrayDetector< T2, OUString >::Type >::Type - replaceAll( T1& from, T2& to ) const - { - rtl_uString * s = 0; - assert( strlen( from ) == internal::ConstCharArrayDetector< T1 >::size - 1 ); - assert( strlen( to ) == internal::ConstCharArrayDetector< T2 >::size - 1 ); - rtl_uString_newReplaceAllAsciiLAsciiL( - &s, pData, from, internal::ConstCharArrayDetector< T1, void >::size - 1, - to, internal::ConstCharArrayDetector< T2, void >::size - 1); - return OUString(s, SAL_NO_ACQUIRE); - } - - /** - Converts from this string all ASCII uppercase characters (65-90) - to ASCII lowercase characters (97-122). - - This function can't be used for language specific conversion. - If the string doesn't contain characters which must be converted, - then the new string is assigned with str. - - @return the string, converted to ASCII lowercase. - */ - SAL_WARN_UNUSED_RESULT OUString toAsciiLowerCase() const SAL_THROW(()) - { - rtl_uString* pNew = 0; - rtl_uString_newToAsciiLowerCase( &pNew, pData ); - return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Converts from this string all ASCII lowercase characters (97-122) - to ASCII uppercase characters (65-90). - - This function can't be used for language specific conversion. - If the string doesn't contain characters which must be converted, - then the new string is assigned with str. - - @return the string, converted to ASCII uppercase. - */ - SAL_WARN_UNUSED_RESULT OUString toAsciiUpperCase() const SAL_THROW(()) - { - rtl_uString* pNew = 0; - rtl_uString_newToAsciiUpperCase( &pNew, pData ); - return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a new string resulting from removing white space from both ends - of the string. - - All characters that have codes less than or equal to - 32 (the space character) are considered to be white space. - If the string doesn't contain white spaces at both ends, - then the new string is assigned with str. - - @return the string, with white space removed from the front and end. - */ - SAL_WARN_UNUSED_RESULT OUString trim() const SAL_THROW(()) - { - rtl_uString* pNew = 0; - rtl_uString_newTrim( &pNew, pData ); - return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns a token in the string. - - Example: - sal_Int32 nIndex = 0; - do - { - ... - OUString aToken = aStr.getToken( 0, ';', nIndex ); - ... - } - while ( nIndex >= 0 ); - - @param token the number of the token to return - @param cTok the character which seperate the tokens. - @param index the position at which the token is searched in the - string. - The index must not be greater than the length of the - string. - This param is set to the position of the - next token or to -1, if it is the last token. - @return the token; if either token or index is negative, an empty token - is returned (and index is set to -1) - */ - OUString getToken( sal_Int32 token, sal_Unicode cTok, sal_Int32& index ) const SAL_THROW(()) - { - rtl_uString * pNew = 0; - index = rtl_uString_getToken( &pNew, pData, token, cTok, index ); - return OUString( pNew, (DO_NOT_ACQUIRE *)0 ); - } - - /** - Returns a token from the string. - - The same as getToken(sal_Int32, sal_Unicode, sal_Int32 &), but always - passing in 0 as the start index in the third argument. - - @param count the number of the token to return, starting with 0 - @param separator the character which separates the tokens - - @return the given token, or an empty string - - @since LibreOffice 3.6 - */ - OUString getToken(sal_Int32 count, sal_Unicode separator) const { - sal_Int32 n = 0; - return getToken(count, separator, n); - } - - /** - Returns the Boolean value from this string. - - This function can't be used for language specific conversion. - - @return sal_True, if the string is 1 or "True" in any ASCII case. - sal_False in any other case. - */ - sal_Bool toBoolean() const SAL_THROW(()) - { - return rtl_ustr_toBoolean( pData->buffer ); - } - - /** - Returns the first character from this string. - - @return the first character from this string or 0, if this string - is emptry. - */ - sal_Unicode toChar() const SAL_THROW(()) - { - return pData->buffer[0]; - } - - /** - Returns the int32 value from this string. - - This function can't be used for language specific conversion. - - @param radix the radix (between 2 and 36) - @return the int32 represented from this string. - 0 if this string represents no number or one of too large - magnitude. - */ - sal_Int32 toInt32( sal_Int16 radix = 10 ) const SAL_THROW(()) - { - return rtl_ustr_toInt32( pData->buffer, radix ); - } - - /** - Returns the int64 value from this string. - - This function can't be used for language specific conversion. - - @param radix the radix (between 2 and 36) - @return the int64 represented from this string. - 0 if this string represents no number or one of too large - magnitude. - */ - sal_Int64 toInt64( sal_Int16 radix = 10 ) const SAL_THROW(()) - { - return rtl_ustr_toInt64( pData->buffer, radix ); - } - - /** - Returns the uint64 value from this string. - - This function can't be used for language specific conversion. - - @param radix the radix (between 2 and 36) - @return the uint64 represented from this string. - 0 if this string represents no number or one of too large - magnitude. - - @since LibreOffice 4.1 - */ - sal_uInt64 toUInt64( sal_Int16 radix = 10 ) const SAL_THROW(()) - { - return rtl_ustr_toUInt64( pData->buffer, radix ); - } - - /** - Returns the float value from this string. - - This function can't be used for language specific conversion. - - @return the float represented from this string. - 0.0 if this string represents no number. - */ - float toFloat() const SAL_THROW(()) - { - return rtl_ustr_toFloat( pData->buffer ); - } - - /** - Returns the double value from this string. - - This function can't be used for language specific conversion. - - @return the double represented from this string. - 0.0 if this string represents no number. - */ - double toDouble() const SAL_THROW(()) - { - return rtl_ustr_toDouble( pData->buffer ); - } - - - /** - Return a canonical representation for a string. - - A pool of strings, initially empty is maintained privately - by the string class. On invocation, if present in the pool - the original string will be returned. Otherwise this string, - or a copy thereof will be added to the pool and returned. - - @return - a version of the string from the pool. - - @exception std::bad_alloc is thrown if an out-of-memory condition occurs - - @since UDK 3.2.7 - */ - OUString intern() const - { - rtl_uString * pNew = 0; - rtl_uString_intern( &pNew, pData ); - if (pNew == 0) { -#if defined EXCEPTIONS_OFF - abort(); -#else - throw std::bad_alloc(); -#endif - } - return OUString( pNew, (DO_NOT_ACQUIRE *)0 ); - } - - /** - Return a canonical representation for a converted string. - - A pool of strings, initially empty is maintained privately - by the string class. On invocation, if present in the pool - the original string will be returned. Otherwise this string, - or a copy thereof will be added to the pool and returned. - - @param value a 8-Bit character array. - @param length the number of character which should be converted. - The 8-Bit character array length must be - greater than or equal to this value. - @param encoding the text encoding from which the 8-Bit character - sequence should be converted. - @param convertFlags flags which controls the conversion. - see RTL_TEXTTOUNICODE_FLAGS_... - @param pInfo pointer to return conversion status or NULL. - - @return - a version of the converted string from the pool. - - @exception std::bad_alloc is thrown if an out-of-memory condition occurs - - @since UDK 3.2.7 - */ - static OUString intern( const sal_Char * value, sal_Int32 length, - rtl_TextEncoding encoding, - sal_uInt32 convertFlags = OSTRING_TO_OUSTRING_CVTFLAGS, - sal_uInt32 *pInfo = NULL ) - { - rtl_uString * pNew = 0; - rtl_uString_internConvert( &pNew, value, length, encoding, - convertFlags, pInfo ); - if (pNew == 0) { -#if defined EXCEPTIONS_OFF - abort(); -#else - throw std::bad_alloc(); -#endif - } - return OUString( pNew, (DO_NOT_ACQUIRE *)0 ); - } - - /** - Converts to an OString, signalling failure. - - @param pTarget - An out parameter receiving the converted OString. Must not be null; the - contents are not modified if conversion fails (convertToOString returns - false). - - @param nEncoding - The text encoding to convert into. Must be an octet encoding (i.e., - rtl_isOctetTextEncoding(nEncoding) must return true). - - @param nFlags - A combination of RTL_UNICODETOTEXT_FLAGS that detail how to do the - conversion (see rtl_convertUnicodeToText). RTL_UNICODETOTEXT_FLAGS_FLUSH - need not be included, it is implicitly assumed. Typical uses are either - RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | - RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR (fail if a Unicode character cannot - be converted to the target nEncoding) or OUSTRING_TO_OSTRING_CVTFLAGS - (make a best efforts conversion). - - @return - True if the conversion succeeded, false otherwise. - */ - inline bool convertToString(OString * pTarget, rtl_TextEncoding nEncoding, - sal_uInt32 nFlags) const - { - return rtl_convertUStringToString(&pTarget->pData, pData->buffer, - pData->length, nEncoding, nFlags); - } - - /** Iterate through this string based on code points instead of UTF-16 code - units. - - See Chapter 3 of The Unicode Standard 5.0 (Addison--Wesley, 2006) for - definitions of the various terms used in this description. - - This string is interpreted as a sequence of zero or more UTF-16 code - units. For each index into this sequence (from zero to one less than - the length of the sequence, inclusive), a code point represented - starting at the given index is computed as follows: - - - If the UTF-16 code unit addressed by the index constitutes a - well-formed UTF-16 code unit sequence, the computed code point is the - scalar value encoded by that UTF-16 code unit sequence. - - - Otherwise, if the index is at least two UTF-16 code units away from - the end of the sequence, and the sequence of two UTF-16 code units - addressed by the index constitutes a well-formed UTF-16 code unit - sequence, the computed code point is the scalar value encoded by that - UTF-16 code unit sequence. - - - Otherwise, the computed code point is the UTF-16 code unit addressed - by the index. (This last case catches unmatched surrogates as well as - indices pointing into the middle of surrogate pairs.) - - @param indexUtf16 - pointer to a UTF-16 based index into this string; must not be null. On - entry, the index must be in the range from zero to the length of this - string (in UTF-16 code units), inclusive. Upon successful return, the - index will be updated to address the UTF-16 code unit that is the given - incrementCodePoints away from the initial index. - - @param incrementCodePoints - the number of code points to move the given *indexUtf16. If - non-negative, moving is done after determining the code point at the - index. If negative, moving is done before determining the code point - at the (then updated) index. The value must be such that the resulting - UTF-16 based index is in the range from zero to the length of this - string (in UTF-16 code units), inclusive. - - @return - the code point (an integer in the range from 0 to 0x10FFFF, inclusive) - that is represented within this string starting at the index computed as - follows: If incrementCodePoints is non-negative, the index is the - initial value of *indexUtf16; if incrementCodePoints is negative, the - index is the updated value of *indexUtf16. In either case, the computed - index must be in the range from zero to one less than the length of this - string (in UTF-16 code units), inclusive. - - @since UDK 3.2.7 - */ - inline sal_uInt32 iterateCodePoints( - sal_Int32 * indexUtf16, sal_Int32 incrementCodePoints = 1) const - { - return rtl_uString_iterateCodePoints( - pData, indexUtf16, incrementCodePoints); - } - - /** - Returns the string representation of the integer argument. - - This function can't be used for language specific conversion. - - @param i an integer value - @param radix the radix (between 2 and 36) - @return a string with the string representation of the argument. - @since LibreOffice 4.1 - */ - static OUString number( int i, sal_Int16 radix = 10 ) - { - sal_Unicode aBuf[RTL_USTR_MAX_VALUEOFINT32]; - rtl_uString* pNewData = 0; - rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfInt32( aBuf, i, radix ) ); - return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - /// @overload - /// @since LibreOffice 4.1 - static OUString number( unsigned int i, sal_Int16 radix = 10 ) - { - return number( static_cast< unsigned long long >( i ), radix ); - } - /// @overload - /// @since LibreOffice 4.1 - static OUString number( long i, sal_Int16 radix = 10) - { - return number( static_cast< long long >( i ), radix ); - } - /// @overload - /// @since LibreOffice 4.1 - static OUString number( unsigned long i, sal_Int16 radix = 10 ) - { - return number( static_cast< unsigned long long >( i ), radix ); - } - /// @overload - /// @since LibreOffice 4.1 - static OUString number( long long ll, sal_Int16 radix = 10 ) - { - sal_Unicode aBuf[RTL_STR_MAX_VALUEOFINT64]; - rtl_uString* pNewData = 0; - rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfInt64( aBuf, ll, radix ) ); - return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - /// @overload - /// @since LibreOffice 4.1 - static OUString number( unsigned long long ll, sal_Int16 radix = 10 ) - { - sal_Unicode aBuf[RTL_STR_MAX_VALUEOFUINT64]; - rtl_uString* pNewData = 0; - rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfUInt64( aBuf, ll, radix ) ); - return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns the string representation of the float argument. - - This function can't be used for language specific conversion. - - @param f a float. - @return a string with the string representation of the argument. - @since LibreOffice 4.1 - */ - static OUString number( float f ) - { - sal_Unicode aBuf[RTL_USTR_MAX_VALUEOFFLOAT]; - rtl_uString* pNewData = 0; - rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfFloat( aBuf, f ) ); - return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns the string representation of the double argument. - - This function can't be used for language specific conversion. - - @param d a double. - @return a string with the string representation of the argument. - @since LibreOffice 4.1 - */ - static OUString number( double d ) - { - sal_Unicode aBuf[RTL_USTR_MAX_VALUEOFDOUBLE]; - rtl_uString* pNewData = 0; - rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfDouble( aBuf, d ) ); - return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns the string representation of the sal_Bool argument. - - If the sal_Bool is true, the string "true" is returned. - If the sal_Bool is false, the string "false" is returned. - This function can't be used for language specific conversion. - - @param b a sal_Bool. - @return a string with the string representation of the argument. - @deprecated use boolean() - */ - SAL_DEPRECATED_INTERNAL("use boolean()") static OUString valueOf( sal_Bool b ) SAL_THROW(()) - { - return boolean(b); - } - - /** - Returns the string representation of the boolean argument. - - If the argument is true, the string "true" is returned. - If the argument is false, the string "false" is returned. - This function can't be used for language specific conversion. - - @param b a bool. - @return a string with the string representation of the argument. - @since LibreOffice 4.1 - */ - static OUString boolean( bool b ) SAL_THROW(()) - { - sal_Unicode aBuf[RTL_USTR_MAX_VALUEOFBOOLEAN]; - rtl_uString* pNewData = 0; - rtl_uString_newFromStr_WithLength( &pNewData, aBuf, rtl_ustr_valueOfBoolean( aBuf, b ) ); - return OUString( pNewData, (DO_NOT_ACQUIRE*)0 ); - } - - /** - Returns the string representation of the char argument. - - @param c a character. - @return a string with the string representation of the argument. - @deprecated use operator, function or constructor taking char or sal_Unicode argument - */ - SAL_DEPRECATED_INTERNAL("convert to OUString or use directly") static OUString valueOf( sal_Unicode c ) SAL_THROW(()) - { - return OUString( &c, 1 ); - } - - /** - Returns the string representation of the int argument. - - This function can't be used for language specific conversion. - - @param i a int32. - @param radix the radix (between 2 and 36) - @return a string with the string representation of the argument. - @deprecated use number() - */ - SAL_DEPRECATED_INTERNAL("use number()") static OUString valueOf( sal_Int32 i, sal_Int16 radix = 10 ) SAL_THROW(()) - { - return number( i, radix ); - } - - /** - Returns the string representation of the long argument. - - This function can't be used for language specific conversion. - - @param ll a int64. - @param radix the radix (between 2 and 36) - @return a string with the string representation of the argument. - @deprecated use number() - */ - SAL_DEPRECATED_INTERNAL("use number()") static OUString valueOf( sal_Int64 ll, sal_Int16 radix = 10 ) SAL_THROW(()) - { - return number( ll, radix ); - } - - /** - Returns the string representation of the float argument. - - This function can't be used for language specific conversion. - - @param f a float. - @return a string with the string representation of the argument. - @deprecated use number() - */ - SAL_DEPRECATED_INTERNAL("use number()") static OUString valueOf( float f ) SAL_THROW(()) - { - return number(f); - } - - /** - Returns the string representation of the double argument. - - This function can't be used for language specific conversion. - - @param d a double. - @return a string with the string representation of the argument. - @deprecated use number() - */ - SAL_DEPRECATED_INTERNAL("use number()") static OUString valueOf( double d ) SAL_THROW(()) - { - return number(d); - } - - /** - Returns a OUString copied without conversion from an ASCII - character string. - - Since this method is optimized for performance, the ASCII character - values are not converted in any way. The caller has to make sure that - all ASCII characters are in the allowed range between 0 and - 127. The ASCII string must be NULL-terminated. - - Note that for string literals it is simpler and more efficient - to directly use the OUString constructor. - - @param value the 8-Bit ASCII character string - @return a string with the string representation of the argument. - */ - static OUString createFromAscii( const sal_Char * value ) SAL_THROW(()) - { - rtl_uString* pNew = 0; - rtl_uString_newFromAscii( &pNew, value ); - return OUString( pNew, (DO_NOT_ACQUIRE*)0 ); - } -}; - -/* ======================================================================= */ - -#ifdef RTL_FAST_STRING -/** -A simple wrapper around string literal. It is usually not necessary to use, can -be mostly used to force OUString operator+ working with operands that otherwise would -not trigger it. - -This class is not part of public API and is meant to be used only in LibreOffice code. -@since LibreOffice 4.0 -*/ -struct SAL_WARN_UNUSED OUStringLiteral -{ - template< int N > - OUStringLiteral( const char (&str)[ N ] ) : size( N - 1 ), data( str ) { assert( strlen( str ) == N - 1 ); } - int size; - const char* data; -}; - -/** - @internal -*/ -template<> -struct ToStringHelper< OUString > - { - static int length( const OUString& s ) { return s.getLength(); } - static sal_Unicode* addData( sal_Unicode* buffer, const OUString& s ) { return addDataHelper( buffer, s.getStr(), s.getLength()); } - static const bool allowOStringConcat = false; - static const bool allowOUStringConcat = true; - }; - -/** - @internal -*/ -template<> -struct ToStringHelper< OUStringLiteral > - { - static int length( const OUStringLiteral& str ) { return str.size; } - static sal_Unicode* addData( sal_Unicode* buffer, const OUStringLiteral& str ) { return addDataLiteral( buffer, str.data, str.size ); } - static const bool allowOStringConcat = false; - static const bool allowOUStringConcat = true; - }; - -/** - @internal -*/ -template< typename charT, typename traits, typename T1, typename T2 > -inline std::basic_ostream<charT, traits> & operator <<( - std::basic_ostream<charT, traits> & stream, const OUStringConcat< T1, T2 >& concat) -{ - return stream << OUString( concat ); -} -#else -// non-RTL_FAST_CODE needs this to compile -typedef OUString OUStringLiteral; -#endif - -/** A helper to use OUStrings with hash maps. - - Instances of this class are unary function objects that can be used as - hash function arguments to boost::unordered_map and similar constructs. - */ -struct OUStringHash -{ - /** Compute a hash code for a string. - - @param rString - a string. - - @return - a hash code for the string. This hash code should not be stored - persistently, as its computation may change in later revisions. - */ - size_t operator()(const OUString& rString) const - { return (size_t)rString.hashCode(); } -}; - -/* ======================================================================= */ - -/** Convert an OString to an OUString, using a specific text encoding. - - The lengths of the two strings may differ (e.g., for double-byte - encodings, UTF-7, UTF-8). - - @param rStr - an OString to convert. - - @param encoding - the text encoding to use for conversion. - - @param convertFlags - flags which control the conversion. Either use - OSTRING_TO_OUSTRING_CVTFLAGS, or see - <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more - details. - */ -inline OUString OStringToOUString( const OString & rStr, - rtl_TextEncoding encoding, - sal_uInt32 convertFlags = OSTRING_TO_OUSTRING_CVTFLAGS ) -{ - return OUString( rStr.getStr(), rStr.getLength(), encoding, convertFlags ); -} - -/** Convert an OUString to an OString, using a specific text encoding. - - The lengths of the two strings may differ (e.g., for double-byte - encodings, UTF-7, UTF-8). - - @param rUnicode - an OUString to convert. - - @param encoding - the text encoding to use for conversion. - - @param convertFlags - flags which control the conversion. Either use - OUSTRING_TO_OSTRING_CVTFLAGS, or see - <http://udk.openoffice.org/cpp/man/spec/textconversion.html> for more - details. - */ -inline OString OUStringToOString( const OUString & rUnicode, - rtl_TextEncoding encoding, - sal_uInt32 convertFlags = OUSTRING_TO_OSTRING_CVTFLAGS ) -{ - return OString( rUnicode.getStr(), rUnicode.getLength(), encoding, convertFlags ); -} - -/* ======================================================================= */ - -/** - Support for rtl::OUString in std::ostream (and thus in - CPPUNIT_ASSERT or SAL_INFO macros, for example). - - The rtl::OUString is converted to UTF-8. - - @since LibreOffice 3.5. -*/ -template< typename charT, typename traits > -inline std::basic_ostream<charT, traits> & operator <<( - std::basic_ostream<charT, traits> & stream, OUString const & string) -{ - return stream << - OUStringToOString(string, RTL_TEXTENCODING_UTF8).getStr(); - // best effort; potentially loses data due to conversion failures - // (stray surrogate halves) and embedded null characters -} - -} // namespace - -#ifdef RTL_STRING_UNITTEST -namespace rtl -{ -typedef rtlunittest::OUString OUString; -} -#endif - -// RTL_USING is defined by gbuild for all modules except those with stable public API -// (as listed in ure/source/README). It allows to use classes like OUString without -// having to explicitly refer to the rtl namespace, which is kind of superfluous -// given that OUString itself is namespaced by its OU prefix. -#ifdef RTL_USING -using ::rtl::OUString; -using ::rtl::OUStringHash; -using ::rtl::OStringToOUString; -using ::rtl::OUStringToOString; -using ::rtl::OUStringLiteral; -#endif - -#endif /* _RTL_USTRING_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtl/uuid.h b/sal/inc/rtl/uuid.h deleted file mode 100644 index 31d50968110a..000000000000 --- a/sal/inc/rtl/uuid.h +++ /dev/null @@ -1,182 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#ifndef _RTL_UUID_H_ -#define _RTL_UUID_H_ - -#include "sal/config.h" - -#include "rtl/string.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -/** - @file - Specification (from draft-leach-uuids-guids-01.txt ) - - <p> - A UUID is an identifier that is unique across both space and time, - with respect to the space of all UUIDs. To be precise, the UUID - consists of a finite bit space. Thus, collision cannot be avoided in - principle. A UUID can be used for multiple purposes, from tagging objects - with an extremely short lifetime, to reliably identifying very persistent - objects across a network. - - <p> - The generation of UUIDs does not require that a registration - authority be contacted for each identifier. Instead, Version 4 UUIDs are - generated from (pseudo unique) sequences of (pseudo) random bits. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** Generates a new Version 4 (random number based) UUID (Universally Unique - IDentifier). - - @param pTargetUUID pointer to at least 16 bytes of memory. After the call it contains - the newly generated uuid in network byte order. - @param pPredecessorUUID ignored (was used when this function returned - Version 1 instead of Version 4 UUIDs). - @param bUseEthernetAddress ignored (was used when this function returned - Version 1 instead of Version 4 UUIDs). - */ -SAL_DLLPUBLIC void SAL_CALL rtl_createUuid( - sal_uInt8 *pTargetUUID, - const sal_uInt8 *pPredecessorUUID, - sal_Bool bUseEthernetAddress ); - -/** Compare two UUID's lexically - - <p> - Note: lexical ordering is not temporal ordering! - <p> - Note: For equalnesschecking, a memcmp(pUUID1,pUUID2,16) is more efficient - - @return - <ul> - <li>-1 u1 is lexically before u2 - <li>0 u1 is equal to u2 - <li>1 u1 is lexically after u2 - </ul> - - */ -SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_compareUuid( - const sal_uInt8 *pUUID1 , const sal_uInt8 *pUUID2 ); - -/** Creates named UUIDs. - - <p> - The version 3 UUID is meant for generating UUIDs from <em>names</em> that - are drawn from, and unique within, some <em>name space</em>. Some examples - of names (and, implicitly, name spaces) might be DNS names, URLs, ISO - Object IDs (OIDs), reserved words in a programming language, or X.500 - Distinguished Names (DNs); thus, the concept of name and name space - should be broadly construed, and not limited to textual names. - - <p> - The requirements for such UUIDs are as follows: - - <ul> - <li> The UUIDs generated at different times from the same name in the - same namespace MUST be equal - - <li> The UUIDs generated from two different names in the same namespace - should be different (with very high probability) - - <li> The UUIDs generated from the same name in two different namespaces - should be different with (very high probability) - - <li> If two UUIDs that were generated from names are equal, then they - were generated from the same name in the same namespace (with very - high probability). - </ul> - - @param pTargetUUID pointer to at least 16 bytes of memory. After the call - it contains the newly generated uuid in network byte order. - @param pNameSpaceUUID The namespace uuid. Below are some predefined ones, - but any arbitray uuid can be used as namespace. - - @param pName the name - */ -SAL_DLLPUBLIC void SAL_CALL rtl_createNamedUuid( - sal_uInt8 *pTargetUUID, - const sal_uInt8 *pNameSpaceUUID, - const rtl_String *pName - ); - - - -/* - Predefined Namespaces - (Use them the following way : sal_uInt8 aNsDNS[16]) = RTL_UUID_NAMESPACE_DNS; - */ -/** namesapce DNS - - <p> - (Use them the following way : sal_uInt8 aNsDNS[16]) = RTL_UUID_NAMESPACE_DNS; - <p> - 6ba7b810-9dad-11d1-80b4-00c04fd430c8 */ -#define RTL_UUID_NAMESPACE_DNS {\ - 0x6b,0xa7,0xb8,0x10,\ - 0x9d,0xad,\ - 0x11,0xd1,\ - 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8\ - } - -/** namespace URL - - <p> - 6ba7b811-9dad-11d1-80b4-00c04fd430c8 */ -#define RTL_UUID_NAMESPACE_URL { \ - 0x6b, 0xa7, 0xb8, 0x11,\ - 0x9d, 0xad,\ - 0x11, 0xd1,\ - 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8\ - } - -/** namespace oid - - <p> - 6ba7b812-9dad-11d1-80b4-00c04fd430c8 */ -#define RTL_UUID_NAMESPACE_OID {\ - 0x6b, 0xa7, 0xb8, 0x12,\ - 0x9d, 0xad,\ - 0x11, 0xd1,\ - 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8\ - } - -/** namespace X500 - - <p> - 6ba7b814-9dad-11d1-80b4-00c04fd430c8 */ -#define RTL_UUID_NAMESPACE_X500 {\ - 0x6b, 0xa7, 0xb8, 0x14,\ - 0x9d, 0xad,\ - 0x11, 0xd1,\ - 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8\ - } - -#ifdef __cplusplus -} -#endif - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/ByteBufferWrapper.hxx b/sal/inc/sal/ByteBufferWrapper.hxx deleted file mode 100644 index 63bb618278d6..000000000000 --- a/sal/inc/sal/ByteBufferWrapper.hxx +++ /dev/null @@ -1,40 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * Copyright 2012 LibreOffice contributors. - * - * 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/. - */ - -#ifndef _SAL_BYTEBUFFERWRAPPER_HXX -#define _SAL_BYTEBUFFERWRAPPER_HXX - -#ifdef ANDROID - -#include <jni.h> - -#include <sal/types.h> - -namespace org { namespace libreoffice { namespace touch { - -class ByteBufferWrapper -{ -private: - jobject object; - -public: - ByteBufferWrapper(JNIEnv *env, jobject o); - - sal_uInt8* pointer(); - - void operator()(sal_uInt8 *p); -}; - -}; }; }; - -#endif - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/alloca.h b/sal/inc/sal/alloca.h deleted file mode 100644 index c42f723f4af3..000000000000 --- a/sal/inc/sal/alloca.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_SAL_ALLOCA_H -#define INCLUDED_SAL_ALLOCA_H - -#if defined (SOLARIS) || defined (LINUX) || defined(__EMX__) || defined(AIX) || defined(ANDROID) - -#ifndef INCLUDED_ALLOCA_H -#include <alloca.h> -#define INCLUDED_ALLOCA_H -#endif - -#elif defined (FREEBSD) || defined(NETBSD) || defined(OPENBSD) || defined(DRAGONFLY) - -#ifndef INCLUDED_STDLIB_H -#include <stdlib.h> -#define INCLUDED_STDLIB_H -#endif - -#elif defined (MACOSX) - -#ifndef INCLUDED_SYS_TYPES_H -#include <sys/types.h> -#define INCLUDED_SYS_TYPES_H -#endif - -#elif defined (IOS) - -#ifndef INCLUDED_SYS_TYPES_H -#include <sys/types.h> -#define INCLUDED_SYS_TYPES_H -#endif - -#elif defined (WNT) - -#ifndef INCLUDED_MALLOC_H -#include <malloc.h> -#define INCLUDED_MALLOC_H -#endif - -#else - -#error "unknown platform: please check for alloca" - -#endif - -#endif /* INCLUDED_SAL_ALLOCA_H */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/config.h b/sal/inc/sal/config.h deleted file mode 100644 index ee230fe49d69..000000000000 --- a/sal/inc/sal/config.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _SAL_CONFIG_H_ -#define _SAL_CONFIG_H_ - -#if defined LIBO_INTERNAL_ONLY -#include "config_global.h" -#endif - -#include <stdlib.h> - -#ifdef WIN32 -#define SAL_W32 -#define SAL_DLLEXTENSION ".dll" -#define SAL_PRGEXTENSION ".exe" -#define SAL_PATHSEPARATOR ';' -#define SAL_PATHDELIMITER '\\' -#define SAL_CONFIGFILE( name ) name ".ini" - -#ifdef _MSC_VER - -#ifndef _USE_MATH_DEFINES -#define _USE_MATH_DEFINES // needed by Visual C++ for math constants -#endif - -#endif /* defined _MSC_VER */ - -/* Provide ISO C99 compatible versions of snprint and vsnprintf */ -#ifdef __MINGW32__ -#define _SNPRINTF_DLLIMPORT -#endif -#ifndef _SNPRINTF_H -#include <systools/win32/snprintf.h> -#endif - -#endif /* defined WIN32 */ - -#if defined(SOLARIS) || defined(LINUX) || defined(NETBSD) || defined(FREEBSD) || \ - defined(AIX) || defined(OPENBSD) || defined(DRAGONFLY) || defined(ANDROID) -#define SAL_UNX -#define SAL_DLLEXTENSION ".so" -#define SAL_DLLPREFIX "lib" -#define SAL_PRGEXTENSION ".bin" -#define SAL_PATHSEPARATOR ':' -#define SAL_PATHDELIMITER '/' -#define SAL_CONFIGFILE( name ) name "rc" -#endif - -#ifdef MACOSX -#define SAL_UNX -#define SAL_DLLEXTENSION ".dylib" -#define SAL_DLLPREFIX "lib" -#define SAL_PRGEXTENSION ".bin" -#define SAL_PATHSEPARATOR ':' -#define SAL_PATHDELIMITER '/' -#define SAL_CONFIGFILE( name ) name "rc" -#endif - -#ifdef IOS -#define SAL_UNX -/* SAL_DLLEXTENSION should not really be used on iOS, as iOS apps are - * not allowed to load own dynamic libraries. - */ -#define SAL_DLLEXTENSION ".dylib" -#define SAL_DLLPREFIX "lib" -/* This is fairly pointless too, an iOS app consists of a single - * executable (plus data files). - */ -#define SAL_PRGEXTENSION ".bin" -#define SAL_PATHSEPARATOR ':' -#define SAL_PATHDELIMITER '/' -#define SAL_CONFIGFILE( name ) name "rc" -#endif - -#ifdef sun -#undef sun -#define sun sun -#endif - -#endif /*_SAL_CONFIG_H_ */ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/detail/log.h b/sal/inc/sal/detail/log.h deleted file mode 100644 index 5cfc5e5fc0cc..000000000000 --- a/sal/inc/sal/detail/log.h +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- 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/. - */ - -#ifndef INCLUDED_SAL_DETAIL_LOG_H -#define INCLUDED_SAL_DETAIL_LOG_H - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -/** @cond INTERNAL */ - -/* This header makes available replacements working in both C and C++ for the - obsolete osl/diagnose.h functionality that in turn is used from both C and - C++ code and the obsolete tools/debug.hxx and - canvas/inc/canvas/verbosetrace.hxx functionality that uses printf-style - formatting. Once that obsolete functionality is removed, this header can be - removed, too. - - This header uses variadic macros in both C (where they are officially only - supported since C99) and C++ (where they are officially only supported since - C++11). It appears that all relevant compilers (esp. GCC 4.0 and MS VS 2008 - Express) already support them in their C and C++ dialects. See also - <http://wiki.apache.org/stdcxx/C++0xCompilerSupport>. - - Avoid the use of other sal code in this header as much as possible, so that - this code can be called from other sal code without causing endless - recursion. -*/ - -#if defined __cplusplus -extern "C" { -#endif - -/* - Clang warns about 'sal_True && sal_True' (those being integers and not booleans) - when it sees preprocessed source (-save-temps or using icecream) -*/ -#if defined __cplusplus -#define SAL_LOG_TRUE true -#define SAL_LOG_FALSE false -#else -#define SAL_LOG_TRUE sal_True -#define SAL_LOG_FALSE sal_False -#endif - -enum sal_detail_LogLevel { - SAL_DETAIL_LOG_LEVEL_INFO, SAL_DETAIL_LOG_LEVEL_WARN, - SAL_DETAIL_LOG_LEVEL_DEBUG = SAL_MAX_ENUM -}; - -SAL_DLLPUBLIC void SAL_CALL sal_detail_logFormat( - enum sal_detail_LogLevel level, char const * area, char const * where, - char const * format, ...) -/* TODO: enabling this will produce a huge amount of -Werror=format errors: */ -#if defined __GNUC__ && 0 - __attribute__((format(printf, 4, 5))) -#endif - ; - -#if defined __cplusplus -} -#endif - -#define SAL_DETAIL_LOG_FORMAT(condition, level, area, where, ...) \ - do { \ - if (condition) { \ - sal_detail_logFormat((level), (area), (where), __VA_ARGS__); \ - } \ - } while (SAL_LOG_FALSE) - -#if defined SAL_LOG_INFO -#define SAL_DETAIL_ENABLE_LOG_INFO SAL_LOG_TRUE -#else -#define SAL_DETAIL_ENABLE_LOG_INFO SAL_LOG_FALSE -#endif -#if defined SAL_LOG_WARN -#define SAL_DETAIL_ENABLE_LOG_WARN SAL_LOG_TRUE -#else -#define SAL_DETAIL_ENABLE_LOG_WARN SAL_LOG_FALSE -#endif - -#define SAL_DETAIL_WHERE __FILE__ ":" SAL_STRINGIFY(__LINE__) ": " - -#define SAL_DETAIL_INFO_IF_FORMAT(condition, area, ...) \ - SAL_DETAIL_LOG_FORMAT( \ - SAL_DETAIL_ENABLE_LOG_INFO && (condition), SAL_DETAIL_LOG_LEVEL_INFO, \ - area, SAL_DETAIL_WHERE, __VA_ARGS__) - -#define SAL_DETAIL_WARN_IF_FORMAT(condition, area, ...) \ - SAL_DETAIL_LOG_FORMAT( \ - SAL_DETAIL_ENABLE_LOG_WARN && (condition), SAL_DETAIL_LOG_LEVEL_WARN, \ - area, SAL_DETAIL_WHERE, __VA_ARGS__) - -/** @endcond */ - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/log-areas.dox b/sal/inc/sal/log-areas.dox deleted file mode 100644 index d21f14388d96..000000000000 --- a/sal/inc/sal/log-areas.dox +++ /dev/null @@ -1,355 +0,0 @@ -// NOTE: This file is also parsed by a compiler plugin. Make sure all -// areas are marked with '@li @c'. - -/** -@page sal_log_areas SAL debug areas - -@short List and description of areas for the SAL debug macros - -This is a list of areas that are used by the SAL_INFO family of macros. See -@ref sal_log "basic log functionality" for details about this functionality. - -If you need a debug area in some code, first check this list and use the -appropriate area if it exists. This list is not definite, if you need a new -area, use it and add it to an appropriate section with an explanation. -Generally, use the name of the relevant code module as the first area segment. -Please keep all entries sorted. - -This list should give you an overview of which areas to enable when debugging -certain functionality. - -@section SAL - -@li @c sal.debug - SAL debugging functionality -@li @c sal.osl - SAL OSL library -@li @c sal.rtl - SAL RTL library -@li @c sal.textenc - the textencoding SAL library - -@section basctl - -@li @c basctl.basicide - -@section basebmp - -@li @c basebmp.bitmapdevice - -@section basic - -@li @c basic -@li @c basic.sbx - -@section canvas - -@li @c canvas -@li @c canvas.cairo -@li @c canvas.null - -@section chart2 - -@li @c chart2 -@li @c chart2.areachart - -@section connectivity - -@li @c connectivity.cpool -@li @c connectivity.commontools -@li @c connectivity.mork -@li @c connectivity.parse -@li @c connectivity.postgresql - -@section cui - -@li @c cui.customize -@li @c cui.dialogs -@li @c cui.factory -@li @c cui.options -@li @c cui.tabpages - -@section Calc - -@li @c sc -@li @c sc.core -@li @c sc.ui - Calc UI - -@section desktop - -@li @c desktop -@li @c desktop.deployment -@li @c desktop.migration - -@section Draw - -@li @c sd -@li @c sd.fwk -@li @c sd.sls - slidesorter -@li @c sd.tools -@li @c sd.ui -@li @c sd.view -@li @c sd.slideshow -@li @c sdremote -@li @c sdremote.bluetooth - -@section editeng - -@li @c editeng -@li @c editeng.items - -@section embeddedobj - -@li @c embeddedobj - embedded objects -@li @c embeddedobj.ole - OLE embedded objects - -@section extensions - -@li @c extensions.dbpilots -@li @c extensions.plugin -@li @c extensions.scanner -@li @c extensions.update - -@section Filter - -@li @c filter.ms - escher import/export -@li @c filter.xslt - xslt import/export -@li @c oox.xmlstream - XmlStream class -@li @c oox.storage - ZipStorage class -@li @c oox.ppt - pptx filter - -@section formula - -@li @c formula.core - -@section fpicker - -@li @c fpicker.aqua -@li @c fpicker.office - -@section framework - -@li @c fwk - framework -@li @c fwk.desktop -@li @c fwk.session - -@section i18nlangtag - -@li @c i18nlangtag - language tags - -@section i18npool - -@li @c i18npool - general i18npool - -@section i18n - -@li @c i18n - module independent i18n related, e.g. language tag usage - -@section io - -@li @c io.streams - -@section jvmfwk - -@li @c jfw -@li @c jfw.level1 -@li @c jfw.level2 - -@section Math - -@li @c starmath.rtf -@li @c starmath.ooxml - OOXML import/export -@li @c starmath.wordbase - -@section sdext - -@li @c sdext.minimizer -@li @c sdext.pdfimport -@li @c sdext.pdfimport.pdfparse -@li @c sdext.presenter - -@section sfx2 - -@li @c sfx2 -@li @c sfx2.appl -@li @c sfx2.bastyp -@li @c sfx2.config -@li @c sfx2.control -@li @c sfx2.dialog -@li @c sfx2.doc -@li @c sfx2.notify -@li @c sfx2.view - -@section slideshow - -@li @c slideshow.opengl -@li @c slideshow.eventqueue - -@section svl - -@li @c svl -@li @c svl.numbers - -@section svtools - -@li @c svtools.config -@li @c svtools.contnr -@li @c svtools.control -@li @c svtools.dialogs -@li @c svtools.filter -@li @c svtools.misc -@li @c svtools.table -@li @c svtools.uno - -@section svx - -@li @c svx.dialog -@li @c svx.fmcomp -@li @c svx.form -@li @c svx.stbcrtls - StatusBarControl -@li @c svx.table -@li @c svx.tbxcrtls - ToolboxControl -@li @c svx.sdr -@li @c svx.uno - -@section toolkit - -@li @c toolkit.controls - -@section tools - -@li @c tools.debug -@li @c tools.datetime -@li @c tools.generic -@li @c tools.memtools -@li @c tools.rc - resource manager -@li @c tools.stream - SvStream class - -@section ucb - -@li @c cmisucp -@li @c ucb.ucp -@li @c ucb.ucp.gio -@li @c ucb.ucp.webdav - -@section unotools - -@li @c unotools.config -@li @c unotools.i18n -@li @c unotools.misc -@li @c unotools.ucbhelper - -@section URE - -@li @c rtl.string - ::rtl::OString, ::rtl::OUString, and related functionality -@li @c salhelper.thread - ::salhelper::Thread class - -@section sax - -@li @c sax.cppunit - -@section stoc - -@li @c stoc.corerefl - CoreReflection -@li @c stoc.tdmanager - TypeDescriptionManager - -@section svl - -@li @c svl.items - -@section VCL - -@li @c vcl -@li @c vcl.a11y -@li @c vcl.atsui - ATSUI (obsolete) -using code for Mac OS X -@li @c vcl.control -@li @c vcl.coretext - CoreText-using code for Mac OS X and iOS -@li @c vcl.fonts - font-specific code -@li @c vcl.gdi - the GDI part of VCL, devices, bitmaps, etc. -@li @c vcl.gtk - Gtk+ 2/3 plugin -@li @c vcl.headless - bitmap-based backend -@li @c vcl.kde - KDE -@li @c vcl.kde4 - KDE4 -@li @c vcl.layout - Widget layout -@li @c vcl.scrollbar - Scroll Bars -@li @c vcl.sm - Session Manager -@li @c vcl.window -@li @c vcl.unity -@li @c vcl.virdev - -@section Writer - -@li @c sw -@li @c sw.core - Writer core -@li @c sw.docx -@li @c sw.envelp -@li @c sw.level2 -@li @c sw.rtf - .rtf export filter -@li @c sw.uno - Writer UNO interfaces -@li @c sw.ww8 - .doc/.docx export filter, .doc import filter (not writerfilter) -@li @c sw.ww8.level2 - further info for sw.ww8 - -@section writerfilter - -@li @c writerfilter -@li @c writerfilter.profile - load times of filters - -@section xmloff - -@li @c xmloff.core -@li @c xmloff.forms -@li @c xmloff.chart -@li @c xmloff.style - -@section xmlsecurity - -@li @c xmlsecurity.dialogs - xml security dialogs -@li @c xmlsecurity.helper -@li @c xmlsecurity.xmlsec - xmlsec wrapper - -@section xmlscript - -@li @c xmlscript.xmlhelper -@li @c xmlscript.xmldlg -@li @c xmlscript.xmlflat -@li @c xmlscript.xmllib -@li @c xmlscript.xmlmod - -@section dbaccess - -@li @c dbaccess -@li @c dbaccess.ui - -@section svx - -@li @c svx -@li @c svx.fmcmop - -@section other - -@li @c accessibility -@li @c avmedia -@li @c basebmp -@li @c binaryurp -@li @c bridges -@li @c comphelper -@li @c configmgr -@li @c cppcanvas -@li @c cppuhelper -@li @c cppu -@li @c forms -@li @c helpcompiler -@li @c linguistic -@li @c oox -@li @c package -@li @c rsc -@li @c sax -@li @c shell -@li @c stoc -@li @c svg -@li @c ucbhelper -@li @c unoidl -@li @c uui -@li @c vbahelper -@li @c xmlhelp -@li @c xmloff -@li @c xmlreader - -*/ -/* vim:set ft=cpp shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/log.hxx b/sal/inc/sal/log.hxx deleted file mode 100644 index 6eae1b59d43c..000000000000 --- a/sal/inc/sal/log.hxx +++ /dev/null @@ -1,317 +0,0 @@ -/* -*- 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/. - */ - -#ifndef INCLUDED_SAL_LOG_HXX -#define INCLUDED_SAL_LOG_HXX - -#include "sal/config.h" - -#include <cstdlib> -#include <sstream> -#include <string> - -#include "sal/detail/log.h" -#include "sal/saldllapi.h" -#include "sal/types.h" - -// Avoid the use of other sal code in this header as much as possible, so that -// this code can be called from other sal code without causing endless -// recursion. - -/// @cond INTERNAL - -extern "C" SAL_DLLPUBLIC void SAL_CALL sal_detail_log( - enum sal_detail_LogLevel level, char const * area, char const * where, - char const * message); - -namespace sal { namespace detail { - -inline void SAL_CALL log( - sal_detail_LogLevel level, char const * area, char const * where, - std::ostringstream const & stream) -{ - // An alternative would be to have sal_detail_log take a std::ostringstream - // pointer (via a C void pointer); the advantage would be smaller client - // code (the ".str().c_str()" part would move into the implementation of - // sal_detail_log) and potential for proper support of embedded null - // characters within the message, but the disadvantage would be dependence - // on the C++ ABI; as a compromise, the ".str().c_str()" part has been moved - // to this inline function so that it is potentially only emitted once per - // dynamic library: - sal_detail_log(level, area, where, stream.str().c_str()); -} - -// Special handling of the common case where the message consists of just a -// string literal, to produce smaller call-site code: - -struct StreamStart {}; - -struct StreamString { - StreamString(char const * s): string(s) {} - - char const * string; - - typedef char Result; -}; - -struct StreamIgnore { - typedef struct { char a[2]; } Result; -}; - -inline StreamString operator <<( - SAL_UNUSED_PARAMETER StreamStart const &, char const * s) -{ - return StreamString(s); -} - -template< typename T > inline StreamIgnore operator <<( - SAL_UNUSED_PARAMETER StreamStart const &, SAL_UNUSED_PARAMETER T const &) -{ - std::abort(); -#if defined _MSC_VER && _MSC_VER < 1700 - return StreamIgnore(); -#endif -} - -template< typename T > inline StreamIgnore operator <<( - SAL_UNUSED_PARAMETER StreamString const &, SAL_UNUSED_PARAMETER T const &) -{ - std::abort(); -#if defined _MSC_VER && _MSC_VER < 1700 - return StreamIgnore(); -#endif -} - -template< typename T > inline StreamIgnore operator <<( - SAL_UNUSED_PARAMETER StreamIgnore const &, SAL_UNUSED_PARAMETER T const &) -{ - std::abort(); -#if defined _MSC_VER && _MSC_VER < 1700 - return StreamIgnore(); -#endif -} - -template< typename T > typename T::Result getResult(T const &); - -inline char const * unwrapStream(StreamString const & s) { return s.string; } - -inline char const * unwrapStream(SAL_UNUSED_PARAMETER StreamIgnore const &) { - std::abort(); -#if defined _MSC_VER && _MSC_VER < 1700 - return 0; -#endif -} - -} } - -#define SAL_DETAIL_LOG_STREAM(condition, level, area, where, stream) \ - do { \ - if (condition) { \ - if (sizeof ::sal::detail::getResult( \ - ::sal::detail::StreamStart() << stream) == 1) \ - { \ - ::sal_detail_log( \ - (level), (area), (where), \ - ::sal::detail::unwrapStream( \ - ::sal::detail::StreamStart() << stream)); \ - } else { \ - ::std::ostringstream sal_detail_stream; \ - sal_detail_stream << stream; \ - ::sal::detail::log( \ - (level), (area), (where), sal_detail_stream); \ - } \ - } \ - } while (false) - -/// @endcond - -/** A simple macro to create a "file and line number" string. - - Potentially not only useful within the log framework (where it is used - automatically), but also when creating exception messages. - - @attention For now, this functionality should only be used internally within - LibreOffice. It may change again in a future version. - - @since LibreOffice 3.5 -*/ -#define SAL_WHERE SAL_DETAIL_WHERE - -/** A facility for generating temporary string messages by piping items into a - C++ std::ostringstream. - - This can be useful for example in a call to SAL_INFO when depending on some - boolean condition data of incompatible types shall be streamed into the - message, as in: - - SAL_INFO("foo", "object: " << (hasName ? obj->name : SAL_STREAM(obj))); - - @attention For now, this functionality should only be used internally within - LibreOffice. It may change again in a future version. - - @since LibreOffice 3.5 -*/ -#define SAL_STREAM(stream) \ - (dynamic_cast< ::std::ostringstream & >(::std::ostringstream() << stream). \ - str()) - -/** - @page sal_log Basic logging functionality. - - @short Macros for logging. - - SAL_INFO(char const * area, expr), - SAL_INFO_IF(bool condition, char const * area, expr), - SAL_WARN(char const * area, expr), - SAL_WARN_IF(bool condition, char const * area, expr), and SAL_DEBUG(expr) - produce an info, warning, or debug log entry with a message produced by - piping items into a C++ std::ostringstream. The given expr must be so that - the full expression "stream << expr" is valid, where stream is a variable of - type std::ostringstream. - - SAL_INFO("foo", "string " << s << " of length " << n) - - would be an example of such a call. - - The composed message should be in UTF-8 and it should contain no vertical - formatting characters and no null characters - - For the _IF variants, log output is only generated if the given condition is - true (in addition to the other conditions that have to be met). - - The SAL_DEBUG macro is for temporary debug statements that are used while - working on code. It is never meant to remain in the code. It will always - simply output the given expression in debug builds. - - For all the other macros, the given area argument must be non-null and must - match the regular expression - - @verbatim - <area> ::= <segment>("."<segment>)* - @endverbatim - - with - - @verbatim - <segment> ::= [0-9a-z]+ - @endverbatim - - For a list of areas used see @ref sal_log_areas "SAL debug areas". Whenever - you use a new log area, add it to the file sal/inc/sal/log-areas.dox . - - Whether these macros generate any log output is controlled in a two-stage - process. - - First, at compile time the macros SAL_LOG_INFO and SAL_LOG_WARN, - respectively, control whether the INFO and WARN macros, respectively, - expand to actual code (in case the macro is defined, to any value) or to - no-ops (in case the macro is not defined). - - Second, at runtime the environment variable SAL_LOG further limits which - macro calls actually generate log output. The environment variable SAL_LOG - must either be unset or must match the regular expression - - @verbatim - <env> ::= <switch>* - @endverbatim - - with - - @verbatim - <switch> ::= <sense><level>("."<area>)? - <sense> ::= "+"|"-" - <level> ::= "INFO"|"WARN" - @endverbatim - - If the environment variable is unset, "+WARN" is used instead (which results - in all warnings being output but no infos). If the given value does not - match the regular expression, "+INFO+WARN" is used instead (which in turn - results in everything being output). - - A given macro call's level (INFO or WARN) and area is matched against the - given switches as follows: Only those switches for which the level matches - the given level and for which the area is a prefix (including both empty and - full prefixes) of the given area are considered. Log output is generated if - and only if among the longest such switches (if any), there is at least one - that has a sense of "+". (That is, if both +INFO.foo and -INFO.foo are - present, +INFO.foo wins.) - - For example, if SAL_LOG is "+INFO-INFO.foo+INFO.foo.bar", then calls like - SAL_INFO("foo.bar", ...), SAL_INFO("foo.bar.baz", ...), or - SAL_INFO("other", ...) generate output, while calls like - SAL_INFO("foo", ...) or SAL_INFO("foo.barzzz", ...) do not. - - The generated log output consists of the given level ("info" or "warn"), the - given area, the process ID, the thread ID, the source file, and the source - line number, each followed by a colon, followed by a space, the given - message, and a newline. The precise format of the log output is subject to - change. The log output is printed to stderr without further text encoding - conversion. - - @see @ref sal_log_areas - - @attention For now, this functionality should only be used internally within - LibreOffice. It may change again in a future version. - - @since LibreOffice 3.5 -*/ - -/** - Produce log entry from stream in the given log area. - - See @ref sal_log "basic logging functionality" for details. -*/ -#define SAL_INFO(area, stream) \ - SAL_DETAIL_LOG_STREAM( \ - SAL_DETAIL_ENABLE_LOG_INFO, ::SAL_DETAIL_LOG_LEVEL_INFO, area, \ - SAL_WHERE, stream) - -/** - Produce log entry from stream in the given log area if condition is true. - - See @ref sal_log "basic logging functionality" for details. -*/ -#define SAL_INFO_IF(condition, area, stream) \ - SAL_DETAIL_LOG_STREAM( \ - SAL_DETAIL_ENABLE_LOG_INFO && (condition), \ - ::SAL_DETAIL_LOG_LEVEL_INFO, area, SAL_WHERE, stream) - -/** - Produce warning entry from stream in the given log area. - - See @ref sal_log "basic logging functionality" for details. -*/ -#define SAL_WARN(area, stream) \ - SAL_DETAIL_LOG_STREAM( \ - SAL_DETAIL_ENABLE_LOG_WARN, ::SAL_DETAIL_LOG_LEVEL_WARN, area, \ - SAL_WHERE, stream) - -/** - Produce warning entry from stream in the given log area if condition is true. - - See @ref sal_log "basic logging functionality" for details. -*/ -#define SAL_WARN_IF(condition, area, stream) \ - SAL_DETAIL_LOG_STREAM( \ - SAL_DETAIL_ENABLE_LOG_WARN && (condition), \ - ::SAL_DETAIL_LOG_LEVEL_WARN, area, SAL_WHERE, stream) - -/** - Produce temporary debugging output from stream. This macro is meant to be - used only while working on code and should never exist in production code. - - See @ref sal_log "basic logging functionality" for details. -*/ -#define SAL_DEBUG(stream) \ - SAL_DETAIL_LOG_STREAM( \ - SAL_LOG_TRUE, ::SAL_DETAIL_LOG_LEVEL_DEBUG, 0, 0, stream) - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/macros.h b/sal/inc/sal/macros.h deleted file mode 100644 index 262f81996657..000000000000 --- a/sal/inc/sal/macros.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _SAL_MACROS_H_ -#define _SAL_MACROS_H_ - -#include <stddef.h> - -#ifndef SAL_N_ELEMENTS -# if defined(__cplusplus) && ( defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L ) - /* - * Magic template to calculate at compile time the number of elements - * in an array. Enforcing that the argument must be a array and not - * a pointer, e.g. - * char *pFoo="foo"; - * SAL_N_ELEMENTS(pFoo); - * fails while - * SAL_N_ELEMENTS("foo"); - * or - * char aFoo[]="foo"; - * SAL_N_ELEMENTS(aFoo); - * pass - * - * Unfortunately if arr is an array of an anonymous class then we need - * C++0x, i.e. see - * http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757 - */ - template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S]; -# define SAL_N_ELEMENTS(arr) (sizeof(sal_n_array_size(arr))) -# else -# define SAL_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0])) -# endif -#endif - -#ifndef SAL_BOUND -# define SAL_BOUND(x,l,h) ((x) <= (l) ? (l) : ((x) >= (h) ? (h) : (x))) -#endif - -#ifndef SAL_ABS -# define SAL_ABS(a) (((a) < 0) ? (-(a)) : (a)) -#endif - -#ifndef SAL_STRINGIFY -# define SAL_STRINGIFY_ARG(x) #x -# define SAL_STRINGIFY(x) SAL_STRINGIFY_ARG(x) -#endif - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/main.h b/sal/inc/sal/main.h deleted file mode 100644 index 634b57cac534..000000000000 --- a/sal/inc/sal/main.h +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _SAL_MAIN_H_ -#define _SAL_MAIN_H_ - -#include "sal/config.h" - -#include "sal/saldllapi.h" -#include "sal/types.h" - -#if defined AIX -#include <unistd.h> -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -SAL_DLLPUBLIC void SAL_CALL sal_detail_initialize(int argc, char ** argv); -SAL_DLLPUBLIC void SAL_CALL sal_detail_deinitialize(); - -#if defined IOS || defined ANDROID - -#error No code that includes this should be built for iOS or Android - -#else - -#define SAL_MAIN_WITH_ARGS_IMPL \ -int SAL_CALL main(int argc, char ** argv) \ -{ \ - int ret; \ - sal_detail_initialize(argc, argv); \ - ret = sal_main_with_args(argc, argv); \ - sal_detail_deinitialize(); \ - return ret; \ -} - -#define SAL_MAIN_IMPL \ -int SAL_CALL main(int argc, char ** argv) \ -{ \ - int ret; \ - sal_detail_initialize(argc, argv); \ - ret = sal_main(); \ - sal_detail_deinitialize(); \ - return ret; \ -} - -#endif - - -/* Definition macros for CRT entries */ - -#ifdef SAL_W32 - -#include <stdlib.h> - -/* Sorry but this is neccessary cause HINSTANCE is a typedef that differs (C++ causes an error) */ - -#ifndef WINAPI -# define WINAPI __stdcall -#endif - -#if !defined(DECLARE_HANDLE) -# ifdef STRICT - typedef void *HANDLE; -# define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name -# else - typedef void *PVOID; - typedef PVOID HANDLE; -# define DECLARE_HANDLE(name) typedef HANDLE name -# endif -DECLARE_HANDLE(HINSTANCE); -#endif - - - -#define SAL_WIN_WinMain \ -int WINAPI WinMain( HINSTANCE _hinst, HINSTANCE _dummy, char* _cmdline, int _nshow ) \ -{ \ - int argc = __argc; char ** argv = __argv; \ - (void) _hinst; (void) _dummy; (void) _cmdline; (void) _nshow; /* unused */ \ - return main(argc, argv); \ -} - -#else /* ! SAL_W32 */ - -# define SAL_WIN_WinMain - -#endif /* ! SAL_W32 */ - -/* Implementation macro */ - -#define SAL_IMPLEMENT_MAIN_WITH_ARGS(_argc_, _argv_) \ - static int SAL_CALL sal_main_with_args (int _argc_, char ** _argv_); \ - SAL_MAIN_WITH_ARGS_IMPL \ - SAL_WIN_WinMain \ - static int SAL_CALL sal_main_with_args(int _argc_, char ** _argv_) - -#define SAL_IMPLEMENT_MAIN() \ - static int SAL_CALL sal_main(void); \ - SAL_MAIN_IMPL \ - SAL_WIN_WinMain \ - static int SAL_CALL sal_main(void) - -/* - "How to use" Examples: - - #include <sal/main.h> - - SAL_IMPLEMENT_MAIN() - { - DoSomething(); - - return 0; - } - - SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) - { - DoSomethingWithArgs(argc, argv); - - return 0; - } - -*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* _SAL_MAIN_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/mathconf.h b/sal/inc/sal/mathconf.h deleted file mode 100644 index fefd213e3684..000000000000 --- a/sal/inc/sal/mathconf.h +++ /dev/null @@ -1,156 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_SAL_MATHCONF_H -#define INCLUDED_SAL_MATHCONF_H - -#include "osl/endian.h" - -#include <float.h> - -#if defined SOLARIS -#include <ieeefp.h> -#endif /* SOLARIS */ - -#if defined(__cplusplus) && ( defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L ) -#include <cmath> -#endif - -#if defined(IOS) -#if defined(__cplusplus) -#include <cmath> -#else -#include <math.h> -#endif -#endif - -#if defined __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/* Generally, the C standard guarantees that at program startup, "trapping or - stopping (if supported) is disabled on all [floating-point] exceptions" - (F.7.3/1 of the August 3, 1998 draft of C99), and that during program - execution, "a programmer can safely assume default modes (or be unaware of - them)" (7.6/2, footnote 161 of the August 3, 1998 draft of C99). Reportedly, - on Windows there are printer drivers that switch on exceptions. To avoid - problems, the SAL_MATH_FPEXCEPTIONS_OFF macro can be used to explicitly - switch off exceptions (on Windows). - */ -#if defined WNT -#define SAL_MATH_FPEXCEPTIONS_OFF() _control87( _MCW_EM, _MCW_EM ) -#else /* WNT */ -#define SAL_MATH_FPEXCEPTIONS_OFF() -#endif /* WNT */ - - -/* SAL_MATH_FINITE(d): test double d on INFINITY, NaN et al. */ -#if !defined SOLARIS && !defined ANDROID \ - && defined(__cplusplus) \ - && ( defined(__GXX_EXPERIMENTAL_CXX0X__) \ - || __cplusplus >= 201103L \ - || defined(IOS) ) -#define SAL_MATH_FINITE(d) std::isfinite(d) -#elif defined( IOS ) -#define SAL_MATH_FINITE(d) isfinite(d) -#elif defined( WNT) -#define SAL_MATH_FINITE(d) _finite(d) -#elif defined LINUX || defined UNX -#define SAL_MATH_FINITE(d) finite(d) -#else /* WNT, LINUX, UNX */ -#error "SAL_MATH_FINITE not defined" -#endif /* WNT, LINUX, UNX */ - - -/* This needs to be fixed for non--IEEE-754 platforms: */ -#if 1 /* IEEE 754 supported */ -#if defined OSL_BIGENDIAN - -/* IEEE 754 double structures for BigEndian */ -union sal_math_Double -{ - struct - { - unsigned sign : 1; - unsigned exponent :11; - unsigned fraction_hi :20; - unsigned fraction_lo :32; - } inf_parts; - struct - { - unsigned sign : 1; - unsigned exponent :11; - unsigned qnan_bit : 1; - unsigned bits :19; - unsigned fraction_lo :32; - } nan_parts; - struct - { - unsigned msw :32; - unsigned lsw :32; - } w32_parts; - double value; -}; - -#elif defined OSL_LITENDIAN - -/* IEEE 754 double structures for LittleEndian */ -union sal_math_Double -{ - struct { - unsigned fraction_lo :32; - unsigned fraction_hi :20; - unsigned exponent :11; - unsigned sign : 1; - } inf_parts; - struct { - unsigned fraction_lo :32; - unsigned bits :19; - unsigned qnan_bit : 1; - unsigned exponent :11; - unsigned sign : 1; - } nan_parts; - struct - { - unsigned lsw :32; - unsigned msw :32; - } w32_parts; - double value; -}; - -#else /* OSL_BIGENDIAN, OSL_LITENDIAN */ - -#error "neither OSL_BIGENDIAN nor OSL_LITENDIAN" - -#endif /* OSL_BIGENDIAN, OSL_LITENDIAN */ -#else /* IEEE 754 supported */ - -#error "don't know how to handle IEEE 754" - -#endif /* IEEE 754 supported */ - - -#if defined __cplusplus -} -#endif /* __cplusplus */ - -#endif /* INCLUDED_SAL_MATHCONF_H */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/saldllapi.h b/sal/inc/sal/saldllapi.h deleted file mode 100644 index f45e50e1cc5b..000000000000 --- a/sal/inc/sal/saldllapi.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_SALDLLAPI_H -#define INCLUDED_SALDLLAPI_H - -#include "sal/config.h" - -#include "sal/types.h" - -#if defined(SAL_DLLIMPLEMENTATION) -#define SAL_DLLPUBLIC SAL_DLLPUBLIC_EXPORT -#else -#define SAL_DLLPUBLIC SAL_DLLPUBLIC_IMPORT -#endif - -#endif /* INCLUDED_SALDLLAPI_H */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/sal/types.h b/sal/inc/sal/types.h deleted file mode 100644 index 55f2e729ac8b..000000000000 --- a/sal/inc/sal/types.h +++ /dev/null @@ -1,566 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _SAL_TYPES_H_ -#define _SAL_TYPES_H_ - -#include <sal/config.h> -#include <sal/macros.h> - -#include <sal/typesizes.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/********************************************************************************/ -/* Data types -*/ - -/* Boolean */ -typedef unsigned char sal_Bool; -# define sal_False ((sal_Bool)0) -# define sal_True ((sal_Bool)1) - -/* char is assumed to always be 1 byte long */ -typedef signed char sal_Int8; -typedef unsigned char sal_uInt8; - -#if SAL_TYPES_SIZEOFSHORT == 2 - typedef signed short sal_Int16; - typedef unsigned short sal_uInt16; -#else - #error "Could not find 16-bit type, add support for your architecture" -#endif - -#if SAL_TYPES_SIZEOFLONG == 4 - typedef signed long sal_Int32; - typedef unsigned long sal_uInt32; - #define SAL_PRIdINT32 "ld" - #define SAL_PRIuUINT32 "lu" - #define SAL_PRIxUINT32 "lx" - #define SAL_PRIXUINT32 "lX" -#elif SAL_TYPES_SIZEOFINT == 4 - typedef signed int sal_Int32; - typedef unsigned int sal_uInt32; - #define SAL_PRIdINT32 "d" - #define SAL_PRIuUINT32 "u" - #define SAL_PRIxUINT32 "x" - #define SAL_PRIXUINT32 "X" -#else - #error "Could not find 32-bit type, add support for your architecture" -#endif - -#ifdef _MSC_VER - typedef __int64 sal_Int64; - typedef unsigned __int64 sal_uInt64; - - /* The following are macros that will add the 64 bit constant suffix. */ - #define SAL_CONST_INT64(x) x##i64 - #define SAL_CONST_UINT64(x) x##ui64 - - #define SAL_PRIdINT64 "I64d" - #define SAL_PRIuUINT64 "I64u" - #define SAL_PRIxUINT64 "I64x" - #define SAL_PRIXUINT64 "I64X" -#elif defined(__SUNPRO_CC) || defined(__SUNPRO_C) || defined (__GNUC__) || defined (sgi) - #if SAL_TYPES_SIZEOFLONG == 8 - typedef signed long int sal_Int64; - typedef unsigned long int sal_uInt64; - - - /* The following are macros that will add the 64 bit constant suffix. */ - #define SAL_CONST_INT64(x) x##l - #define SAL_CONST_UINT64(x) x##ul - - #define SAL_PRIdINT64 "ld" - #define SAL_PRIuUINT64 "lu" - #define SAL_PRIxUINT64 "lx" - #define SAL_PRIXUINT64 "lX" - #elif SAL_TYPES_SIZEOFLONGLONG == 8 - typedef signed long long sal_Int64; - typedef unsigned long long sal_uInt64; - - /* The following are macros that will add the 64 bit constant suffix. */ - #define SAL_CONST_INT64(x) x##ll - #define SAL_CONST_UINT64(x) x##ull - - #ifdef __MINGW32__ - #define SAL_PRIdINT64 "I64d" - #define SAL_PRIuUINT64 "I64u" - #define SAL_PRIxUINT64 "I64x" - #define SAL_PRIXUINT64 "I64X" - #else - #define SAL_PRIdINT64 "lld" - #define SAL_PRIuUINT64 "llu" - #define SAL_PRIxUINT64 "llx" - #define SAL_PRIXUINT64 "llX" - #endif - #else - #error "Could not find 64-bit type, add support for your architecture" - #endif -#else - #error "Please define the 64-bit types for your architecture/compiler in sal/inc/sal/types.h" -#endif - -typedef char sal_Char; -typedef signed char sal_sChar; -typedef unsigned char sal_uChar; - -#if ( defined(SAL_W32) && !defined(__MINGW32__) ) - // http://msdn.microsoft.com/en-us/library/s3f49ktz%28v=vs.80%29.aspx - // "By default wchar_t is a typedef for unsigned short." - // But MinGW has a native wchar_t, and on many places, we cannot deal with - // that, so sal_Unicode has to be explicitly typedef'd as sal_uInt16 there. - typedef wchar_t sal_Unicode; -#else - #define SAL_UNICODE_NOTEQUAL_WCHAR_T - typedef sal_uInt16 sal_Unicode; -#endif - -typedef void * sal_Handle; - -/* sal_Size should currently be the native width of the platform */ -#if SAL_TYPES_SIZEOFPOINTER == 4 - typedef sal_uInt32 sal_Size; - typedef sal_Int32 sal_sSize; -#elif SAL_TYPES_SIZEOFPOINTER == 8 - typedef sal_uInt64 sal_Size; - typedef sal_Int64 sal_sSize; -#else - #error "Please make sure SAL_TYPES_SIZEOFPOINTER is defined for your architecture/compiler" -#endif - -/* sal_PtrDiff holds the result of a pointer subtraction */ -#if SAL_TYPES_SIZEOFPOINTER == 4 - typedef sal_Int32 sal_PtrDiff; -#elif SAL_TYPES_SIZEOFPOINTER == 8 - typedef sal_Int64 sal_PtrDiff; -#else - #error "Please make sure SAL_TYPES_SIZEOFPOINTER is defined for your architecture/compiler" -#endif - -/* printf-style conversion specification length modifiers for size_t and - ptrdiff_t (most platforms support C99, MSC has its own extension) */ -#if defined(_MSC_VER) || defined(__MINGW32__) - #define SAL_PRI_SIZET "I" - #define SAL_PRI_PTRDIFFT "I" -#else - #define SAL_PRI_SIZET "z" - #define SAL_PRI_PTRDIFFT "t" -#endif - -/* sal_IntPtr, sal_uIntPtr are integer types designed to hold pointers so that any valid - * pointer to void can be converted to this type and back to a pointer to void and the - * result will compare to the original pointer */ -#if SAL_TYPES_SIZEOFPOINTER == 4 - typedef sal_Int32 sal_IntPtr; - typedef sal_uInt32 sal_uIntPtr; - #define SAL_PRIdINTPTR SAL_PRIdINT32 - #define SAL_PRIuUINTPTR SAL_PRIuUINT32 - #define SAL_PRIxUINTPTR SAL_PRIxUINT32 - #define SAL_PRIXUINTPTR SAL_PRIXUINT32 -#elif SAL_TYPES_SIZEOFPOINTER == 8 - typedef sal_Int64 sal_IntPtr; - typedef sal_uInt64 sal_uIntPtr; - #define SAL_PRIdINTPTR SAL_PRIdINT64 - #define SAL_PRIuUINTPTR SAL_PRIuUINT64 - #define SAL_PRIxUINTPTR SAL_PRIxUINT64 - #define SAL_PRIXUINTPTR SAL_PRIXUINT64 -#else - #error "Please make sure SAL_TYPES_SIZEOFPOINTER is defined for your architecture/compiler" -#endif - -/********************************************************************************/ -/* Useful defines - */ - -/* The following SAL_MIN_INTn defines codify the assumption that the signed - * sal_Int types use two's complement representation. Defining them as - * "-0x7F... - 1" instead of as "-0x80..." prevents warnings about applying the - * unary minus operator to unsigned quantities. - */ -#define SAL_MIN_INT8 ((sal_Int8) (-0x7F - 1)) -#define SAL_MAX_INT8 ((sal_Int8) 0x7F) -#define SAL_MAX_UINT8 ((sal_uInt8) 0xFF) -#define SAL_MIN_INT16 ((sal_Int16) (-0x7FFF - 1)) -#define SAL_MAX_INT16 ((sal_Int16) 0x7FFF) -#define SAL_MAX_UINT16 ((sal_uInt16) 0xFFFF) -#define SAL_MIN_INT32 ((sal_Int32) (-0x7FFFFFFF - 1)) -#define SAL_MAX_INT32 ((sal_Int32) 0x7FFFFFFF) -#define SAL_MAX_UINT32 ((sal_uInt32) 0xFFFFFFFF) -#define SAL_MIN_INT64 ((sal_Int64) (SAL_CONST_INT64(-0x7FFFFFFFFFFFFFFF) - 1)) -#define SAL_MAX_INT64 ((sal_Int64) SAL_CONST_INT64(0x7FFFFFFFFFFFFFFF)) -#define SAL_MAX_UINT64 ((sal_uInt64) SAL_CONST_UINT64(0xFFFFFFFFFFFFFFFF)) - -#if SAL_TYPES_SIZEOFLONG == 4 -#define SAL_MAX_SSIZE SAL_MAX_INT32 -#define SAL_MAX_SIZE SAL_MAX_UINT32 -#elif SAL_TYPES_SIZEOFLONG == 8 -#define SAL_MAX_SSIZE SAL_MAX_INT64 -#define SAL_MAX_SIZE SAL_MAX_UINT64 -#endif - -#if defined(SAL_W32) || defined(SAL_UNX) -# define SAL_MAX_ENUM 0x7fffffff -#endif - -#if defined(_MSC_VER) || defined(__MINGW32__) -# define SAL_DLLPUBLIC_EXPORT __declspec(dllexport) -# define SAL_JNI_EXPORT __declspec(dllexport) -#if defined(_MSC_VER) -# define SAL_DLLPUBLIC_IMPORT __declspec(dllimport) -#else -# define SAL_DLLPUBLIC_IMPORT -#endif // defined(_MSC_VER) -# define SAL_DLLPRIVATE -# define SAL_DLLPUBLIC_TEMPLATE -# define SAL_CALL __cdecl -# define SAL_CALL_ELLIPSE __cdecl -#elif defined SAL_UNX -# if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x550) -# define SAL_DLLPUBLIC_EXPORT __global -# define SAL_JNI_EXPORT __global -# define SAL_DLLPUBLIC_IMPORT -# define SAL_DLLPRIVATE __hidden -# define SAL_DLLPUBLIC_TEMPLATE -# elif defined(__SUNPRO_C ) && (__SUNPRO_C >= 0x550) -# define SAL_DLLPUBLIC_EXPORT __global -# define SAL_JNI_EXPORT __global -# define SAL_DLLPUBLIC_IMPORT -# define SAL_DLLPRIVATE __hidden -# define SAL_DLLPUBLIC_TEMPLATE -# elif defined(__GNUC__) && defined(HAVE_GCC_VISIBILITY_FEATURE) -# if defined(DISABLE_DYNLOADING) -# define SAL_DLLPUBLIC_EXPORT __attribute__ ((visibility("hidden"))) -# define SAL_JNI_EXPORT __attribute__ ((visibility("default"))) -# define SAL_DLLPUBLIC_IMPORT __attribute__ ((visibility("hidden"))) -# define SAL_DLLPRIVATE __attribute__ ((visibility("hidden"))) -# define SAL_DLLPUBLIC_TEMPLATE __attribute__ ((visibility("hidden"))) -# else -# define SAL_DLLPUBLIC_EXPORT __attribute__ ((visibility("default"))) -# define SAL_JNI_EXPORT __attribute__ ((visibility("default"))) -# define SAL_DLLPUBLIC_IMPORT __attribute__ ((visibility("default"))) -# define SAL_DLLPRIVATE __attribute__ ((visibility("hidden"))) -# define SAL_DLLPUBLIC_TEMPLATE __attribute__ ((visibility("default"))) -# endif -# else -# define SAL_DLLPUBLIC_EXPORT -# define SAL_JNI_EXPORT -# define SAL_DLLPUBLIC_IMPORT -# define SAL_DLLPRIVATE -# define SAL_DLLPUBLIC_TEMPLATE -# endif -# define SAL_CALL -# define SAL_CALL_ELLIPSE -#else -# error("unknown platform") -#endif - -/** - Exporting the symbols necessary for exception handling on GCC. - - These macros are used for inline declarations of exception classes, as in - rtl/malformeduriexception.hxx. -*/ -#if defined(__GNUC__) && ! defined(__MINGW32__) -# if defined(DISABLE_DYNLOADING) -# define SAL_EXCEPTION_DLLPUBLIC_EXPORT __attribute__((visibility("default"))) -# else -# define SAL_EXCEPTION_DLLPUBLIC_EXPORT SAL_DLLPUBLIC_EXPORT -# endif -# define SAL_EXCEPTION_DLLPRIVATE SAL_DLLPRIVATE -#else -# define SAL_EXCEPTION_DLLPUBLIC_EXPORT -# define SAL_EXCEPTION_DLLPRIVATE -#endif - -/** Use this as markup for functions and methods whose return value must be - checked. - - Compilers that support a construct of this nature will emit a compile - time warning on unchecked return value. -*/ -#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) -# define SAL_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SAL_WARN_UNUSED_RESULT -#endif - -/** Use this for pure virtual classes, e.g. class SAL_NO_VTABLE Foo { ... - This hinders the compiler from setting a generic vtable stating that - a pure virtual function was called and thus slightly reduces code size. -*/ -#ifdef _MSC_VER -# define SAL_NO_VTABLE __declspec(novtable) -#else -# define SAL_NO_VTABLE -#endif - -#ifdef SAL_W32 -# pragma pack(push, 8) -#endif - -/** This is the binary specification of a SAL sequence. - <br> -*/ -typedef struct _sal_Sequence -{ - /** reference count of sequence<br> - */ - sal_Int32 nRefCount; - /** element count<br> - */ - sal_Int32 nElements; - /** elements array<br> - */ - char elements[1]; -} sal_Sequence; - -#define SAL_SEQUENCE_HEADER_SIZE ((sal_Size)&((sal_Sequence *)0)->elements) - -#if defined( SAL_W32) -#pragma pack(pop) -#endif - -/** Definition of function throw clause macros. These have been introduced - to reduce code size by balancing out compiler bugs. - - These macros are ONLY for function declarations, - use common C++ throw statement for throwing exceptions, e.g. - throw RuntimeException(); - - SAL_THROW() should be used for all C++ functions, e.g. SAL_THROW(()) - SAL_THROW_EXTERN_C() should be used for all C functions -*/ -#ifdef __cplusplus -#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__sgi) -#define SAL_THROW( exc ) -#else /* MSVC, all other */ -#define SAL_THROW( exc ) throw exc -#endif /* __GNUC__, __SUNPRO_CC */ -#define SAL_THROW_EXTERN_C() throw () -#else /* ! __cplusplus */ -/* SAL_THROW() must not be used in C headers, only SAL_THROW_EXTERN_C() is defined */ -#define SAL_THROW_EXTERN_C() -#endif - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#ifdef __cplusplus - -enum __sal_NoAcquire -{ - /** definition of a no acquire enum for ctors - */ - SAL_NO_ACQUIRE -}; - -namespace com { namespace sun { namespace star { } } } - -/** short-circuit extra-verbose API namespaces - - @since LibreOffice 4.0 -*/ -namespace css = ::com::sun::star; - -/** C++11 "= delete" feature. - - With HAVE_CXX11_DELETE, calling a deleted function will cause a compile-time - error, while otherwise it will only cause a link-time error as the declared - function is not defined. - - @since LibreOffice 4.1 -*/ -#if HAVE_CXX11_DELETE -#define SAL_DELETED_FUNCTION = delete -#else -#define SAL_DELETED_FUNCTION -#endif - -/** C++11 "override" feature. - - With HAVE_CXX11_OVERRIDE, force the method to override a existing method in - parent, error out if the method with the correct signature does not exist. - - @since LibreOffice 4.1 -*/ -#if HAVE_CXX11_OVERRIDE -#define SAL_OVERRIDE override -#else -#define SAL_OVERRIDE -#endif - -/** C++11 "final" feature. - - With HAVE_CXX11_FINAL, mark a class as non-derivable or a method as non-overridable. - - @since LibreOffice 4.1 -*/ -#if HAVE_CXX11_FINAL -#define SAL_FINAL final -#else -#define SAL_FINAL -#endif - -#endif /* __cplusplus */ - -#ifdef __cplusplus - -namespace sal { - -/** - A static_cast between integral types, to avoid C++ compiler warnings. - - In C++ source code, use sal::static_int_cast<T>(n) instead of - static_cast<T>(n) whenever a compiler warning about integral type problems - shall be silenced. That way, source code that needs to be modified when the - type of any of the expressions involved in the compiler warning is changed - can be found more easily. - - Both template arguments T1 and T2 must be integral types. -*/ -template< typename T1, typename T2 > inline T1 static_int_cast(T2 n) { - return static_cast< T1 >(n); -} - -} - -#else /* __cplusplus */ - -/** - A cast between integer types, to avoid C compiler warnings. - - In C source code, use SAL_INT_CAST(type, expr) instead of ((type) (expr)) - whenever a compiler warning about integer type problems shall be silenced. - That way, source code that needs to be modified when the type of any of the - expressions involved in the compiler warning is changed can be found more - easily. - - The argument 'type' must be an integer type and the argument 'expr' must be - an integer expression. Both arguments are evaluated exactly once. -*/ -#define SAL_INT_CAST(type, expr) ((type) (expr)) - -#endif /* __cplusplus */ - -/** - Use as follows: - SAL_DEPRECATED("Dont use, its evil.") void doit(int nPara); -*/ - -#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) -# define SAL_DEPRECATED(message) __attribute__((deprecated(message))) -#elif (__GNUC__) -# define SAL_DEPRECATED(message) __attribute__((deprecated)) -#elif defined(_MSC_VER) -# define SAL_DEPRECATED(message) __declspec(deprecated(message)) -#else -# define SAL_DEPRECATED(message) -#endif - -/** - This macro is used to tag interfaces that are deprecated for both - internal and external API users, but where we are still writing - out the internal usage. Ultimately these should be replaced by - SAL_DEPRECATED, and then removed. - - Use as follows: - SAL_DEPRECATED_INTERNAL("Dont use, its evil.") void doit(int nPara); - */ -#ifdef LIBO_INTERNAL_ONLY -# define SAL_DEPRECATED_INTERNAL(message) -#else -# define SAL_DEPRECATED_INTERNAL(message) SAL_DEPRECATED(message) -#endif - -/** - Use as follows: - SAL_WNODEPRECATED_DECLARATIONS_PUSH - \::std::auto_ptr<X> ... - SAL_WNODEPRECATED_DECLARATIONS_POP -*/ - -#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) -#define SAL_WNODEPRECATED_DECLARATIONS_PUSH \ - _Pragma(SAL_STRINGIFY_ARG(GCC diagnostic push)) \ - _Pragma(SAL_STRINGIFY_ARG(GCC diagnostic ignored "-Wdeprecated-declarations")) -#define SAL_WNODEPRECATED_DECLARATIONS_POP \ - _Pragma(SAL_STRINGIFY_ARG(GCC diagnostic pop)) -#else -# define SAL_WNODEPRECATED_DECLARATIONS_PUSH -# define SAL_WNODEPRECATED_DECLARATIONS_POP -#endif - -/** Annotate unused but required C++ function parameters. - - An unused parameter is required if the function needs to adhere to a given - type (e.g., if its address is assigned to a function pointer of a specific - type, or if it is called from template code). This annotation helps static - analysis tools suppress false warnings. In the case of virtual functions - (where unused required parameters are common, too), the annotation is not - required (as static analysis tools can themselves derive the information - whether a function is virtual). - - Use the annotation in function definitions like - - void f(SAL_UNUSED_PARAMETER int) {} - - C does not allow unnamed parameters, anyway, so a function definition like - the above needs to be written there as - - void f(int dummy) { (void) dummy; / * avoid warnings * / } - - without a SAL_UNUSED_PARAMETER annotation. - - @since LibreOffice 3.6 - */ -#if defined __cplusplus -#if defined __GNUC__ -#define SAL_UNUSED_PARAMETER __attribute__ ((unused)) -#else -#define SAL_UNUSED_PARAMETER -#endif -#endif - -/** - - Annotate classes where a compiler should warn if an instance is unused. - - The compiler cannot warn about unused instances if they have non-trivial - or external constructors or destructors. Classes marked with SAL_WARN_UNUSED - will be warned about. - - Currently implemented by a Clang compiler plugin. - - @since LibreOffice 4.0 - -*/ - -#if defined __clang__ -#define SAL_WARN_UNUSED __attribute__((annotate("lo_warn_unused"))) -#else -#define SAL_WARN_UNUSED -#endif - -#endif /*_SAL_TYPES_H_ */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/systools/win32/snprintf.h b/sal/inc/systools/win32/snprintf.h deleted file mode 100644 index e5e60eaa9ada..000000000000 --- a/sal/inc/systools/win32/snprintf.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef _SNPRINTF_H -#define _SNPRINTF_H - -#if !defined(_WIN32) -#error ERROR: Only Win32 target supported! -#endif - -/* Macros for Unicode/ANSI support like in TCHAR.H */ - -#ifdef _UNICODE -#define sntprintf snwprintf -#define vsntprintf vsnwprintf -#else -#define sntprintf snprintf -#define vsntprintf vsnprintf -#endif - -/* Define needed types if they are not yet defined */ - - -# ifndef _VA_LIST_DEFINED - typedef char * va_list; -# define _VA_LIST_DEFINED -# endif - - -# ifndef _WCHAR_T_DEFINED - typedef unsigned short wchar_t; -# define _WCHAR_T_DEFINED -# endif - - -#ifndef _SNPRINTF_DLLIMPORT -#define _SNPRINTF_DLLIMPORT __declspec( dllimport ) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Implementations of snprintf following the ISO/IEC 9899:1999 (ISO C99) - standard. - The difference compared to _snprintf is that the buffer always is zero - terminated (unless count is zero) and the return value is the number of - characters (not including terminating zero) that would have been written - even if the buffer wasn't large - enough to hold the string. */ - - -#if !defined(__MINGW32__) || defined (__NO_ISOCEXT) - -/* UNICODE version */ -_SNPRINTF_DLLIMPORT int __cdecl snwprintf( wchar_t *buffer, size_t count, const wchar_t *format, ... ); - -/* SBCS and MBCS version */ -_SNPRINTF_DLLIMPORT int __cdecl snprintf( char *buffer, size_t count, const char *format, ... ); - -#endif - -/* Conflict with STL_port inline implementation */ - -#ifdef __cplusplus -} -#endif - -#endif /* _SNPRINTF_H */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |