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

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

偶爾來避難的地方~

  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>
            欧美aⅴ一区二区三区视频| 欧美高清视频在线播放| 久久久久久一区二区| 亚洲综合第一| 一区二区日本视频| 一区二区久久| 亚洲已满18点击进入久久| 亚洲自拍电影| 久久亚洲高清| 亚洲国产精品激情在线观看| 亚洲激情视频在线播放| 一本色道久久综合| 亚洲免费视频网站| 久久躁日日躁aaaaxxxx| 欧美精品一区二区三区蜜桃| 国产精品家庭影院| 狠狠色噜噜狠狠色综合久| 最新中文字幕亚洲| 亚洲一区日本| 狼狼综合久久久久综合网 | 久久av一区二区三区漫画| 久久国产精品色婷婷| 欧美激情一区二区三区高清视频| 欧美视频三区在线播放| 国产亚洲精品久久久久久| 91久久线看在观草草青青| 亚洲欧美国产日韩天堂区| 欧美1区免费| 亚洲欧美卡通另类91av| 欧美精品九九| 亚洲国产成人porn| 性娇小13――14欧美| 亚洲国产精品成人va在线观看| 亚洲天堂av高清| 亚洲制服少妇| 亚洲日本电影| 欧美亚洲日本国产| 亚洲黄色免费网站| 欧美一区二区三区另类| 欧美喷潮久久久xxxxx| 国内久久婷婷综合| 午夜综合激情| 99精品久久久| 欧美va天堂| 在线欧美电影| 狂野欧美性猛交xxxx巴西| 欧美亚洲三区| 国产亚洲精品bt天堂精选| 亚洲一区二区三区高清| 亚洲高清久久网| 久久婷婷成人综合色| 国产一区二区三区丝袜| 香蕉av福利精品导航| 中文国产成人精品| 欧美日韩免费高清| 中文在线资源观看网站视频免费不卡| 欧美黑人一区二区三区| 美女91精品| 亚洲国产精品高清久久久| 性色av一区二区三区在线观看 | 欧美亚洲视频在线看网址| 国产精品一区二区在线观看| 亚洲一区在线播放| 中文av一区二区| 国产日韩精品入口| 久久精品一区中文字幕| 欧美在线精品一区| 极品av少妇一区二区| 欧美1区视频| 欧美日韩999| 亚洲欧美日韩国产另类专区| 亚洲图片欧洲图片av| 国产伦精品一区二区| 久久亚洲欧洲| 欧美高清自拍一区| 亚洲影视九九影院在线观看| 亚洲尤物在线| 在线成人激情黄色| 亚洲国产精品成人| 国产精品久久久久天堂| 久久久久中文| 欧美激情亚洲国产| 欧美一区二区福利在线| 久久狠狠婷婷| 一区二区三区蜜桃网| 新片速递亚洲合集欧美合集| 亚洲成人在线网| 一本一本久久a久久精品牛牛影视| 国产精品久久午夜| 欧美成人69av| 国产精品你懂的在线欣赏| 久久综合给合| 欧美肉体xxxx裸体137大胆| 久久精品九九| 欧美精品三级日韩久久| 欧美在线观看视频一区二区| 亚洲激情在线观看视频免费| 中文在线一区| 亚洲黄网站黄| 欧美资源在线观看| 99人久久精品视频最新地址| 亚洲欧美在线x视频| 亚洲九九爱视频| 欧美一二三区精品| 一区二区三区高清不卡| 久久精品国产99国产精品| 国产精品99久久久久久www| 久久久久久久精| 亚洲欧美久久| 欧美日韩国产123| 久久综合国产精品台湾中文娱乐网| 欧美日韩裸体免费视频| 你懂的一区二区| 国产欧美日韩视频| 一区二区高清在线观看| 亚洲日本无吗高清不卡| 欧美在线视频全部完| 亚洲欧美日韩一区二区| 欧美日本在线| 亚洲高清资源综合久久精品| 狠狠综合久久av一区二区老牛| 亚洲网站在线播放| 夜夜嗨av一区二区三区中文字幕| 久久久综合免费视频| 欧美一级播放| 国产精品捆绑调教| 中国av一区| 亚洲伊人伊色伊影伊综合网| 欧美日韩国产123| 日韩视频不卡中文| 一区二区三区欧美视频| 欧美高清视频在线播放| 亚洲高清在线观看一区| 亚洲精品一区二区三区蜜桃久 | 美女被久久久| 亚洲韩国精品一区| 99精品福利视频| 欧美精品国产精品| 日韩亚洲成人av在线| 亚洲一区二区免费看| 欧美婷婷六月丁香综合色| 一区二区三区 在线观看视| 亚洲视频免费观看| 国产精品国产精品国产专区不蜜| 一区二区三区成人| 午夜精品久久久久久久久久久 | 国产精品最新自拍| 午夜精品久久久久久久蜜桃app | 久久一本综合频道| 亚洲高清中文字幕| 中文欧美日韩| 国产精品欧美日韩一区二区| 羞羞漫画18久久大片| 免费观看久久久4p| 亚洲久久成人| 国产精品老女人精品视频| 亚洲午夜精品久久久久久浪潮| 欧美一区二区三区另类| 欧美99在线视频观看| 鲁鲁狠狠狠7777一区二区| 精品成人一区二区三区| 欧美a级大片| 日韩亚洲精品视频| 亚洲欧美久久| 国产一区二区三区不卡在线观看| 欧美一级久久久久久久大片| 久久免费黄色| 亚洲精品中文在线| 国产精品乱码一区二区三区| 性做久久久久久| 91久久久一线二线三线品牌| 亚洲蜜桃精久久久久久久| 国产精品久久久久久久久久ktv | 久久综合伊人| 亚洲精品久久久久| 亚洲一区二区免费在线| 国产一区二区三区av电影| 欧美精品久久久久久久久老牛影院| 亚洲永久在线| 最新国产乱人伦偷精品免费网站| 欧美一区二区三区视频在线观看| 亚洲国产精品一区在线观看不卡 | 国产精品一区毛片| 久久精品综合网| 一区二区三区欧美视频| 欧美成人精品高清在线播放| 亚洲久久在线| 韩国成人福利片在线播放| 欧美日韩国产成人在线91| 欧美在线日韩| 亚洲视频综合在线| 亚洲激情另类| 你懂的一区二区| 午夜精品福利在线| 亚洲乱码国产乱码精品精可以看 | 亚洲国产三级网| 国产日韩欧美在线一区| 欧美日韩一区二区视频在线 | 激情综合网激情| 国产欧美婷婷中文|