/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
 
 * ubs-hcom is licensed under the Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *      http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
#include "hcom.h"
#include "hcom_obj_statistics.h"


namespace ock {
namespace hcom {
DEFINE_OBJ_GC(NetService);
DEFINE_OBJ_GC(UBSHcomService);
DEFINE_OBJ_GC(HcomServiceImp);
DEFINE_OBJ_GC(NetServiceDefaultImp);
DEFINE_OBJ_GC(NetChannel);
DEFINE_OBJ_GC(UBSHcomChannel);
DEFINE_OBJ_GC(HcomChannelImp);
DEFINE_OBJ_GC(NetPeriodicManager);
DEFINE_OBJ_GC(HcomPeriodicManager);
DEFINE_OBJ_GC(Publisher);
DEFINE_OBJ_GC(MultiCastPeriodicManager);
DEFINE_OBJ_GC(MultiCastServiceTimer);
DEFINE_OBJ_GC(NetMemPoolFixed);
DEFINE_OBJ_GC(NetServiceCtxStore);
DEFINE_OBJ_GC(HcomServiceCtxStore);
DEFINE_OBJ_GC(NetServiceTimer);
DEFINE_OBJ_GC(HcomServiceTimer);

DEFINE_OBJ_GC(UBSHcomNetDriver);
DEFINE_OBJ_GC(UBSHcomNetEndpoint);
DEFINE_OBJ_GC(UBSHcomNetMessage);
DEFINE_OBJ_GC(UBSHcomNetRequestContext);
DEFINE_OBJ_GC(UBSHcomNetResponseContext);

DEFINE_OBJ_GC(RDMAWorker);
DEFINE_OBJ_GC(RDMAEndpoint);
DEFINE_OBJ_GC(RDMACq);
DEFINE_OBJ_GC(RDMAContext);
DEFINE_OBJ_GC(RDMAQp);
DEFINE_OBJ_GC(RDMAAsyncEndPoint);
DEFINE_OBJ_GC(RDMASyncEndpoint);
DEFINE_OBJ_GC(RDMAMemoryRegion);
DEFINE_OBJ_GC(RDMAMemoryRegionFixedBuffer);
DEFINE_OBJ_GC(NetDriverRDMA);
DEFINE_OBJ_GC(NetDriverRDMAWithOob);
DEFINE_OBJ_GC(NetAsyncEndpoint);
DEFINE_OBJ_GC(NetSyncEndpoint);

#ifdef UB_BUILD_ENABLED
DEFINE_OBJ_GC(UBContext);
DEFINE_OBJ_GC(UBWorker);
DEFINE_OBJ_GC(NetDriverUB);
DEFINE_OBJ_GC(NetDriverUBWithOob);
DEFINE_OBJ_GC(NetUBAsyncEndpoint);
DEFINE_OBJ_GC(NetUBSyncEndpoint);
DEFINE_OBJ_GC(UBJfc);
DEFINE_OBJ_GC(UBJetty);
DEFINE_OBJ_GC(UBPublicJetty);
DEFINE_OBJ_GC(UBMemoryRegion);
DEFINE_OBJ_GC(UBMemoryRegionFixedBuffer);
#endif

DEFINE_OBJ_GC(NetDriverSockWithOOB);
DEFINE_OBJ_GC(NetAsyncEndpointSock);
DEFINE_OBJ_GC(NetSyncEndpointSock);
DEFINE_OBJ_GC(SockWorker);
DEFINE_OBJ_GC(SockBuff);
DEFINE_OBJ_GC(Sock);

DEFINE_OBJ_GC(NetDriverShmWithOOB);
DEFINE_OBJ_GC(NetAsyncEndpointShm);
DEFINE_OBJ_GC(NetSyncEndpointShm);
DEFINE_OBJ_GC(ShmChannel);
DEFINE_OBJ_GC(ShmChannelKeeper);
DEFINE_OBJ_GC(ShmDataChannel);
DEFINE_OBJ_GC(ShmHandle);
DEFINE_OBJ_GC(ShmMemoryRegion);
DEFINE_OBJ_GC(ShmQueue);
DEFINE_OBJ_GC(ShmWorker);
DEFINE_OBJ_GC(ShmSyncEndpoint);

void NetObjStatistic::Dump()
{
    std::ostringstream ossDump;
    ossDump << "Object global count:\n";
#ifdef ENABLE_OBJ_GLOBAL_STATISTICS
    OBJ_GC_DUMP(NetService);
    OBJ_GC_DUMP(NetServiceDefaultImp);
    OBJ_GC_DUMP(NetChannel);
    OBJ_GC_DUMP(NetPeriodicManager);
    OBJ_GC_DUMP(Publisher);
    OBJ_GC_DUMP(MultiCastPeriodicManager);
    OBJ_GC_DUMP(MultiCastServiceTimer);
    OBJ_GC_DUMP(NetMemPoolFixed);
    OBJ_GC_DUMP(NetServiceCtxStore);
    OBJ_GC_DUMP(NetServiceTimer);

    OBJ_GC_DUMP(UBSHcomNetDriver);
    OBJ_GC_DUMP(UBSHcomNetEndpoint);
    OBJ_GC_DUMP(UBSHcomNetMessage);
    OBJ_GC_DUMP(UBSHcomNetRequestContext);
    OBJ_GC_DUMP(UBSHcomNetResponseContext);

    OBJ_GC_DUMP(RDMAWorker);
    OBJ_GC_DUMP(RDMAEndpoint);
    OBJ_GC_DUMP(RDMACq);
    OBJ_GC_DUMP(RDMAContext);
    OBJ_GC_DUMP(RDMAQp);
    OBJ_GC_DUMP(RDMAAsyncEndPoint);
    OBJ_GC_DUMP(RDMASyncEndpoint);
    OBJ_GC_DUMP(RDMAMemoryRegion);
    OBJ_GC_DUMP(RDMAMemoryRegionFixedBuffer);
    OBJ_GC_DUMP(NetDriverRDMA);
    OBJ_GC_DUMP(NetDriverRDMAWithOob);
    OBJ_GC_DUMP(NetAsyncEndpoint);
    OBJ_GC_DUMP(NetSyncEndpoint);

#ifdef UB_BUILD_ENABLED
    OBJ_GC_DUMP(UBContext);
    OBJ_GC_DUMP(UBWorker);
    OBJ_GC_DUMP(NetDriverUB);
    OBJ_GC_DUMP(NetDriverUBWithOob);
    OBJ_GC_DUMP(NetUBAsyncEndpoint);
    OBJ_GC_DUMP(NetUBSyncEndpoint);
    OBJ_GC_DUMP(UBJfc);
    OBJ_GC_DUMP(UBJetty);
    OBJ_GC_DUMP(UBPublicJetty);
    OBJ_GC_DUMP(UBMemoryRegion);
    OBJ_GC_DUMP(UBMemoryRegionFixedBuffer);
#endif

    OBJ_GC_DUMP(NetDriverSockWithOOB);
    OBJ_GC_DUMP(NetAsyncEndpointSock);
    OBJ_GC_DUMP(NetSyncEndpointSock);
    OBJ_GC_DUMP(SockWorker);
    OBJ_GC_DUMP(SockBuff);
    OBJ_GC_DUMP(Sock);

    OBJ_GC_DUMP(NetDriverShmWithOOB);
    OBJ_GC_DUMP(NetAsyncEndpointShm);
    OBJ_GC_DUMP(NetSyncEndpointShm);
    OBJ_GC_DUMP(ShmChannel);
    OBJ_GC_DUMP(ShmChannelKeeper);
    OBJ_GC_DUMP(ShmDataChannel);
    OBJ_GC_DUMP(ShmHandle);
    OBJ_GC_DUMP(ShmMemoryRegion);
    OBJ_GC_DUMP(ShmQueue);
    OBJ_GC_DUMP(ShmWorker);
    OBJ_GC_DUMP(ShmSyncEndpoint);
#else
    ossDump << "\tDisabled";
#endif
    NN_LOG_INFO(ossDump.str());
}
} // namespace hcom
} // namespace ock