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,"&amplt");
str=str.replace(/>/g,"&ampgt");
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++代码美化的更多相关文章

  1. 博客代码美化(SyntaxHighlighter)

    这篇博文主要讲解自己使用SyntaxHighlighter对代码进行美工中遇见的问题以及如何使用SyntaxHighlighter? 首先来看看SyntaxHighlighter对代码美工的效果吧! ...

  2. JS Nice – JavaScript 代码美化和格式化工具

    JS Nice 是一款让经过混淆处理的 JavaScript 代码可读更好的工具.它使用一种新型的用于 JavaScript 代码美化的去混淆和去压缩引擎.JSNice 采用先进的机器学习和程序分析技 ...

  3. Dirty Markup - 在线代码美化工具

    如果你需要一个帮助你规整书写混乱的代码的工具的话,我强烈推荐给你这个在线代码美化工具 - Dirty Markup.这个在线工具能够帮助你有效的处理HTML/HTML5,CSS和javascript代 ...

  4. 一句代码美化你的下框之jquery.selectMM修复版(jquery.selectMM v0.9 beta 20141217)

    一句代码美化你的下框之jquery.selectMM修复版(jquery.selectMM v0.9 beta 20141217) 浏览效果: http://www.beyond630.com/jqu ...

  5. H5网页布局+css代码美化

    HTML5的结构化标签,对搜索引擎更友好 li 标签对不利于搜索引擎的收录,尽量少用 banner图片一般拥有版权,不需要搜索引擎收录,因此可以使用ul + li <samp></s ...

  6. HTML,JAVASCRIPT代码美化demo

    看见别人的博客里面的源码展示十分漂亮,一时兴起,就自己做了个. 当然,网上已经有别人做好的非常完善的codemirror.highlight.prettify.而我在写自己的这个小demo之前呢,也没 ...

  7. php代码美化/格式化 还原 -问题

    使用某个PHP代码格式化的工具.源代码: if ($this->_standardize_newlines == TRUE) { if (strpos($str, "\r") ...

  8. 如何使用代码美化器Uncrustify (How to use code beautifier Uncrustify)

    1.下载NodePad++, 2.选择菜单Plugins/Plugin Manager/Show Plugin Manager 3.勾选UniversalIndentGUI,点击Install 4.下 ...

  9. IAR astyle代码美化

    Menu Text填写上我们期望的名字,我们可以填入格式化代码,command内填入AStyle的地址, Argument内填入参数:  --style=ansi -s4 -S -Y  -D -xe ...

随机推荐

  1. spring,maven,dubbo配置

    首先我写的这个不是介绍原理的东西,只是指明在我在使用的过程中遇见的一些疑惑的,最后我的理解,你要看详细的配置的话可以看网上的,这个一大堆的.其实dubbo的原理从模型上来看是很简单的东西,完全可以把这 ...

  2. checkbox将选中的数据提交到后台

    在项目中有些地方需要批量添加的数据,在这里使用到checkbox比较方便一些. 例如:我需要将多个包添加到同一个地区的 主要的前端代码: 这个是用来放checkbox的. <div id=&qu ...

  3. vue学习笔记之属性和方法

    每个Vue都会代理其data对象里所有的属性:只有这些被代理的属性是响应的.如果在实例创建之后添加新的属性到实例上,它不会触发视图更新.例子: <script type="text/j ...

  4. Nmap 使用指南

    Namp的英文全称是“Network Mapper”,Namp可用来快速扫描大型网络或是单个主机 nmap主要包括四个方面  主机发现.端口扫描.应用与版本侦测.操作系统侦测 主机发现原理:主机发现的 ...

  5. 关于在biweb 中安装完成后 首页上方报错问题的解决

    在利用biweb进行网站开发的时候 首先得安装biweb    安装就是下一步,,,下一步....下一步   最后就成功了 .但是有种情况我总是竟让遇到,而已有的人安装会遇到 有的人安装就不会遇到,后 ...

  6. BZOJ4049 [Cerc2014] Mountainous landscape

    首先对于一个给定的图形,要找到是否存在答案非常简单... 只要维护当然图形的凸包,看一下是否有线段在这条直线上方,直接二分即可,单次询问的时间复杂度$O(logn)$ 现在用线段树维护凸包,即对于一个 ...

  7. PDF 补丁丁 0.4.2.950 测试版发布:按文件夹合并生成单独的PDF文件

    新的测试版实现了将文件夹的内容合并为单独的PDF文件的功能.以下图为例讲解操作步骤. 点击工具栏的“合并文件”按钮,打开合并功能. 设M盘下有“test”和“test2”文件夹,里面包含了需要合并的文 ...

  8. mac xcworkspace xcodebuild

    xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单来说,Workspace就是一个容器,在该容器中可以存放多个你创建的 ...

  9. mac系统xcode升级等软件更换appid账户

    删掉xcode 后发现 还是 会存在更新项,点击还是会提示输入之前app id 账号的密码 经过搜索和分析,发现是 Spotlight 在捣鬼,文件和目录删除了,但是索引文件没有被更新. 依次执行下面 ...

  10. wp8.1 Study16:网络之 使用Azure移动服务及利用Azure推送通知服务

    一.WP8.1有关网络的API WP8.1与其它平台的对比如下图: 二.Azure移动服务 前提: Azure移动服务可以让使用者的数据存放在云空间,从而方便使用者的App在不同平台上的数据共享. 1 ...