青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

飯中淹的避難所~~~~~

偶爾來避難的地方~

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  94 隨筆 :: 0 文章 :: 257 評論 :: 0 Trackbacks

typedef void (*pfn_outputchar)( void *, int );

typedef void (*pfn_outputtext)( void *, const char *, size_t );


typedef struct _output_target

{

pfn_outputchar pFnOutputChar;

pfn_outputtext pFnOutputText;

void * pData;

void putChar( int ch )

{

pFnOutputChar( pData, ch );

}

void putText( const char * pText, size_t len )

{

pFnOutputText( pData, pText, len );

}

}st_output_target;


typedef void (*pfn_output_value)( st_output_target * pTarget, const void*, const char * );



template <typename T>

struct tout

{

static void _output(st_output_target * pTarget)

{

pTarget->putText( __FUNCTION__, strlen( __FUNCTION__ ) );

}

};



struct st_output_unknown_converter

{

st_output_unknown_converter( const char * pszText )

{

_T = pszText;

_Len = strlen( pszText );

}

const char * _T;

size_t _Len;

};



template <typename T>

void t_output_value( st_output_target * pTarget, const void * pV, const char * pStyle )

{

st_output_unknown_converter ocvt( *(T*) pV );

pTarget->putText( ocvt._T, ocvt._Len );

}




template <>

void t_output_value<int>( st_output_target * pTarget, const void * pV, const char * pStyle )

{

char szIntText[20];

size_t len = sprintf( szIntText, "%d", *(int*)pV );

pTarget->putText( szIntText, len );

}


template <>

void t_output_value<char *>( st_output_target * pTarget, const void * pV, const char * pStyle )

{

char * p = *(char**)pV;

size_t len = strlen( p );

pTarget->putText( p, len );

}


template <>

void t_output_value<const char *>( st_output_target * pTarget, const void * pV, const char * pStyle )

{

size_t len = strlen( *(char**)pV );

pTarget->putText( *(char**)pV, len );

}

template <>

void t_output_value<char[]>( st_output_target * pTarget, const void * pV, const char * pStyle )

{

size_t len = strlen( *(char**)pV );

pTarget->putText( *(char**)pV, len );

}




typedef struct _output_param

{

pfn_output_value pFn;

const void * pValue;

}st_output_param;


// compile-time type transformation

template<typename T>

struct ptr_decay {

typedef T type;

};

template<typename T>

struct ptr_decay<T[]> {

typedef T* type;

};

template<typename T, std::size_t N>

struct ptr_decay<T[N]> {

typedef T* type;

};


template <typename T1>

void t_output( st_output_target * pTarget, const char * pszText, const T1 & v1 )

{

const int paramCount = 1;

typename ptr_decay<T1>::type _v1 = (typename ptr_decay<T1>::type)v1;

st_output_param params[paramCount] = {

{ t_output_value<typename ptr_decay<T1>::type>, &_v1 },

};

const char * p = pszText;

int iState = 0;

const char * pParamBegin = NULL;

const char * pParamStyleBegin = NULL;

const char * pTextBegin = pszText;

while( *p )

{

if( iState == 0 )

{

if( *p == '{' )

{

size_t textLen = (size_t)(p-pTextBegin);

if( textLen > 0 )

{

pTarget->putText( pTextBegin, textLen );

}

pParamBegin = p;

pParamStyleBegin = NULL;

iState = 1;

}

}

else if( iState == 1 )

{

if( *p == ':' )

{

pParamStyleBegin = p;

}

else if( *p == '}' )

{

char szIndex[20];

char szStyle[20];

int iIndexLen = pParamStyleBegin == NULL ? (int)(p-pParamBegin)-1 : (int)(pParamStyleBegin - pParamBegin) - 1;

int iStyleLen = pParamStyleBegin == NULL ? 0 : (int)(p-pParamStyleBegin)-1;

if( iIndexLen > 0 && iIndexLen <= 3 )

{

strncpy( szIndex, pParamBegin + 1, iIndexLen );

szIndex[iIndexLen] = 0;

if( iStyleLen > 0 && iStyleLen <= 10 )

{

strncpy(szStyle, pParamStyleBegin, iStyleLen);

szStyle[iStyleLen] = 0;

}

else

szStyle[0] = 0;

int iParamIndex = atoi( szIndex );

if( iParamIndex >= 0 &&

  iParamIndex < paramCount )

{

params[iParamIndex].pFn( pTarget, params[iParamIndex].pValue, szStyle );

}

}

iState = 0;

pTextBegin = p + 1;

}

}

++p;

}

size_t textLen = (size_t)( p - pTextBegin );

if( textLen > 0 )

{

pTarget->putText( pTextBegin, textLen );

}

}


void _output_char( void *, int ch )

{

putchar( ch );

}

void _output_text( void *, const char * pszText, size_t len )

{

for( int i = 0;i < (int)len; ++i )

{

putchar( pszText[i] );

}

}




int main(int argc, char* argv[])

