Sqlite   发布时间:2022-05-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Nebula2探秘附件:nutildef与nkernelinfo的代码大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

nutildef.h中主要定义了运行Nebula2程序所需要的最小依赖以及简化声明和使用Nebula2对象的工具宏,代码如下:

/* ************************************************************************** */
/* Nebula2-TutorialUtils */
/* nKernelinfo-Nebula2实用工具宏及静态库 */
/* author:happykevins */
/* ************************************************************************** */
#pragma once

/// ----------------------------------------------------------------------------
/// +必要的链接库
#ifdefKS_STATIClink_NEBulA2

#pragma comment(lib,"wsock32.lib")
#pragma comment(lib,"dxguID.lib")
#pragma comment(lib,"dxerr9.lib")
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9d.lib")
#pragma comment(lib,"dinput8.lib")

#pragma comment(lib,"ogg_d.lib")
#pragma comment(lib,"theora_d.lib")
#pragma comment(lib,"@R_640_5607@d.lib")

#pragma comment(lib,"d_microtcl.lib")
#pragma comment(lib,"d_nkernel.lib")
#pragma comment(lib,"d_nnebula.lib")
#pragma comment(lib,"d_ntoollib.lib")
#pragma comment(lib,"d_ngui.lib")
#pragma comment(lib,"d_ndinput8.lib")
#pragma comment(lib,"d_ndirect3d9.lib")

#endif
/// -必要的链接库
/// ----------------------------------------------------------------------------

/// ----------------------------------------------------------------------------
/// +声明Nebula2对象工具宏
/// 声明使用指定的Module
#define nNebulaUseModule(MODulE)
extern voID * n_new_##MODulE( voID );
extern bool n_init_##MODulE(nClass * ,nKernelServer * );

/// 将指定Module添加到KernelServer
#define nNebulaAddModule(MODulE)
nKernelServer::Instance()
-> AddModule(#MODulE,
n_init_##MODulE,n_new_##MODulE);

/// 声明为Nebula2Module
#define nNebulaModule(CLASS,MODulE,BASEMODulEName)
extern bool n_init_##MODulE(nClass * clazz,nKernelServer * kernelServer);
extern voID * n_new_##MODulE();
bool n_init_##MODulE(nClass * clazz,nKernelServer * kernelServer){
clazz
-> SetPropername(#MODulE);
clazz
-> SeTinstanceSize( sizeof (CLASS));
kernelServer
-> AddClass(BASEMODulename,clazz);
return true ;
};
voID * n_new_##MODulE(){ return n_new(CLASS());};

/// 命令初始化函数名
#define nNebulaScripTinitCmds(MODulE)n_initcmds_##MODulE

/// 声明为Nebula2脚本Module
#define nNebulaScriptModule(CLASS,nKernelServer * kernelServer);
extern voID * n_new_##MODulE();
extern voID n_initcmds_##MODulE(nClass * );
bool n_init_##MODulE(nClass * clazz,clazz);
n_initcmds_##MODulE(clazz);
return true ;
};
voID * n_new_##MODulE(){ return n_new(CLASS());};

/// -声明Nebula2对象工具宏
/// ----------------------------------------------------------------------------

nkernelinfo类主要是对第3章代码的整理,目前支持察看Nebula2的Class列表和当前NOH中的对象两项功能。
nkernelinfo.h代码如下:

/* ************************************************************************** */
/* Nebula2-TutorialUtils */
/* nKernelinfo-Nebula2内核信息调试器 */
/* author:happykevins */
/* ************************************************************************** */
#pragma once
#include
" kernel/nkernelserver.h "
#include
" util/nstack.h "
#include
" util/nhashList.h "

// 使用标准输出流(否则输出到Nebula2的日志系统)
#ifdefKS_USE_STDOUT
#define ks_printprintf
#else
#define ks_printn_printf
#endif

class nKernelinfoHelper: public nRoot
{
public :
/// 构造nKernelinfoHelper
nKernelinfoHelper(nKernelServer * _ks = nKernelServer::Instance());
/// 设置KernelServer实例
voID SetKernelServer(nKernelServer * _ks);
/// 将指定NOH分支的当前信息输出到Nebula日至系统
voID LogNOH( const char * szRootPath);
/// 将当前的类列表输出到Nebula日至系统
voID LogCLS();

protected :
nKernelServer
* ks;
};

