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

Cpper
C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
#ifndef STREAM_BUFFER_H
#define STREAM_BUFFER_H
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
"gaudio.h"

typedef 
struct _streamBuffer streamBuffer;
//typedef size_t(*streamRead)(void* ctx,void* ptr,size_t size,size_t nmemb);
//typedef int(*streamSeek)(void* ctx,glong offset,int flag);
//typedef int(*streamClose)(void* ctx);

streamBuffer
* stream_open_file(const gchar* file);
streamBuffer
* stream_open_mem(gvoid* mem,gulong size);
streamBuffer
* stream_open_callbacks(gread read,gseek seek,gtell tell,gclose close,gvoid* context);
glong         stream_read(streamBuffer
* stream,gvoid* ptr,gint size,glong nmemb);
glong         stream_seek(streamBuffer
* stream,glong offset,gint flag);
glong         stream_close(streamBuffer
* stream);

#endif
//! by ccsdu2004

#include <stdio.h>
#include 
<string.h>
#include 
"streamBuffer.h"
#include 
"gmemory.h"

struct _streamBuffer
{
    gread  read;
    gseek  seek;
    gclose close;
    gtell  tell;
    
void*  ctx;
};

typedef 
struct _stdIOContext
{
    FILE 
*fp;
}stdIOContext;

glong stdio_stream_read(gvoid
* ptr,gint size,glong nmemb,gvoid* ctx)
{
    
return fread(ptr,size,nmemb,((stdIOContext*)ctx)->fp);
}

glong stdio_stream_seek(gvoid
* ctx,glong offset,gint flag)
{
    
return fseek(((stdIOContext*)ctx)->fp,offset,flag);
}

glong APIENTRY stdio_stream_tell(gvoid
* ctx)
{
    
return ftell(((stdIOContext*)ctx)->fp);
}

glong stdio_stream_close(gvoid
* ptr)
{
    stdIOContext
* ctx = (stdIOContext*)ptr;
    gint ret 
= 0;
    ret 
= fclose(ctx->fp);
    gFreeBuffer(ctx);
    
return ret;
}

typedef 
struct memContext
{
    guchar
* base;
    guchar
* current;
    guchar
* end;
}memContext;

glong mem_stream_read(gvoid
* ptr,gint size,glong nmemb,gvoid* ctx)
{
    streamBuffer
* stream = (streamBuffer*)ctx;
    memContext 
*c;
    glong count;

    c 
= (memContext*)stream;
    count 
= nmemb;

    
if(c->current + count * size > c->end)
        count 
= (c->end - c->current) / size;

    memcpy(ptr, c
->current, count * size);
    c
->current += count * size;
    
return count;
}

glong mem_stream_seek(gvoid
* ctx,glong offset,gint flag)
{
    streamBuffer
* stream = (streamBuffer*)ctx;
    memContext
* c;
    c 
= (memContext*)stream;
    
if(c == NULL)
        
return -1;
    
if(flag == SEEK_SET)
    {
        
if(offset < 0 || offset > c->end - c->base)
            
return -1;
        c
->current = c->base + offset;
        
return 0;
    }
    
else if(flag == SEEK_CUR)
    {
        
if(offset > 0)
        {
            
if(offset > c->end - c->current)
                
return -1;
            c
->current += offset;
            
return 0;
        }
        
else if(offset < 0)
        {
            
if(-offset > c->current - c->base)
                
return -1;
            c
->current += offset;
            
return 0;
        }
    }
    
else if(flag == SEEK_END)
    {
        
if(offset > 0 || offset > c->end - c->base)
            
return -1;
        c
->current = c->end - offset;
        
return 0;
    }
    
return -1;
}

glong mem_stream_close(gvoid 
*ptr)
{
    memContext
* ctx = (memContext*)ptr;
    gFreeBuffer(ctx
->base);
    gFreeBuffer(ctx);
    
return 0;
}

streamBuffer
* stream_open_fp(FILE* fp)
{
    stdIOContext
* ctx;
    streamBuffer
* stream;

    stream 
= gcreate_buffer<streamBuffer>(1);
    
if(stream == NULL)
        
return NULL;

    ctx 
= gcreate_buffer<stdIOContext>(1);
    
if(ctx == NULL)
    {
        gFreeBuffer(stream);
        
return NULL;
    }

    ctx
->fp = fp;
    stream
->ctx = ctx;
    stream
->read = stdio_stream_read;
    stream
->seek = stdio_stream_seek;
    stream
->close = stdio_stream_close;
    
return stream;
}

