From 879eaa311c5dc88283485a1ac5a72649248f59d7 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Thu, 18 May 2023 01:46:34 +0000 Subject: [PATCH] modify singleton Signed-off-by: CaoChuan --- .../kits/js/src/common/napi/n_class.cpp | 22 +++++++------------ interfaces/kits/js/src/common/napi/n_class.h | 5 ++--- .../mod_fileio/class_constants/constants.cpp | 4 ++-- .../mod_fileio/class_dir/dir_n_exporter.cpp | 4 ++-- .../class_dirent/dirent_n_exporter.cpp | 4 ++-- .../mod_fileio/class_file/file_n_exporter.cpp | 4 ++-- .../randomaccessfile_n_exporter.cpp | 4 ++-- .../mod_fileio/class_stat/stat_n_exporter.cpp | 4 ++-- .../class_stat_v9/stat_n_exporter_v9.cpp | 4 ++-- .../class_stream/stream_n_exporter.cpp | 4 ++-- .../class_watcher/watcher_n_exporter.cpp | 4 ++-- .../src/mod_fs/class_file/file_n_exporter.cpp | 4 ++-- .../src/mod_fs/class_stat/stat_n_exporter.cpp | 4 ++-- .../mod_fs/class_stream/stream_n_exporter.cpp | 4 ++-- .../class_watcher/watcher_n_exporter.cpp | 4 ++-- utils/filemgmt_libn/src/n_class.cpp | 4 ++-- 16 files changed, 38 insertions(+), 45 deletions(-) diff --git a/interfaces/kits/js/src/common/napi/n_class.cpp b/interfaces/kits/js/src/common/napi/n_class.cpp index 482bd7807..34dfdbbc6 100644 --- a/interfaces/kits/js/src/common/napi/n_class.cpp +++ b/interfaces/kits/js/src/common/napi/n_class.cpp @@ -19,15 +19,10 @@ #include #include "../log.h" - +#include "singleton.h" namespace OHOS { namespace DistributedFS { using namespace std; -NClass &NClass::GetInstance() -{ - static thread_local NClass nClass; - return nClass; -} tuple NClass::DefineClass(napi_env env, string className, @@ -51,17 +46,17 @@ tuple NClass::DefineClass(napi_env env, bool NClass::SaveClass(napi_env env, string className, napi_value exClass) { - NClass &nClass = NClass::GetInstance(); - lock_guard(nClass.exClassMapLock); + + lock_guard(exClassMapLock); - if (nClass.exClassMap.find(className) != nClass.exClassMap.end()) { + if (exClassMap.find(className) != exClassMap.end()) { return true; } napi_ref constructor; napi_status res = napi_create_reference(env, exClass, 1, &constructor); if (res == napi_ok) { - nClass.exClassMap.insert({ className, constructor }); + exClassMap.insert({ className, constructor }); HILOGI("Class %{public}s has been saved", className.c_str()); } else { HILOGE("INNER BUG. Cannot ref class constructor %{public}s because of %{public}d", className.c_str(), res); @@ -72,10 +67,9 @@ bool NClass::SaveClass(napi_env env, string className, napi_value exClass) napi_value NClass::InstantiateClass(napi_env env, const string& className, const vector& args) { - NClass &nClass = NClass::GetInstance(); - lock_guard(nClass.exClassMapLock); - auto it = nClass.exClassMap.find(className); - if (it == nClass.exClassMap.end()) { + lock_guard(exClassMapLock); + auto it = exClassMap.find(className); + if (it == exClassMap.end()) { HILOGE("Class %{public}s hasn't been saved yet", className.c_str()); return nullptr; } diff --git a/interfaces/kits/js/src/common/napi/n_class.h b/interfaces/kits/js/src/common/napi/n_class.h index 13a194ade..b0f511bf7 100644 --- a/interfaces/kits/js/src/common/napi/n_class.h +++ b/interfaces/kits/js/src/common/napi/n_class.h @@ -24,12 +24,11 @@ namespace OHOS { namespace DistributedFS { -class NClass final { +class NClass : public Singleton{ public: NClass(const NClass &) = delete; NClass &operator = (const NClass &) = delete; - static NClass &GetInstance(); - + static std::tuple DefineClass(napi_env env, std::string className, napi_callback constructor, diff --git a/interfaces/kits/js/src/mod_fileio/class_constants/constants.cpp b/interfaces/kits/js/src/mod_fileio/class_constants/constants.cpp index f046d8e84..834e2dd8e 100644 --- a/interfaces/kits/js/src/mod_fileio/class_constants/constants.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_constants/constants.cpp @@ -164,12 +164,12 @@ bool Constants::Export() string className = GetClassName(); bool succ = false; napi_value classValue = nullptr; - tie(succ, classValue) = NClass::DefineClass(exports_.env_, className, Constants::Constructor, std::move(props)); + tie(succ, classValue) = NClass::GetInstance().DefineClass(exports_.env_, className, Constants::Constructor, std::move(props)); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to define class"); return false; } - succ = NClass::SaveClass(exports_.env_, className, classValue); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to save class"); return false; diff --git a/interfaces/kits/js/src/mod_fileio/class_dir/dir_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_dir/dir_n_exporter.cpp index ed53fb3ea..33c3eca71 100644 --- a/interfaces/kits/js/src/mod_fileio/class_dir/dir_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_dir/dir_n_exporter.cpp @@ -443,13 +443,13 @@ bool DirNExporter::Export() string className = GetClassName(); bool succ = false; napi_value classValue = nullptr; - tie(succ, classValue) = NClass::DefineClass(exports_.env_, className, DirNExporter::Constructor, std::move(props)); + tie(succ, classValue) = NClass::GetInstance().DefineClass(exports_.env_, className, DirNExporter::Constructor, std::move(props)); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to define class Dirent"); return false; } - succ = NClass::SaveClass(exports_.env_, className, classValue); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to save class Dirent"); return false; diff --git a/interfaces/kits/js/src/mod_fileio/class_dirent/dirent_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_dirent/dirent_n_exporter.cpp index 29b78ca89..9813a8c41 100644 --- a/interfaces/kits/js/src/mod_fileio/class_dirent/dirent_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_dirent/dirent_n_exporter.cpp @@ -137,7 +137,7 @@ bool DirentNExporter::Export() string className = GetClassName(); bool succ = false; napi_value classValue = nullptr; - tie(succ, classValue) = NClass::DefineClass(exports_.env_, + tie(succ, classValue) = NClass::GetInstance().DefineClass(exports_.env_, className, DirentNExporter::Constructor, std::move(props)); @@ -146,7 +146,7 @@ bool DirentNExporter::Export() return false; } - succ = NClass::SaveClass(exports_.env_, className, classValue); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to save class Dirent"); return false; diff --git a/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.cpp index 4eeb63358..d13a7867f 100644 --- a/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.cpp @@ -87,13 +87,13 @@ bool FileNExporter::Export() string className = GetClassName(); bool succ = false; napi_value classValue = nullptr; - tie(succ, classValue) = NClass::DefineClass(exports_.env_, className, + tie(succ, classValue) = NClass::GetInstance().DefineClass(exports_.env_, className, FileNExporter::Constructor, move(props)); if (!succ) { UniError(EIO, true).ThrowErr(exports_.env_); return false; } - succ = NClass::SaveClass(exports_.env_, className, classValue); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { UniError(EIO, true).ThrowErr(exports_.env_); return false; diff --git a/interfaces/kits/js/src/mod_fileio/class_randomaccessfile/randomaccessfile_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_randomaccessfile/randomaccessfile_n_exporter.cpp index 2078dea70..a6087ae8a 100644 --- a/interfaces/kits/js/src/mod_fileio/class_randomaccessfile/randomaccessfile_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_randomaccessfile/randomaccessfile_n_exporter.cpp @@ -405,13 +405,13 @@ bool RandomAccessFileNExporter::Export() string className = GetClassName(); bool succ = false; napi_value classValue = nullptr; - tie(succ, classValue) = NClass::DefineClass(exports_.env_, className, + tie(succ, classValue) = NClass::GetInstance().DefineClass(exports_.env_, className, RandomAccessFileNExporter::Constructor, move(props)); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to define class"); return false; } - succ = NClass::SaveClass(exports_.env_, className, classValue); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to save class"); return false; diff --git a/interfaces/kits/js/src/mod_fileio/class_stat/stat_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_stat/stat_n_exporter.cpp index 40c0ca18f..4b08c93cb 100644 --- a/interfaces/kits/js/src/mod_fileio/class_stat/stat_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_stat/stat_n_exporter.cpp @@ -340,12 +340,12 @@ bool StatNExporter::Export() string className = GetClassName(); bool succ = false; napi_value classValue = nullptr; - tie(succ, classValue) = NClass::DefineClass(exports_.env_, className, StatNExporter::Constructor, std::move(props)); + tie(succ, classValue) = NClass::GetInstance().DefineClass(exports_.env_, className, StatNExporter::Constructor, std::move(props)); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to define class"); return false; } - succ = NClass::SaveClass(exports_.env_, className, classValue); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to save class"); return false; diff --git a/interfaces/kits/js/src/mod_fileio/class_stat_v9/stat_n_exporter_v9.cpp b/interfaces/kits/js/src/mod_fileio/class_stat_v9/stat_n_exporter_v9.cpp index fb2768f69..6d2d4fd23 100644 --- a/interfaces/kits/js/src/mod_fileio/class_stat_v9/stat_n_exporter_v9.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_stat_v9/stat_n_exporter_v9.cpp @@ -275,13 +275,13 @@ bool StatNExporterV9::Export() string className = GetClassName(); bool succ = false; napi_value classValue = nullptr; - tie(succ, classValue) = NClass::DefineClass(exports_.env_, className, StatNExporterV9::Constructor, + tie(succ, classValue) = NClass::GetInstance().DefineClass(exports_.env_, className, StatNExporterV9::Constructor, std::move(props)); if (!succ) { UniError(EIO, true).ThrowErr(exports_.env_); return false; } - succ = NClass::SaveClass(exports_.env_, className, classValue); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { UniError(EIO, true).ThrowErr(exports_.env_); return false; diff --git a/interfaces/kits/js/src/mod_fileio/class_stream/stream_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_stream/stream_n_exporter.cpp index f9d6960b8..20dfb714d 100644 --- a/interfaces/kits/js/src/mod_fileio/class_stream/stream_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_stream/stream_n_exporter.cpp @@ -371,12 +371,12 @@ bool StreamNExporter::Export() string className = GetClassName(); bool succ = false; napi_value cls = nullptr; - tie(succ, cls) = NClass::DefineClass(exports_.env_, className, StreamNExporter::Constructor, move(props)); + tie(succ, cls) = NClass::GetInstance().DefineClass(exports_.env_, className, StreamNExporter::Constructor, move(props)); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to define class"); return false; } - succ = NClass::SaveClass(exports_.env_, className, cls); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, cls); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to save class"); return false; diff --git a/interfaces/kits/js/src/mod_fileio/class_watcher/watcher_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_watcher/watcher_n_exporter.cpp index 2947b10cb..1a262bf02 100644 --- a/interfaces/kits/js/src/mod_fileio/class_watcher/watcher_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_watcher/watcher_n_exporter.cpp @@ -113,7 +113,7 @@ bool WatcherNExporter::Export() }; string className = GetClassName(); - auto [resDefineClass, classValue] = NClass::DefineClass(exports_.env_, + auto [resDefineClass, classValue] = NClass::GetInstance().DefineClass(exports_.env_, className, WatcherNExporter::Constructor, std::move(props)); @@ -122,7 +122,7 @@ bool WatcherNExporter::Export() return false; } - bool succ = NClass::SaveClass(exports_.env_, className, classValue); + bool succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { UniError(EIO).ThrowErr(exports_.env_, "INNER BUG. Failed to save class"); return false; diff --git a/interfaces/kits/js/src/mod_fs/class_file/file_n_exporter.cpp b/interfaces/kits/js/src/mod_fs/class_file/file_n_exporter.cpp index 4ab935a24..39b89da80 100644 --- a/interfaces/kits/js/src/mod_fs/class_file/file_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fs/class_file/file_n_exporter.cpp @@ -216,14 +216,14 @@ bool FileNExporter::Export() string className = GetClassName(); bool succ = false; napi_value classValue = nullptr; - tie(succ, classValue) = NClass::DefineClass(exports_.env_, className, + tie(succ, classValue) = NClass::GetInstance().DefineClass(exports_.env_, className, FileNExporter::Constructor, move(props)); if (!succ) { HILOGE("Define class exceptions"); NError(EIO).ThrowErr(exports_.env_); return false; } - succ = NClass::SaveClass(exports_.env_, className, classValue); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { HILOGE("Save class exceptions"); NError(EIO).ThrowErr(exports_.env_); diff --git a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp index 0b2baa572..56341ca6f 100644 --- a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp @@ -267,14 +267,14 @@ bool StatNExporter::Export() string className = GetClassName(); bool succ = false; napi_value classValue = nullptr; - tie(succ, classValue) = NClass::DefineClass(exports_.env_, className, StatNExporter::Constructor, + tie(succ, classValue) = NClass::GetInstance().DefineClass(exports_.env_, className, StatNExporter::Constructor, std::move(props)); if (!succ) { HILOGE("Failed to define class"); NError(EIO).ThrowErr(exports_.env_); return false; } - succ = NClass::SaveClass(exports_.env_, className, classValue); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { HILOGE("Failed to save class"); NError(EIO).ThrowErr(exports_.env_); diff --git a/interfaces/kits/js/src/mod_fs/class_stream/stream_n_exporter.cpp b/interfaces/kits/js/src/mod_fs/class_stream/stream_n_exporter.cpp index 5bfd00d7a..a9c7d1601 100644 --- a/interfaces/kits/js/src/mod_fs/class_stream/stream_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fs/class_stream/stream_n_exporter.cpp @@ -354,13 +354,13 @@ bool StreamNExporter::Export() string className = GetClassName(); bool succ = false; napi_value cls = nullptr; - tie(succ, cls) = NClass::DefineClass(exports_.env_, className, StreamNExporter::Constructor, move(props)); + tie(succ, cls) = NClass::GetInstance().DefineClass(exports_.env_, className, StreamNExporter::Constructor, move(props)); if (!succ) { HILOGE("INNER BUG. Failed to define class"); NError(EIO).ThrowErr(exports_.env_); return false; } - succ = NClass::SaveClass(exports_.env_, className, cls); + succ = NClass::GetInstance().SaveClass(exports_.env_, className, cls); if (!succ) { HILOGE("INNER BUG. Failed to save class"); NError(EIO).ThrowErr(exports_.env_); diff --git a/interfaces/kits/js/src/mod_fs/class_watcher/watcher_n_exporter.cpp b/interfaces/kits/js/src/mod_fs/class_watcher/watcher_n_exporter.cpp index abc578626..787f711fe 100644 --- a/interfaces/kits/js/src/mod_fs/class_watcher/watcher_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fs/class_watcher/watcher_n_exporter.cpp @@ -192,13 +192,13 @@ bool WatcherNExporter::Export() string className = GetClassName(); auto [resDefineClass, classValue] = - NClass::DefineClass(exports_.env_, className, WatcherNExporter::Constructor, std::move(props)); + NClass::GetInstance().DefineClass(exports_.env_, className, WatcherNExporter::Constructor, std::move(props)); if (!resDefineClass) { NError(EIO).ThrowErr(exports_.env_); return false; } - bool succ = NClass::SaveClass(exports_.env_, className, classValue); + bool succ = NClass::GetInstance().SaveClass(exports_.env_, className, classValue); if (!succ) { NError(EIO).ThrowErr(exports_.env_); return false; diff --git a/utils/filemgmt_libn/src/n_class.cpp b/utils/filemgmt_libn/src/n_class.cpp index b8a76bd68..af0e75301 100644 --- a/utils/filemgmt_libn/src/n_class.cpp +++ b/utils/filemgmt_libn/src/n_class.cpp @@ -27,7 +27,7 @@ NClass &NClass::GetInstance() return nClass; } -tuple NClass::DefineClass(napi_env env, +tuple NClass::GetInstance().DefineClass(napi_env env, string className, napi_callback constructor, vector &&properties) @@ -42,7 +42,7 @@ tuple NClass::DefineClass(napi_env env, return {stat == napi_ok, classVal}; } -bool NClass::SaveClass(napi_env env, string className, napi_value exClass) +bool NClass::GetInstance().SaveClass(napi_env env, string className, napi_value exClass) { NClass &nClass = NClass::GetInstance(); lock_guard(nClass.exClassMapLock); -- Gitee