Storage.cpp status/Storage.h status/PredefinedCodes.h status/Registry.h status/StatusCode.h cassert cstddef cstring sc::anonymous_namespace{Storage.cpp}::StatusCodeStorage sc sc::anonymous_namespace{Storage.cpp} //CopyrightEpicGames,Inc.AllRightsReserved. #include"status/Storage.h" #include"status/PredefinedCodes.h" #include"status/Registry.h" #include"status/StatusCode.h" #include<cassert> #include<cstddef> #include<cstring> namespacesc{ namespace{ structStatusCodeStorage{ intcode; charmessage[512]; }; voidstrcopy(char*destination,constchar*source,std::size_tbufferSize){ #ifdef_MSC_VER strncpy_s(destination,bufferSize,source,bufferSize-1ul); #else std::strncpy(destination,source,bufferSize-1ul); #endif } }//namespace thread_localstaticStatusCodeStoragecurrentStatus{0,"Ok"}; voidStatusStorage::set(StatusCodestatus){ //TheReleasebuildwilleliminatethiscall,asit'sreallyjustasanitycheck //toavoidusingunregisteredstatuscodes assert(StatusCodeRegistry::contains(status)); currentStatus.code=status.code; strcopy(currentStatus.message,status.message,bufferSize()); } voidStatusStorage::reset(){ currentStatus.code=OK.code; strcopy(currentStatus.message,OK.message,bufferSize()); } StatusCodeStatusStorage::get(){ return{currentStatus.code,currentStatus.message}; } boolStatusStorage::isOk(){ return(currentStatus.code==OK.code); } constexprstd::size_tStatusStorage::bufferSize(){ returnsizeof(currentStatus.message); } }//namespacesc