X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingRefCountObject.hxx;h=21014123e017bd3eddc1f1c734b962930938ffe3;hb=ffb8188e28b2b60ee207a8644286821bc4e8fcdc;hp=c466315b385c8be839985c9763fcb16a32de7b27;hpb=10f37bf6f33a762626d7f1093b2f5450c1688667;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingRefCountObject.hxx b/src/MEDCoupling/MEDCouplingRefCountObject.hxx index c466315b3..21014123e 100644 --- a/src/MEDCoupling/MEDCouplingRefCountObject.hxx +++ b/src/MEDCoupling/MEDCouplingRefCountObject.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D +// Copyright (C) 2007-2020 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,52 +16,118 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) -#ifndef __PARAMEDMEM_MEDCOUPLINGREFCOUNTOBJECT_HXX__ -#define __PARAMEDMEM_MEDCOUPLINGREFCOUNTOBJECT_HXX__ +#pragma once #include "MEDCoupling.hxx" -namespace ParaMEDMEM +#include +#include +#include +#include +#include +#include + +namespace MEDCoupling { - typedef enum - { - C_DEALLOC = 2, - CPP_DEALLOC = 3 - } DeallocType; + enum class DeallocType + { + C_DEALLOC = 2, + CPP_DEALLOC = 3, + C_DEALLOC_WITH_OFFSET = 4 + }; + //! The various spatial discretization of a field typedef enum - { - ON_CELLS = 0, - ON_NODES = 1, - ON_GAUSS_PT = 2, - ON_GAUSS_NE = 3, - ON_NODES_KR = 4 - } TypeOfField; + { + ON_CELLS = 0, + ON_NODES = 1, + ON_GAUSS_PT = 2, + ON_GAUSS_NE = 3, + ON_NODES_KR = 4 + } TypeOfField; + //! The various temporal discretization of a field typedef enum - { - NO_TIME = 4, - ONE_TIME = 5, - LINEAR_TIME = 6, - CONST_ON_TIME_INTERVAL = 7 - } TypeOfTimeDiscretization; + { + NO_TIME = 4, + ONE_TIME = 5, + LINEAR_TIME = 6, + CONST_ON_TIME_INTERVAL = 7 + } TypeOfTimeDiscretization; typedef bool (*FunctionToEvaluate)(const double *pos, double *res); - class MEDCOUPLING_EXPORT RefCountObject + MEDCOUPLING_EXPORT const char *MEDCouplingVersionStr(); + MEDCOUPLING_EXPORT int MEDCouplingVersion(); + MEDCOUPLING_EXPORT void MEDCouplingVersionMajMinRel(int& maj, int& minor, int& releas); + MEDCOUPLING_EXPORT int MEDCouplingSizeOfVoidStar(); + MEDCOUPLING_EXPORT std::size_t MEDCouplingSizeOfIDs(); + MEDCOUPLING_EXPORT bool MEDCouplingByteOrder(); + MEDCOUPLING_EXPORT const char *MEDCouplingByteOrderStr(); + MEDCOUPLING_EXPORT bool IsCXX11Compiled(); + + class MEDCOUPLING_EXPORT BigMemoryObject + { + public: + std::size_t getHeapMemorySize() const; + std::string getHeapMemorySizeStr() const; + std::vector getDirectChildren() const; + std::vector getAllTheProgeny() const; + bool isObjectInTheProgeny(const BigMemoryObject *obj) const; + static std::size_t GetHeapMemorySizeOfObjs(const std::vector& objs); + virtual std::string getClassName() const { return "BigMemoryObject"; } + virtual std::size_t getHeapMemorySizeWithoutChildren() const = 0; + virtual std::vector getDirectChildrenWithNull() const = 0; + std::string debugHeapMemorySize() const; + virtual ~BigMemoryObject(); + private: + static std::size_t GetHeapMemoryOfSet(std::set& s1, std::set& s2); + }; + + class MEDCOUPLING_EXPORT RefCountObjectOnly { protected: - RefCountObject(); - RefCountObject(const RefCountObject& other); + RefCountObjectOnly(); + RefCountObjectOnly(const RefCountObjectOnly& other); public: bool decrRef() const; void incrRef() const; + int getRCValue() const; + RefCountObjectOnly& operator=(const RefCountObjectOnly& other); protected: + virtual ~RefCountObjectOnly(); + private: + mutable std::atomic _cnt; + }; + + class MEDCOUPLING_EXPORT RefCountObject : public RefCountObjectOnly, public BigMemoryObject + { + protected: + RefCountObject(); + RefCountObject(const RefCountObject& other); virtual ~RefCountObject(); + }; + + class MEDCOUPLING_EXPORT GlobalDict + { + public: + static GlobalDict *GetInstance(); + bool hasKey(const std::string& key) const; + std::string value(const std::string& key) const; + std::vector keys() const; + void erase(const std::string& key); + void clear(); + void setKeyValue(const std::string& key, const std::string& val); + void setKeyValueForce(const std::string& key, const std::string& val); + std::string printSelf() const; + private: + GlobalDict() { } + private: + static GlobalDict *UNIQUE_INSTANCE; private: - mutable int _cnt; + std::map _my_map; }; } -#endif