From fc2234b87f4ce29be0e556c6f3b085b749b7d71b Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Thu, 16 Apr 2020 18:15:45 +0300 Subject: Add implementation --- libxerces-c/xercesc/util/Janitor.hpp | 168 +++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 libxerces-c/xercesc/util/Janitor.hpp (limited to 'libxerces-c/xercesc/util/Janitor.hpp') diff --git a/libxerces-c/xercesc/util/Janitor.hpp b/libxerces-c/xercesc/util/Janitor.hpp new file mode 100644 index 0000000..da970bf --- /dev/null +++ b/libxerces-c/xercesc/util/Janitor.hpp @@ -0,0 +1,168 @@ +/* + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * $Id$ + */ + +#if !defined(XERCESC_INCLUDE_GUARD_JANITOR_HPP) +#define XERCESC_INCLUDE_GUARD_JANITOR_HPP + +#include +#include + +XERCES_CPP_NAMESPACE_BEGIN + +template class Janitor : public XMemory +{ +public : + // ----------------------------------------------------------------------- + // Constructors and Destructor + // ----------------------------------------------------------------------- + Janitor(T* const toDelete); + ~Janitor(); + + // ----------------------------------------------------------------------- + // Public, non-virtual methods + // ----------------------------------------------------------------------- + void orphan(); + + // small amount of auto_ptr compatibility + T& operator*() const; + T* operator->() const; + T* get() const; + T* release(); + void reset(T* p = 0); + bool isDataNull(); + +private : + // ----------------------------------------------------------------------- + // Unimplemented constructors and operators + // ----------------------------------------------------------------------- + Janitor(); + Janitor(const Janitor&); + Janitor& operator=(const Janitor&); + + // ----------------------------------------------------------------------- + // Private data members + // + // fData + // This is the pointer to the object or structure that must be + // destroyed when this object is destroyed. + // ----------------------------------------------------------------------- + T* fData; +}; + + + +template class ArrayJanitor : public XMemory +{ +public : + // ----------------------------------------------------------------------- + // Constructors and Destructor + // ----------------------------------------------------------------------- + ArrayJanitor(T* const toDelete); + ArrayJanitor(T* const toDelete, MemoryManager* const manager); + ~ArrayJanitor(); + + + // ----------------------------------------------------------------------- + // Public, non-virtual methods + // ----------------------------------------------------------------------- + void orphan(); + + // small amount of auto_ptr compatibility + T& operator[](XMLSize_t index) const; + T* get() const; + T* release(); + void reset(T* p = 0); + void reset(T* p, MemoryManager* const manager); + +private : + // ----------------------------------------------------------------------- + // Unimplemented constructors and operators + // ----------------------------------------------------------------------- + ArrayJanitor(); + ArrayJanitor(const ArrayJanitor& copy); + ArrayJanitor& operator=(const ArrayJanitor& copy); + + // ----------------------------------------------------------------------- + // Private data members + // + // fData + // This is the pointer to the object or structure that must be + // destroyed when this object is destroyed. + // ----------------------------------------------------------------------- + T* fData; + MemoryManager* fMemoryManager; +}; + + + +template class JanitorMemFunCall +{ +public : + + typedef void (T::*MFPT) (); + + // ----------------------------------------------------------------------- + // Constructors and Destructor + // ----------------------------------------------------------------------- + JanitorMemFunCall( + T* object, + MFPT toCall); + + ~JanitorMemFunCall(); + + // small amount of auto_ptr compatibility + T& operator*() const; + T* operator->() const; + T* get() const; + T* release(); + void reset(T* p = 0); + +private : + // ----------------------------------------------------------------------- + // Unimplemented constructors and operators + // ----------------------------------------------------------------------- + JanitorMemFunCall(); + JanitorMemFunCall(const JanitorMemFunCall&); + JanitorMemFunCall& operator=(const JanitorMemFunCall&); + + // ----------------------------------------------------------------------- + // Private data members + // + // fObject + // This is the pointer to the object for which we will call the + // member function when this object is destroyed. + // ----------------------------------------------------------------------- + T* fObject; + MFPT fToCall; +}; + +#if defined(__GNUC__) || (! defined(_AIX) && ! defined(__hpux) && ! defined(__sun)) +extern template class XERCES_PLATFORM_DECEXPORT ArrayJanitor; +extern template class XERCES_PLATFORM_DECEXPORT ArrayJanitor; +#endif + +XERCES_CPP_NAMESPACE_END + +#if !defined(XERCES_TMPLSINC) +#include +#endif + +#endif -- cgit v1.1