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

Cpper
C/C++高級工程師 Android高級軟件工程師 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) 評論(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| 亚洲午夜日本在线观看| 亚洲一区日韩| 久久精品视频va| 女人天堂亚洲aⅴ在线观看| 亚洲国产成人av在线| 欧美大片在线看免费观看| 亚洲卡通欧美制服中文| 亚洲男人天堂2024| 久热爱精品视频线路一| 欧美日韩ab| 国产精品亚洲аv天堂网| 尤物九九久久国产精品的特点| 91久久中文字幕| 欧美一区二区精品久久911| 久久欧美肥婆一二区| 亚洲精品一区二区三区在线观看| 亚洲深夜影院| 免播放器亚洲一区| 在线观看日韩av电影| 一本色道久久| 欧美一区网站| 欧美黄色免费| 国产亚洲欧美日韩美女| 一本久久综合| 久久综合网色—综合色88| 亚洲美女黄网| 两个人的视频www国产精品| 国产精品麻豆欧美日韩ww| 亚洲人成网站色ww在线| 美女网站在线免费欧美精品| 亚洲视频欧美视频| 欧美精品xxxxbbbb| 激情成人在线视频| 午夜影院日韩| 99精品国产在热久久| 久久综合福利| 国产一区二区中文字幕免费看| 一本久久a久久精品亚洲| 欧美v国产在线一区二区三区| 亚洲欧美激情视频| 国产精品成人在线观看| 一区二区高清在线| 亚洲二区视频在线| 久久亚洲国产成人| 韩国自拍一区| 久久久久久亚洲精品杨幂换脸| 亚洲视屏一区| 国产精品久久7| 亚洲视频自拍偷拍| 亚洲精品乱码久久久久久按摩观| 久久在线视频| 亚洲国产中文字幕在线观看| 老巨人导航500精品| 久久成人在线| 在线观看精品一区| 女仆av观看一区| 欧美aaaaaaaa牛牛影院| 亚洲国内高清视频| 亚洲激情综合| 欧美日韩精品伦理作品在线免费观看| 亚洲黄色影片| 亚洲伦理在线观看| 欧美日韩综合在线免费观看| 亚洲社区在线观看| 一区二区日韩免费看| 国产精品久久久久久久久免费桃花 | 亚洲美女在线视频| 国产精品多人| 久久久久久久久岛国免费| 午夜精品久久久久久久99水蜜桃| 国产欧美精品xxxx另类| 国产精品日本精品| 狠狠色狠狠色综合日日五| 亚洲一级影院| 亚洲综合999| 一区二区三区在线高清| 免费成人毛片| 欧美日韩国产综合新一区| 亚洲一二三区视频在线观看| 亚洲女女做受ⅹxx高潮| 1000部国产精品成人观看| 最新成人av在线| 国产精品尤物福利片在线观看| 久久精品天堂| 欧美另类在线播放| 久久久精品一区| 欧美高清视频一区二区三区在线观看| 在线午夜精品自拍| 久久精品亚洲一区二区| 夜色激情一区二区| 久久国产88| 亚洲一区二区三区欧美| 久久狠狠一本精品综合网| 日韩亚洲欧美在线观看| 午夜精品在线看| 日韩亚洲欧美中文三级| 欧美一区二区视频在线观看2020| 亚洲日本欧美日韩高观看| 亚洲欧美日本日韩| 99精品免费| 久久久人人人| 欧美综合二区| 欧美日韩色一区| 欧美岛国激情| 国产亚洲一区在线| 一区二区三区欧美亚洲| 亚洲欧洲另类| 久久精品一区二区三区四区| 亚洲欧美视频| 欧美日一区二区三区在线观看国产免| 久久在线免费视频| 国产毛片一区二区| avtt综合网| a4yy欧美一区二区三区| 久久日韩精品| 欧美一区二视频在线免费观看| 欧美日韩不卡合集视频| 欧美国产日韩一区| 在线不卡亚洲| 久久久久久穴| 久久亚洲视频| 国产专区一区| 欧美综合77777色婷婷| 欧美一区2区视频在线观看| 欧美性猛交xxxx免费看久久久| 亚洲精品国产拍免费91在线| 91久久国产综合久久| 久久久久国产精品厨房| 久久午夜电影| 在线观看福利一区| 蜜桃久久av一区| 亚洲成色精品| 亚洲人成网站在线播| 免费亚洲婷婷| 亚洲欧洲一区二区在线播放| 最新国产乱人伦偷精品免费网站 | 亚洲美女视频在线观看| 亚洲高清免费在线| 久久亚洲精品一区二区| 美女成人午夜| 亚洲欧洲精品一区二区三区 | 欧美电影免费| 亚洲免费av网站| 小处雏高清一区二区三区| 国产精品极品美女粉嫩高清在线 | 最新精品在线| 夜夜嗨av色一区二区不卡| 欧美日韩一区不卡| 一区二区三欧美| 久久精品国产免费看久久精品| 国产一区二区在线观看免费播放 | 亚洲最新在线| 午夜欧美大片免费观看| 国产一区二区三区四区在线观看 | 亚洲视频免费在线| 久久国产精品久久精品国产| 国产亚洲午夜高清国产拍精品| 久久女同互慰一区二区三区| 亚洲电影第1页| 亚洲欧美日韩另类| 狠狠色狠狠色综合日日小说| 欧美91视频| 午夜国产精品视频免费体验区| 麻豆freexxxx性91精品| 日韩性生活视频| 国外成人在线| 欧美日韩在线影院| 久久精品国产69国产精品亚洲| 亚洲第一中文字幕| 香港成人在线视频| 91久久久精品| 国产偷国产偷亚洲高清97cao| 久久综合九色综合欧美狠狠| 日韩视频三区| 免费的成人av| 午夜免费久久久久| 99国产精品久久久久久久久久 | 久久久久久久999精品视频| 最新精品在线| 国产主播精品| 国产精品毛片在线| 欧美国产综合一区二区| 午夜精品一区二区三区在线视 | 亚洲国产天堂网精品网站| 欧美一区二区三区日韩| 亚洲日本在线观看| 韩日成人在线| 亚洲欧美另类综合偷拍| 国产精品视频精品| 欧美精品一区在线播放| 亚洲欧美日韩中文视频| 亚洲另类视频| 亚洲人成在线观看一区二区 | 亚洲看片网站| 亚洲人成网站影音先锋播放|