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

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

偶爾來避難的地方~

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  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>
            亚洲精品乱码久久久久久日本蜜臀 | 一区二区免费在线视频| 欧美成人精品在线视频| 久久综合福利| 一区二区免费在线视频| 一区二区三区 在线观看视| 国产精品网站在线播放| 久久九九国产精品| 蜜桃久久精品乱码一区二区| 一区二区欧美激情| 欧美一级在线视频| 亚洲三级影片| 亚洲主播在线| 亚洲精品国产日韩| 亚洲欧美一区二区三区极速播放| 一区二区三区在线不卡| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲激情一区二区| 国产精品久久久久久久浪潮网站| 久久精品国产一区二区三| 久色成人在线| 性感少妇一区| 欧美国产日产韩国视频| 欧美在线视频播放| 欧美国产精品中文字幕| 久久国产手机看片| 欧美—级在线免费片| 久久九九精品| 国产精品成人av性教育| 欧美成人tv| 国产伦理一区| 99国产精品视频免费观看| 原创国产精品91| 亚洲桃色在线一区| 日韩一级精品| 欧美激情1区2区3区| 亚洲经典三级| 国产日韩欧美视频在线| 亚洲风情在线资源站| 国产手机视频一区二区| 亚洲精选成人| 一区视频在线播放| 亚洲一级黄色片| 亚洲蜜桃精久久久久久久| 久久精品观看| 欧美一区二区三区喷汁尤物| 欧美人与性禽动交情品 | 亚洲中无吗在线| 欧美成人国产va精品日本一级| 欧美中文字幕| 国产欧美日韩精品丝袜高跟鞋 | 午夜精品视频在线观看| 亚洲字幕在线观看| 欧美日韩成人一区二区| 亚洲激情电影中文字幕| 亚洲人成人77777线观看| 久久精品中文字幕一区二区三区| 亚洲专区一区二区三区| 欧美日本国产一区| 99re6这里只有精品| 亚洲精品久久视频| 欧美成人精品在线播放| 欧美jizzhd精品欧美喷水| 在线观看成人av| 久久婷婷影院| 亚洲国产精品福利| 亚洲精品乱码久久久久久黑人| 免费不卡在线观看| 欧美成人免费全部| 日韩亚洲欧美一区| 欧美私人网站| 亚洲午夜视频在线观看| 欧美亚洲免费电影| 国产精品天美传媒入口| 欧美一级理论性理论a| 久久精品免费观看| 亚洲黑丝一区二区| 欧美不卡视频一区| 亚洲伦理在线观看| 欧美一激情一区二区三区| 国产一区二区电影在线观看| 久久国产精品电影| 欧美成人国产一区二区| av不卡在线看| 国产伦理精品不卡| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲国产精品va在线观看黑人| 亚洲一区二区三区在线观看视频| 国产精品video| 久久国产精品亚洲va麻豆| 亚洲国产成人久久综合一区| 亚洲一区精品在线| 韩国精品久久久999| 欧美激情一区二区三区在线| 中文久久乱码一区二区| 免费一级欧美片在线观看| 亚洲欧洲一区二区天堂久久| 国产精品美女www爽爽爽视频| 久久精品色图| 日韩系列欧美系列| 欧美日韩不卡合集视频| 久久综合色影院| 欧美福利视频在线| 亚洲欧美国产视频| 亚洲高清视频一区| 国产欧美精品va在线观看| 久久综合九九| 香蕉亚洲视频| 一区二区三区日韩精品| 欧美成人伊人久久综合网| 亚洲在线视频观看| 亚洲人精品午夜| 韩国亚洲精品| 国产精品日韩欧美大师| 欧美另类69精品久久久久9999| 久久国产精品久久久久久电车| 亚洲精品综合| 亚洲国产成人av| 久久婷婷蜜乳一本欲蜜臀| 午夜一区不卡| 在线视频欧美日韩精品| 在线不卡免费欧美| 国产在线不卡视频| 国产精品美女一区二区在线观看| 欧美成人性网| 美女日韩在线中文字幕| 久久久一区二区三区| 午夜精品成人在线视频| 国产精品99久久99久久久二8| 亚洲福利av| 亚洲高清在线观看| 欧美国产日本| 欧美成人首页| 欧美成人蜜桃| 欧美韩日视频| 欧美国产在线电影| 亚洲成色www8888| 久久色在线播放| 久久久久.com| 美女脱光内衣内裤视频久久影院 | 亚洲激情专区| 最新成人在线| 亚洲精选大片| 亚洲精品在线视频观看| 99re成人精品视频| 亚洲最黄网站| 亚洲字幕一区二区| 午夜精品久久久久久久99樱桃| 亚洲视频二区| 欧美一区免费视频| 久久婷婷国产综合国色天香| 久久美女性网| 欧美精品免费播放| 国产精品免费一区豆花| 国产日韩欧美日韩大片| 国内精品嫩模av私拍在线观看 | 国产精品毛片一区二区三区| 国产精品蜜臀在线观看| 国产综合久久久久久鬼色| 亚洲成色777777在线观看影院| 亚洲乱码国产乱码精品精天堂 | 欧美在线观看日本一区| 久久免费精品视频| 亚洲激情一区二区| 亚洲一品av免费观看| 午夜在线成人av| 蜜桃av一区二区三区| 欧美视频成人| 国产一区二区| 一区二区三区四区五区精品视频 | 亚洲承认在线| 一区二区日韩精品| 久久久久网站| 国产日韩精品视频一区| 亚洲国产精品久久91精品| 99精品福利视频| 久久国产主播| 亚洲精品一品区二品区三品区| 午夜一区二区三区不卡视频| 蜜臀av在线播放一区二区三区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 巨乳诱惑日韩免费av| 99精品99| 欧美成人福利视频| 国产午夜精品理论片a级大结局| 亚洲国产欧美一区二区三区久久| 亚洲欧美日韩在线不卡| 亚洲高清久久| 久久福利一区| 国产精品视区| 一区二区日本视频| 毛片精品免费在线观看| 亚洲自拍另类| 欧美三日本三级三级在线播放| 国模吧视频一区| 欧美在线免费观看亚洲| 夜夜爽夜夜爽精品视频| 你懂的亚洲视频| 国产一区二区三区久久| 亚洲欧美在线免费|