{


st_output_target ot = 

{

_output_char,

_output_text,

NULL

};

char * astr = "abc";

t_output(&ot, "test {0}\n", "abc");

posted on 2011-03-05 11:47 飯中淹 閱讀(458) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲天堂黄色| 亚洲福利在线观看| 国产精品国色综合久久| 久久久久国产一区二区| 午夜亚洲激情| 午夜精品区一区二区三| 国产精品99久久久久久久女警| 欧美国产成人精品| 亚洲国产成人不卡| 亚洲片国产一区一级在线观看| 亚洲国产日韩欧美| 亚洲日本成人| 亚洲一区二区黄色| 久久av二区| 老司机成人在线视频| 欧美成人中文| 欧美视频一区二| 国产女主播一区二区| 国产一区二区三区黄| 在线欧美日韩国产| 在线视频免费在线观看一区二区| 一区二区三区偷拍| 久久精品人人做人人爽| 免费高清在线一区| 亚洲精品乱码久久久久久| 一区二区欧美在线| 欧美专区日韩视频| 欧美成在线视频| 国产精品毛片一区二区三区| 亚洲高清免费在线| 久久av在线| 日韩午夜黄色| 玖玖玖国产精品| 亚洲欧洲日韩在线| 欧美性色综合| 99在线|亚洲一区二区| 亚洲综合欧美日韩| 欧美大胆成人| 国内一区二区三区| 性8sex亚洲区入口| 最新中文字幕亚洲| 久久久久国内| 国产精品久久久久久久午夜片| 亚洲国产清纯| 亚洲一区二区动漫| 亚洲国产小视频在线观看| 亚洲四色影视在线观看| 香蕉乱码成人久久天堂爱免费| 亚洲视频一区在线观看| 亚洲影院在线| 亚洲欧美综合国产精品一区| 欧美日韩国产首页| 欧美日韩精品综合| 国产精品久久久久三级| 国产亚洲一区二区精品| 一区在线观看| 99精品国产高清一区二区| 国产精品久久精品日日| 欧美日本在线播放| 欧美一区二区精品久久911| 久久大逼视频| 你懂的国产精品| 欧美三级欧美一级| 国产一区二区三区日韩| 亚洲激情图片小说视频| 亚洲婷婷免费| 浪潮色综合久久天堂| 亚洲高清一区二| 亚洲图片你懂的| 免费日韩av| 国产精品嫩草久久久久| 雨宫琴音一区二区在线| 国产精品久久久久久久久久久久久| 欧美精品激情在线| 欧美激情在线| 国产精品系列在线| 日韩午夜视频在线观看| 久久国产手机看片| 日韩视频专区| 免费成人av在线看| 国产夜色精品一区二区av| 亚洲开发第一视频在线播放| 久久精品91久久久久久再现| 亚洲国产天堂久久综合| 欧美一区二区三区啪啪| 欧美日韩在线播放一区| 一区二区三区在线视频免费观看| 亚洲免费在线播放| 欧美一区二区成人| 欧美日韩国产123区| 一区精品在线播放| 久久精品成人| 91久久精品国产91性色tv| 欧美一区二区女人| 国产精品嫩草99av在线| 精品999久久久| 久久亚洲电影| 午夜日韩在线观看| 国产日韩精品在线观看| 亚洲一二三区在线观看| 最新成人av在线| 免费在线观看日韩欧美| 原创国产精品91| 狂野欧美一区| 久久久噜噜噜久久人人看| 国产一区二区三区免费在线观看| 亚洲一区二区三区视频| 亚洲日本成人在线观看| 亚洲神马久久| 欧美三级网页| 亚洲一区二区在线视频| 一本久道久久久| 欧美日韩视频专区在线播放 | 国产精品99久久99久久久二8| 久久久久网址| 看欧美日韩国产| 亚洲第一福利在线观看| 老司机精品视频一区二区三区| 亚洲欧洲av一区二区| 国产欧美日韩一区二区三区| 久久精品二区| 久久久国产亚洲精品| 一区二区三区在线高清| 亚洲电影下载| 欧美jizz19性欧美| 国产麻豆日韩| 免费观看成人www动漫视频| 欧美91福利在线观看| av成人免费在线| 亚洲午夜精品国产| 国内外成人免费激情在线视频网站 | 欧美久久九九| 午夜精品久久| 久久久精品网| 日韩视频中文| 亚洲字幕在线观看| 国产精品一区二区黑丝| 性欧美大战久久久久久久免费观看 | 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 午夜精品一区二区在线观看| 国内精品久久久久伊人av| 亚洲国产成人精品女人久久久| 欧美精品日韩综合在线| 午夜一区二区三区在线观看| 久久久久久久久综合| 一区二区三区免费在线观看| 亚洲欧美另类在线观看| 亚洲国产精品v| 中文日韩在线| 136国产福利精品导航| av成人国产| 一色屋精品视频在线看| 一区二区三区免费看| 亚洲高清视频的网址| 亚洲免费在线观看视频| 日韩一级免费| 久久先锋资源| 久久国产成人| 欧美资源在线观看| 好吊妞**欧美| 久久中文在线| 亚洲少妇自拍| 亚洲一区二区四区| 国产一区二区高清| 99热在线精品观看| 中文在线不卡| 精品成人乱色一区二区| 91久久精品国产91性色tv| 激情成人综合| 亚洲欧美日韩综合aⅴ视频| av成人手机在线| 欧美成人dvd在线视频| 久久漫画官网| 国产香蕉97碰碰久久人人| 99国产精品久久| 亚洲国产一区在线观看| 欧美中文在线观看国产| 亚洲综合日本| 欧美日韩综合视频网址| 欧美韩国在线| 亚洲人成网站999久久久综合| 久久午夜精品一区二区| 蜜臀av在线播放一区二区三区| 国产日韩亚洲欧美精品| 亚洲欧美日韩网| 欧美中文字幕不卡| 巨胸喷奶水www久久久免费动漫| 亚洲日本中文字幕区| 午夜精品一区二区三区在线| 午夜精彩国产免费不卡不顿大片| 欧美亚洲午夜视频在线观看| 久久人人九九| 国产欧美日韩精品丝袜高跟鞋| 9l视频自拍蝌蚪9l视频成人| 亚洲免费av观看| 欧美成人免费播放| 亚洲国产另类 国产精品国产免费| 在线视频成人| 欧美国产日韩一区二区| 中文一区二区在线观看|