c++代码美化
int main()
if else
return 0;
int main()
if else
return 0;
int main()
if else
return 0;
int main()
if else
return 0;
int main()
if else
return 0;
int main()
if else
return 0;
int main()
if else
return 0;
int main()
if else
return 0;
<script src="http://code.jquery.com/jquery.min.js"></script>
<style>
textarea
{
margin-left:10px;
width:400px;
height:600px;
}
</style>
<div>输入待格式化的代码</div>
<textarea id="code" style="float:left;">
</textarea>
<textarea id="runjs" style="float:left;">
var str=$("#code").val();
str=str.replace(/&/g,"&");
str=str.replace(/</g,"&lt");
str=str.replace(/>/g,"&gt");
str=str.replace(/".*?"/g,'<span style="color:#D17519;font-weight:bold;">$&</span>');
str=str.replace(/(=|=\s)(\d+)/g,'$1<span style="color:red;">$2</span>');
str=str.replace(/(\()(\d+)(\))/g,'$1<span style="color:red;">$2</span>$3');
str=str.replace(/(\[)(\d+)(\])/g,'$1<span style="color:red;">$2</span>$3');
str=str.replace(/#include.*?\n/g,'<span style="color:#cc3333">$&</span>');
str=str.replace(/\/\/.*?\n/g,'<span style="color:green">$&</span>');
str=str.replace(/#define/g,'<span style="color:#cc3333">$&</span>');
str=str.replace(/using|namespace|class|friend|public|return|while|\bif\b|else|switch|goto|case|default/g,'<span style="font-weight:bold;color:#0000ff">$&</span>');
str=str.replace(/void|bool|int|float|double|string|long|char/g,'<span style="font-weight:bold;color:#9966cc">$&</span>');
$("pre").html(str);
$("div").show();
</textarea>
<div style="padding:10px;border:1px dashed red;float:left;display:none;background-color:#f5f5f5;"><pre></pre></div>
<button onclick="eval($('#runjs').val())">RunJS</button>
///////////////////////////////////////////////////////// AFXTLS.CPP文件#include "_AFXTLS_.H"//---------------------------------------void CSimpleList::AddHead(void* p){ *GetNextPtr(p) = m_pHead; m_pHead = p;}BOOL CSimpleList::Remove(void* p){ if(p == NULL) // 检查参数 return FALSE; BOOL bResult = FALSE; // 假设移除失败 if(p == m_pHead) { // 要移除头元素 m_pHead = *GetNextPtr(p); bResult = TRUE; } else { // 试图在表中查找要移除的元素 void* pTest = m_pHead; while(pTest != NULL && *GetNextPtr(pTest) != p) pTest = *GetNextPtr(pTest); // 如果找到,就将元素移除 if(pTest != NULL) { *GetNextPtr(pTest) = *GetNextPtr(p); bResult = TRUE; } } return bResult;}//-------------------CThreadSlotData类----------------------//BYTE __afxThreadData[sizeof(CThreadSlotData)]; // 为下面的_afxThreadData变量提供内存CThreadSlotData* _afxThreadData; // 定义全局变量_afxThreadData来为全局变量分配空间struct CSlotData{ DWORD dwFlags; // 槽的使用标志(被分配/未被分配) HINSTANCE hInst;// 占用此槽的模块句柄};struct CThreadData : public CNoTrackObject{ CThreadData* pNext; // CSimpleList类要使用此成员 int nCount; // 数组元素的个数 LPVOID* pData; // 数组的首地址};#define SLOT_USED 0x01 // CSlotData结构中dwFlags成员的值为0x01时表示该槽已被使用CThreadSlotData::CThreadSlotData(){ m_list.Construct(offsetof(CThreadData, pNext)); // 初始化CTypedSimpleList对象 m_nMax = 0; m_nAlloc = 0; m_nRover = 1; // 我们假定Slot1还未被分配(第一个槽(Slot0)总是保留下来不被使用) m_pSlotData = NULL; m_tlsIndex = ::TlsAlloc(); // 使用系统的TLS申请一个索引 ::InitializeCriticalSection(&m_cs); // 初始化关键段变量}int CThreadSlotData::AllocSlot(){ ::EnterCriticalSection(&m_cs); // 进入临界区(也叫关键段) int nAlloc = m_nAlloc; int nSlot = m_nRover; if(nSlot >= nAlloc || m_pSlotData[nSlot].dwFlags & SLOT_USED) { // 搜索m_pSlotData,查找空槽(SLOT) for(nSlot = 1; nSlot < nAlloc && m_pSlotData[nSlot].dwFlags & SLOT_USED; nSlot ++) ; // 如果不存在空槽,申请更多的空间 if(nSlot >= nAlloc) { // 增加全局数组的大小,分配或再分配内存以创建新槽 int nNewAlloc = nAlloc + 32; HGLOBAL hSlotData; if(m_pSlotData == NULL) // 第一次使用 { hSlotData = ::GlobalAlloc(GMEM_MOVEABLE, nNewAlloc*sizeof(CSlotData)); } else { hSlotData = ::GlobalHandle(m_pSlotData); ::GlobalUnlock(hSlotData); hSlotData = ::GlobalReAlloc(hSlotData, nNewAlloc*sizeof(CSlotData), GMEM_MOVEABLE); } CSlotData* pSlotData = (CSlotData*)::GlobalLock(hSlotData); // 将新申请的空间初始化为0 memset(pSlotData + m_nAlloc, 0, (nNewAlloc - nAlloc)*sizeof(CSlotData)); m_nAlloc = nNewAlloc; m_pSlotData = pSlotData; } } // 调整m_nMax的值,以便为各线程的私有数据分配内存 if(nSlot >= m_nMax) m_nMax = nSlot + 1; m_pSlotData[nSlot].dwFlags |= SLOT_USED; // 更新m_nRover的值(我们假设下一个槽未被使用) m_nRover = nSlot + 1; ::LeaveCriticalSection(&m_cs); return nSlot; // 返回的槽号可以被FreeSlot, GetThreadValue, SetValue函数使用了}void CThreadSlotData::FreeSlot(int nSlot){ ::EnterCriticalSection(&m_cs); // 删除所有线程中的数据 CThreadData* pData = m_list; while(pData != NULL) { if(nSlot < pData->nCount) { delete (CNoTrackObject*)pData->pData[nSlot]; pData->pData[nSlot] = NULL; } pData = pData->pNext; } // 将此槽号标识为未被使用 m_pSlotData[nSlot].dwFlags &= ~SLOT_USED; ::LeaveCriticalSection(&m_cs);}inline void* CThreadSlotData::GetThreadValue(int nSlot){ CThreadData* pData = (CThreadData*)::TlsGetValue(m_tlsIndex); if(pData == NULL || nSlot >= pData->nCount) return NULL; return pData->pData[nSlot];}void CThreadSlotData::SetValue(int nSlot, void* pValue){ // 通过TLS索引得到我们为线程安排的私有存储空间 CThreadData* pData = (CThreadData*)::TlsGetValue(m_tlsIndex); // 为线程私有数据申请内存空间 if((pData == NULL || nSlot >= pData->nCount) && pValue != NULL) { // pData的值为空,表示该线程第一次访问线程私有数据 if(pData == NULL) { pData = new CThreadData; pData->nCount = 0; pData->pData = NULL; // 将新申请的内存的地址添加到全局列表中 ::EnterCriticalSection(&m_cs); m_list.AddHead(pData); ::LeaveCriticalSection(&m_cs); } // pData->pData指向真正的线程私有数据,下面的代码将私有数据占用的空间增长到m_nMax指定的大小 if(pData->pData == NULL) pData->pData = (void**)::GlobalAlloc(LMEM_FIXED, m_nMax*sizeof(LPVOID)); else pData->pData = (void**)::GlobalReAlloc(pData->pData, m_nMax*sizeof(LPVOID), LMEM_MOVEABLE); // 将新申请的内存初始话为0 memset(pData->pData + pData->nCount, 0, (m_nMax - pData->nCount) * sizeof(LPVOID)); pData->nCount = m_nMax; ::TlsSetValue(m_tlsIndex, pData); } // 设置线程私有数据的值 pData->pData[nSlot] = pValue;}void CThreadSlotData::DeleteValues(HINSTANCE hInst, BOOL bAll){ ::EnterCriticalSection(&m_cs); if(!bAll) { // 仅仅删除当前线程的线程局部存储占用的空间 CThreadData* pData = (CThreadData*)::TlsGetValue(m_tlsIndex); if(pData != NULL) DeleteValues(pData, hInst); } else { // 删除所有线程的线程局部存储占用的空间 CThreadData* pData = m_list.GetHead(); while(pData != NULL) { CThreadData* pNextData = pData->pNext; DeleteValues(pData, hInst); pData = pNextData; } } ::LeaveCriticalSection(&m_cs);}void CThreadSlotData::DeleteValues(CThreadData* pData, HINSTANCE hInst){ // 释放表中的每一个元素 BOOL bDelete = TRUE; for(int i=1; i<pData->nCount; i++) { if(hInst == NULL || m_pSlotData[i].hInst == hInst) { // hInst匹配,删除数据 delete (CNoTrackObject*)pData->pData[i]; pData->pData[i] = NULL; } else { // 还有其它模块在使用,不要删除数据 if(pData->pData[i] != NULL) bDelete = FALSE; } } if(bDelete) { // 从列表中移除 ::EnterCriticalSection(&m_cs); m_list.Remove(pData); ::LeaveCriticalSection(&m_cs); ::LocalFree(pData->pData); delete pData; // 清除TLS索引,防止重用 ::TlsSetValue(m_tlsIndex, NULL); }}CThreadSlotData::~CThreadSlotData(){ CThreadData *pData = m_list; while(pData != NULL) { CThreadData* pDataNext = pData->pNext; DeleteValues(pData, NULL); pData = pData->pNext; } if(m_tlsIndex != (DWORD)-1) ::TlsFree(m_tlsIndex); if(m_pSlotData != NULL) { HGLOBAL hSlotData = ::GlobalHandle(m_pSlotData); ::GlobalUnlock(hSlotData); ::GlobalFree(m_pSlotData); } ::DeleteCriticalSection(&m_cs);}//---------------------------------------void* CNoTrackObject::operator new(size_t nSize){ // 申请一块带有GMEM_FIXED和GMEM_ZEROINIT标志的内存 void* p = ::GlobalAlloc(GPTR, nSize); return p;}void CNoTrackObject::operator delete(void* p){ if(p != NULL) ::GlobalFree(p);}//----------------------------CThreadLocalObject 类--------------------------------//CNoTrackObject* CThreadLocalObject::GetData(CNoTrackObject* (*pfnCreateObject)()){ if(m_nSlot == 0) { if(_afxThreadData == NULL) _afxThreadData = new(__afxThreadData) CThreadSlotData; m_nSlot = _afxThreadData->AllocSlot(); } CNoTrackObject* pValue = (CNoTrackObject*)_afxThreadData->GetThreadValue(m_nSlot); if(pValue == NULL) { // 创建一个数据项 pValue = (*pfnCreateObject)(); // 使用线程私有数据保存新创建的对象 _afxThreadData->SetValue(m_nSlot, pValue); } return pValue;}CNoTrackObject* CThreadLocalObject::GetDataNA(){ if(m_nSlot == 0 || _afxThreadData == 0) return NULL; return (CNoTrackObject*)_afxThreadData->GetThreadValue(m_nSlot);}CThreadLocalObject::~CThreadLocalObject(){ if(m_nSlot != 0 && _afxThreadData != NULL) _afxThreadData->FreeSlot(m_nSlot); m_nSlot = 0;}//------------------------------------------ |
c++代码美化的更多相关文章
- 博客代码美化(SyntaxHighlighter)
这篇博文主要讲解自己使用SyntaxHighlighter对代码进行美工中遇见的问题以及如何使用SyntaxHighlighter? 首先来看看SyntaxHighlighter对代码美工的效果吧! ...
- JS Nice – JavaScript 代码美化和格式化工具
JS Nice 是一款让经过混淆处理的 JavaScript 代码可读更好的工具.它使用一种新型的用于 JavaScript 代码美化的去混淆和去压缩引擎.JSNice 采用先进的机器学习和程序分析技 ...
- Dirty Markup - 在线代码美化工具
如果你需要一个帮助你规整书写混乱的代码的工具的话,我强烈推荐给你这个在线代码美化工具 - Dirty Markup.这个在线工具能够帮助你有效的处理HTML/HTML5,CSS和javascript代 ...
- 一句代码美化你的下框之jquery.selectMM修复版(jquery.selectMM v0.9 beta 20141217)
一句代码美化你的下框之jquery.selectMM修复版(jquery.selectMM v0.9 beta 20141217) 浏览效果: http://www.beyond630.com/jqu ...
- H5网页布局+css代码美化
HTML5的结构化标签,对搜索引擎更友好 li 标签对不利于搜索引擎的收录,尽量少用 banner图片一般拥有版权,不需要搜索引擎收录,因此可以使用ul + li <samp></s ...
- HTML,JAVASCRIPT代码美化demo
看见别人的博客里面的源码展示十分漂亮,一时兴起,就自己做了个. 当然,网上已经有别人做好的非常完善的codemirror.highlight.prettify.而我在写自己的这个小demo之前呢,也没 ...
- php代码美化/格式化 还原 -问题
使用某个PHP代码格式化的工具.源代码: if ($this->_standardize_newlines == TRUE) { if (strpos($str, "\r") ...
- 如何使用代码美化器Uncrustify (How to use code beautifier Uncrustify)
1.下载NodePad++, 2.选择菜单Plugins/Plugin Manager/Show Plugin Manager 3.勾选UniversalIndentGUI,点击Install 4.下 ...
- IAR astyle代码美化
Menu Text填写上我们期望的名字,我们可以填入格式化代码,command内填入AStyle的地址, Argument内填入参数: --style=ansi -s4 -S -Y -D -xe ...
随机推荐
- 转:VC include 路径解析
VC include 路径解析 要了解vc中使用#include命令包含头文件所搜寻的路径,必须先了解vc中的几种路径: 1. 系统路径 系统路径在vc中是"Tools->Option ...
- Jqplot 使用总结之一(线条及节点颜色)
好不容易抽出时间将Jqplot做下最后的总结,下面通过四个例子来学习Jqplot的一些常见技巧:示例1. 设置线条颜色(包括背景色及线条颜色的批量赋值) <!DOCTYPE html> & ...
- java 导出Excel文件
最近在做一个文件导出功能,发现大部分博客上通过引用各种的util工具包,其实说白了还是利用apache的poi,在项目中直接导入poi包就可以.直面其原理,随个人喜好封装. 1.首先准备一些poi的j ...
- iOS用ASIHttpRequest上传
1.新建一个single view工程,导入ASIHttpRequest库,导入MobileCoreServices.CFNetwork.SystemConfiguration和libz1.2.5.d ...
- mysql数据库与oracle数据库的切换
1.从mysql数据库中导出ambition(数据库名)结构和数据的ambition.sql文件. 2.将ambition.sql用Power Designer转换成mysql数据模型. 给模型起个名 ...
- AS3全局与局部坐标转换
在大部分需要用户点击的游戏中,坐标的转换是一种必须熟练掌握的方法. 首先在一个700x700的舞台中创建2个方块,红色的大方块A是600x600,位于(50,50),绿色的小方块B是300x300.A ...
- postgresql中执行计划
1.Explain explain select * from tablename; 2.explain输出josn格式 explain (format json) select * from tab ...
- (37) 在命令行调用API
l 前言 有时为了更好地调整和改动数据会和到cli ,这会给我们带来更高的效率,基于官网的文档很是简单,这里就带大家一起运用 cli l 搭建 在项目下面有文件odoo.py 这个文件 ,对就是用这个 ...
- POJ----(3974 )Palindrome [最长回文串]
Time Limit: 15000MS Memory Limit: 65536K Total Submissions: 5121 Accepted: 1834 Description Andy ...
- 我也来SplashScreen
SplashScreen,就是平时我们说的溅射屏幕,任何一个做过客户端程序的coder应该对它都不陌生,因为它能提升用户体验,让软件看上去更美.SplashScreenForm通常进入程序时是打开,主 ...