nkernelinfo.cpp代码如下:

// nkernelinfo.cpp
#pragma warning(push)
#pragma warning(disable:42674244)

#include
" nkernelinfo.h "
#include
" nutildefs.h "

/// 声明为Nebula2脚本支持类
nNebulaScriptModule(nKernelinfoHelper,nkernelinfoHelper, " nroot " );

/// ----------------------------------------------------------------------------
/// +CommonSection
///

/// 构造nKernelinfoHelper
nKernelinfoHelper::nKernelinfoHelper(nKernelServer * _ks)
:ks(_ks)
{
}

/// 设置KernelServer实例
voID nKernelinfoHelper::SetKernelServer(nKernelServer * _ks)
{
this -> ks = _ks;
}

/// 将指定NOH分支的当前信息输出到Nebula日至系统
voID nKernelinfoHelper::LogNOH( const char * szRootPath)
{
n_assert(ks);
n_assert(szRootPath);

nRoot
* pRoot = ks -> Lookup(szRootPath);

if ( ! pRoot)
{
ks_print(
" --NONE:%s---- " ,szRootPath);
return ;
}

// 内核加锁
ks -> Lock();

// 打印根节点NOH名
if (pRoot -> GetParent())
{
ks_print(
" %s " ,pRoot -> GetFullname().Get());
}
else
{
ks_print(
" %s " ,pRoot -> Getname());
}

// 打印所有子节点
if (pRoot -> Gethead())
{
// 层次栈
// 在开始时将根节点入栈
nStack < nRoot *> deepStack;
deepStack.Push(pRoot
-> Gethead());

// 遍历树
do
{
// 获得当前栈顶元素
nRoot * obj = deepStack.Pop();

// 打印该元素NOH名
if (obj -> GetParent())
{
ks_print(
" %s " ,obj -> GetFullname().Get());
}
else
{
ks_print(
" %s " ,obj -> Getname());
}

// 兄弟节点入栈
if (obj -> Islinked() && obj -> GetSucc())
{
deepStack.Push(obj
-> GetSucc());
}

// 第一个子节点入栈
if (obj -> Gethead())
{
deepStack.Push(obj
-> Gethead());
}

}
while ( ! deepStack.IsEmpty());
}

// 内核解锁
ks -> Unlock();
}

/// 将当前的类列表输出到Nebula日至系统
voID nKernelinfoHelper::LogCLS()
{
n_assert(ks);

// 内核加锁
ks -> Lock();

// 获得Class列表
const nHashList * classList = ks -> GetClassList();
nHashNode
* node = (nClass * )classList -> Gethead();

// 遍历输出Class列表
do
{
nClass
* cls = (nClass * )node;
ks_print(
" %s " ,cls -> Getname());
node
= node -> GetSucc();
}
while (nodE);

// 内核解锁
ks -> Unlock();
}

///
/// -CommonSection
/// ----------------------------------------------------------------------------

/// ----------------------------------------------------------------------------
/// +ScriptSection
///

/// LogCLS的脚本支持
static voID n_logcls( voID * slf,nCmd * cmd);
/// LogNOH的脚本支持
static voID n_lognoh( voID * slf,nCmd * cmd);

voID nNebulaScripTinitCmds(nkernelinfoHelper)(nClass * cl)
{
cl
-> BeginCmds();
cl
-> AddCmd( " v_logcls_v " , ' LCLS ' ,n_logcls);
cl
-> AddCmd( " v_lognoh_s " , ' LNOH ' ,n_lognoh);
cl
-> EndCmds();
}

static voID n_logcls( voID * slf,nCmd * cmd)
{
nKernelinfoHelper
* self = (nKernelinfoHelper * )slf;
self
-> LogCLS();
}

static voID n_lognoh( voID * slf,nCmd * cmd)
{
nKernelinfoHelper
* self = (nKernelinfoHelper * )slf;
const char * root = cmd -> In() -> GetS();
self
-> LogNOH(root);
}

///
/// -ScriptSection
/// ----------------------------------------------------------------------------
#pragma warning(pop)
-The End-

大佬总结

以上是大佬教程为你收集整理的Nebula2探秘附件:nutildef与nkernelinfo的代码全部内容,希望文章能够帮你解决Nebula2探秘附件:nutildef与nkernelinfo的代码所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: