diff --git a/interfaces/kits/js/src/common/napi/n_class.cpp b/interfaces/kits/js/src/common/napi/n_class.cpp index 482bd7807b9f5be54b74bf9c38cd57c6253a46a8..34dfdbbc6fd15d6c77401685ebd0c22129e29aca 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 13a194ade3728777444816f0c451c1a1a26f7e8f..b0f511bf745025bf6290dd158291c9fb9938b12c 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 f046d8e849d58b86c07cab27d068a227cbb98b86..834e2dd8e1851ee9c2d1f518e372a01231b97487 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 ed53fb3ea98a95b03ae4d104a43161078487f83e..33c3eca71ad4325d3a38cebe8e39a46b8414fbf9 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 29b78ca89dfc802e8130b98dd113c92424b9103d..9813a8c41902a4103e2f00579d15ba87181f36be 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 4eeb63358e881794c575b497ff2618a236cf0553..d13a7867f2ffc7b3a91a1131fb491c8596ae672a 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 2078dea70e0bd79cfe3235b10d11c37fec8a4c7d..a6087ae8a909cd76200fcbceec872634de238f06 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 40c0ca18fe2db64a90095e06c124124224938b3b..4b08c93cbbc3f6fc2bb7bfa6743eee0b13af53ea 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 fb2768f698b00b72d525ed2108c7fa2e1b354d1e..6d2d4fd2307bb9f8f412216bdc5cff4e3c915c61 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 f9d6960b858f73d554ce6bfcd907950f535b1172..20dfb714d559356287429994df01aceefc429fed 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 2947b10cb50e5d108cb3d81e27eb5ee9e53f8274..1a262bf02f6b77a5d37e763b0be9b6990e76bc6e 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 4ab935a2418ce1acc5a6889aaa42380bb5d5f758..39b89da800bd42f5a061ca267b8b6a2399196b6a 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 0b2baa572bc9466f4a4c6c997dd1f080bf576537..56341ca6f09a85e6d9bc9337257c1a2e6dd8b3a5 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 5bfd00d7a1f34fe5639b9ac55be2b7119bd787a9..a9c7d16017c3490e128d0a4de0a15dad6bfbed52 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 abc57862652955bd52a9766f2c9cf4a797dbaa8e..787f711fe76273bb81980dc6205fe11836bd8a5e 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 b8a76bd68d3675bdf72c321ebd02140394365085..af0e75301be7e0a8fe1a24484493854f10be7c4b 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);