streamBuffer
* stream_open_file(const gchar *file)
{
    FILE 
*fp;
    fp 
= fopen((char*)file,"rb");
    
if(fp == NULL)
       
return NULL;
    
return stream_open_fp(fp);
}

streamBuffer
* stream_open_mem(gvoid* mem,gulong size)
{
    memContext
*   ctx;
    streamBuffer
* stream;

    stream 
= gcreate_buffer<streamBuffer>(1);
    
if(stream == NULL)
        
return NULL;

    ctx 
= gcreate_buffer<memContext>(1);
    
if(ctx == NULL)
    {
        gFreeBuffer(stream);
        
return NULL;
    }

    ctx
->base = (guchar*)mem;
    ctx
->current = (guchar*)mem;
    ctx
->end = ((guchar*) mem) + size;

    stream
->ctx = ctx;
    stream
->read = mem_stream_read;
    stream
->seek = mem_stream_seek;
    stream
->close = mem_stream_close;

    
return stream;
}

streamBuffer
* stream_open_callbacks(gread read,gseek seek,gtell tell,gclose close,gvoid* context)
{
    streamBuffer
* stream = gcreate_buffer<streamBuffer>(1);
    
if(stream == NULL)
       
return NULL;

    stream
->ctx = context;
    stream
->read = read;
    stream
->seek = seek;
    stream
->tell = tell;
    stream
->close = close;
    
return stream;
}

glong stream_read(streamBuffer
* stream,gvoid* ptr,gint size,glong nmemb)
{
    
return stream->read(ptr,size,nmemb,stream->ctx);
}

glong stream_seek(streamBuffer
* stream,glong offset,gint flag)
{
    
return stream->seek(stream,offset,flag);
    
/*size_t c;
    char tmp[1024];
    while(offset > 0)
    {
        c = offset;
        if(c > 1024)
           c = 1024;
        offset -= c;

        if(c != stream_read(stream,tmp,1,c))
        {
        }
    }
    return 1;
*/
}

