You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.4 KiB
149 lines
4.4 KiB
#ifndef _DEIOSTREAM_H
|
|
#define _DEIOSTREAM_H
|
|
/*-------------------------------------------------------------------------
|
|
* drawElements Stream Library
|
|
* ---------------------------
|
|
*
|
|
* Copyright 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief Input-output stream abstraction.
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "deDefs.h"
|
|
|
|
DE_BEGIN_EXTERN_C
|
|
|
|
/* Result of operation on stream */
|
|
typedef enum deStreamResult_e
|
|
{
|
|
DE_STREAMRESULT_SUCCESS = 0,
|
|
DE_STREAMRESULT_END_OF_STREAM,
|
|
DE_STREAMRESULT_ERROR,
|
|
|
|
DE_STREAMRESULT_LAST
|
|
} deStreamResult;
|
|
|
|
typedef enum deStreamStatus_e
|
|
{
|
|
DE_STREAMSTATUS_GOOD = 0,
|
|
DE_STREAMSTATUS_ERROR,
|
|
|
|
DE_STREAMSTATUS_LAST
|
|
} deStreamStatus;
|
|
|
|
/* Type for pointer to internal stream psecifig data */
|
|
typedef void deStreamData;
|
|
|
|
/* Function types for v_table */
|
|
typedef deStreamResult (*deIOStreamReadFunc) (deStreamData* stream, void* buf, deInt32 bufSize, deInt32* numRead);
|
|
typedef deStreamResult (*deIOStreamWriteFunc) (deStreamData* stream, const void* buf, deInt32 bufSize, deInt32* numWritten);
|
|
typedef const char* (*deIOStreamGetErrorFunc) (deStreamData* stream);
|
|
typedef deStreamResult (*deIOStreamFlushFunc) (deStreamData* stream);
|
|
typedef deStreamResult (*deIOStreamDeinitFunc) (deStreamData* stream);
|
|
typedef deStreamStatus (*deIOStreamStatusFunc) (deStreamData* stream);
|
|
|
|
/* Virtual table type for specifying stream specifig behaviour */
|
|
typedef struct deIOStreamVFTable_s
|
|
{
|
|
deIOStreamReadFunc readFunc;
|
|
deIOStreamWriteFunc writeFunc;
|
|
deIOStreamGetErrorFunc getErrorFunc;
|
|
deIOStreamFlushFunc flushFunc;
|
|
deIOStreamDeinitFunc deinitFunc;
|
|
deIOStreamStatusFunc statusFunc;
|
|
} deIOStreamVFTable;
|
|
|
|
/* Generig IOStream struct */
|
|
typedef struct deIOStream_s
|
|
{
|
|
deStreamData* streamData;
|
|
const deIOStreamVFTable* vfTable;
|
|
} deIOStream;
|
|
|
|
DE_INLINE deStreamResult deIOStream_read (deIOStream* stream, void* buf, deInt32 bufSize, deInt32* numRead);
|
|
DE_INLINE deStreamResult deIOStream_write (deIOStream* stream, const void* buf, deInt32 bufSize, deInt32* numWritten);
|
|
DE_INLINE const char* deIOStream_getError (deIOStream* stream);
|
|
DE_INLINE deStreamStatus deIOStream_getStatus (deIOStream* stream);
|
|
DE_INLINE deStreamResult deIOStream_flush (deIOStream* stream);
|
|
DE_INLINE deStreamResult deIOStream_deinit (deIOStream* stream);
|
|
|
|
|
|
|
|
DE_INLINE deStreamResult deIOStream_write (deIOStream* stream, const void* buf, deInt32 bufSize, deInt32* numWritten)
|
|
{
|
|
DE_ASSERT(stream);
|
|
DE_ASSERT(stream->vfTable);
|
|
DE_ASSERT(stream->vfTable->writeFunc);
|
|
|
|
return stream->vfTable->writeFunc(stream->streamData, buf, bufSize, numWritten);
|
|
}
|
|
|
|
DE_INLINE deStreamResult deIOStream_read (deIOStream* stream, void* buf, deInt32 bufSize, deInt32* numRead)
|
|
{
|
|
DE_ASSERT(stream);
|
|
DE_ASSERT(stream->vfTable);
|
|
DE_ASSERT(stream->vfTable->readFunc);
|
|
|
|
return stream->vfTable->readFunc(stream->streamData, buf, bufSize, numRead);
|
|
}
|
|
|
|
DE_INLINE const char* deIOStream_getError (deIOStream* stream)
|
|
{
|
|
DE_ASSERT(stream);
|
|
DE_ASSERT(stream->vfTable);
|
|
DE_ASSERT(stream->vfTable->getErrorFunc);
|
|
|
|
return stream->vfTable->getErrorFunc(stream->streamData);
|
|
}
|
|
|
|
DE_INLINE deStreamResult deIOStream_flush (deIOStream* stream)
|
|
{
|
|
DE_ASSERT(stream);
|
|
DE_ASSERT(stream->vfTable);
|
|
DE_ASSERT(stream->vfTable->flushFunc);
|
|
|
|
return stream->vfTable->flushFunc(stream->streamData);
|
|
}
|
|
|
|
DE_INLINE deStreamResult deIOStream_deinit (deIOStream* stream)
|
|
{
|
|
deStreamResult result = DE_STREAMRESULT_ERROR;
|
|
DE_ASSERT(stream);
|
|
DE_ASSERT(stream->vfTable);
|
|
DE_ASSERT(stream->vfTable->deinitFunc);
|
|
|
|
result = stream->vfTable->deinitFunc(stream->streamData);
|
|
|
|
stream->vfTable = DE_NULL;
|
|
stream->streamData = DE_NULL;
|
|
|
|
return result;
|
|
}
|
|
|
|
DE_INLINE deStreamStatus deIOStream_getStatus (deIOStream* stream)
|
|
{
|
|
DE_ASSERT(stream);
|
|
DE_ASSERT(stream->vfTable);
|
|
DE_ASSERT(stream->vfTable->statusFunc);
|
|
|
|
return stream->vfTable->statusFunc(stream->streamData);
|
|
}
|
|
|
|
DE_END_EXTERN_C
|
|
|
|
#endif /* _DEIOSTREAM_H */
|