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,"sqlite_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的代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)