glong stream_close(streamBuffer
* stream)
{
    gint ret 
= stream->close(stream->ctx);
    gFreeBuffer(stream);
    
return ret;
}
posted on 2013-04-09 20:56 ccsdu2009 閱讀(661) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 編程基礎(chǔ)
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩一二三区视频| 久久资源在线| 欧美日韩中文字幕日韩欧美| 欧美韩日高清| 国产美女精品视频| 亚洲国产成人久久综合一区| 亚洲国产欧美在线人成| 黄色成人在线观看| 中文日韩在线| 嫩草国产精品入口| 亚洲夜晚福利在线观看| 欧美成人免费va影院高清| 国产精品日韩精品欧美精品| 亚洲国产精品久久久久秋霞蜜臀| 欧美在线欧美在线| 一本色道久久综合亚洲精品不| 美女诱惑一区| 国内精品嫩模av私拍在线观看| 亚洲一区二区四区| 久久久久久九九九九| 久久免费一区| 亚洲尤物在线| 国产精品成人一区| 日韩亚洲精品视频| 欧美福利视频网站| 久久久久久久一区| 国产日本亚洲高清| 亚洲视屏一区| 亚洲乱码国产乱码精品精可以看 | 中国女人久久久| 欧美成人免费小视频| 性色av香蕉一区二区| 国产精品美女一区二区在线观看 | 亚洲欧美国内爽妇网| 亚洲高清资源| 久久久久久久波多野高潮日日| 国产欧美短视频| 久久在线视频| 国产欧美一区二区三区在线看蜜臀 | 99亚洲一区二区| 亚洲娇小video精品| 欧美电影免费观看网站| 亚洲品质自拍| 亚洲高清一区二| 欧美日韩 国产精品| 在线中文字幕不卡| 99国产精品久久久| 欧美成人一区二区在线| 国产日韩欧美在线视频观看| 久久国产精品第一页| 欧美资源在线| 亚洲国产高清一区二区三区| 亚洲大片免费看| 欧美精品久久久久a| 在线视频欧美日韩| 亚洲影院在线观看| 一区二区在线免费观看| 亚洲国产精品va在看黑人| 欧美日韩精品一本二本三本| 伊人男人综合视频网| 午夜在线精品偷拍| 久久国产精品99精品国产| 亚洲第一精品久久忘忧草社区| 亚洲福利一区| 国产精品视频免费观看www| 久久精品亚洲精品| 欧美freesex交免费视频| 亚洲一级二级| 久久久久国色av免费看影院 | 亚洲网站在线| 午夜精品亚洲| 亚洲精品视频一区二区三区| 亚洲一区综合| 亚洲啪啪91| 亚洲欧美综合另类中字| 一区二区三区在线看| 久久久久国产精品一区| 午夜免费久久久久| 激情婷婷欧美| 一本色道久久加勒比精品| 国产一区二区三区四区三区四| 欧美韩日精品| 一区二区黄色| 宅男噜噜噜66一区二区| 欧美亚洲免费电影| 一本在线高清不卡dvd| 久久亚洲电影| 亚洲激情偷拍| 久久av一区二区三区| 亚洲午夜一区二区三区| 亚洲一区二区高清| 亚洲国产精品久久久| 在线亚洲激情| 久久久久久夜精品精品免费| 亚洲欧美日韩区 | 欧美高清在线视频观看不卡| 欧美日韩情趣电影| 欧美国产精品日韩| 国产精品爱啪在线线免费观看| 亚洲视频免费在线观看| 女女同性精品视频| 免费国产自线拍一欧美视频| 国产乱子伦一区二区三区国色天香 | 欧美激情影院| 欧美激情在线有限公司| 精品91视频| 宅男在线国产精品| 国产精品九九| 99天天综合性| 一本久久综合亚洲鲁鲁| 欧美不卡视频| 免费不卡在线观看| 黑人巨大精品欧美黑白配亚洲 | 亚洲欧美日韩综合一区| 亚洲欧美欧美一区二区三区| 欧美日韩精品不卡| 久久国产成人| 欧美日韩精品在线| 久久久国产精品亚洲一区 | 久久免费精品日本久久中文字幕| 久久国产主播| 国内精品久久久久影院薰衣草| 欧美一区二区三区在线| 欧美中文在线观看| 欧美日韩精品一区二区在线播放 | 亚洲精品国产精品久久清纯直播 | 国产日韩精品视频一区| 亚洲欧美一级二级三级| 香蕉免费一区二区三区在线观看 | 牛人盗摄一区二区三区视频| 日韩午夜激情| 国产精品视频免费在线观看| 亚洲国产高清高潮精品美女| 在线亚洲一区| 国产日韩欧美在线看| 免费在线观看日韩欧美| 亚洲午夜精品视频| 免费一级欧美在线大片| 中日韩美女免费视频网址在线观看| 国产日韩综合一区二区性色av| 亚洲日本va在线观看| 久久九九有精品国产23| 亚洲最新中文字幕| 国外成人在线| 欧美先锋影音| 欧美国产欧美亚州国产日韩mv天天看完整| 中文欧美字幕免费| 欧美国产先锋| 久久精品女人| 亚洲夜间福利| 亚洲欧洲日夜超级视频| 国产午夜精品一区二区三区视频 | 欧美日韩精品是欧美日韩精品| 欧美中文字幕视频| 在线视频精品一区| 欧美激情精品久久久久久久变态| 欧美亚洲在线| 一区二区三区欧美亚洲| 亚洲国产高清在线| 国内视频精品| 国产日韩在线看| 国产精品亚洲美女av网站| 欧美私人啪啪vps| 欧美日本亚洲韩国国产| 欧美二区不卡| 免费亚洲婷婷| 久久精品国产77777蜜臀| 亚洲一区二区三区四区五区黄| 亚洲精品免费在线| 亚洲精品国产欧美| 亚洲精品视频免费在线观看| 亚洲第一主播视频| 欧美黄色视屏| 亚洲高清自拍| 欧美国产一区视频在线观看| 欧美国产一区二区在线观看 | 欧美日本在线播放| 欧美大片免费久久精品三p | 亚洲午夜在线视频| 一区二区精品| 正在播放亚洲一区| 午夜精品久久久久久久| 午夜精品久久久久久久久久久久久| 一本色道久久88综合日韩精品| 亚洲国产aⅴ天堂久久| 在线日本成人| 亚洲区第一页| 亚洲人久久久| 国产亚洲欧美在线| 国产欧美日韩不卡免费| 欧美国产日韩a欧美在线观看| 欧美丰满少妇xxxbbb| 免播放器亚洲一区| 老司机午夜精品视频| 欧美福利视频在线| 欧美精品色一区二区三区| 欧美精品播放| 欧美高清在线视频观看不卡| 免费在线国产精品| 欧美性理论片在线观看片免费|