#ifndef _DEFILE_H
#define _DEFILE_H
/*-------------------------------------------------------------------------
* drawElements Utility 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 File abstraction.
*//*--------------------------------------------------------------------*/
#include "deDefs.h"
DE_BEGIN_EXTERN_C
/* File types. */
typedef struct deFile_s deFile;
typedef enum deFileMode_e
{
DE_FILEMODE_READ = (1<<0), /*!< Read access to file. */
DE_FILEMODE_WRITE = (1<<2), /*!< Write access to file. */
DE_FILEMODE_CREATE = (1<<3), /*!< Create file if it doesn't exist. Requires DE_FILEMODE_WRITE. */
DE_FILEMODE_OPEN = (1<<4), /*!< Open file if it exists. */
DE_FILEMODE_TRUNCATE = (1<<5) /*!< Truncate content of file. Requires DE_FILEMODE_OPEN. */
} deFileMode;
typedef enum deFileFlag_e
{
DE_FILE_NONBLOCKING = (1<<0), /*!< Set to non-blocking mode. Not supported on Win32! */
DE_FILE_CLOSE_ON_EXEC = (1<<1)
} deFileFlag;
typedef enum deFileResult_e
{
DE_FILERESULT_SUCCESS = 0,
DE_FILERESULT_END_OF_FILE = 1,
DE_FILERESULT_WOULD_BLOCK = 2,
DE_FILERESULT_ERROR = 3,
DE_FILERESULT_LAST
} deFileResult;
typedef enum deFilePosition_e
{
DE_FILEPOSITION_BEGIN = 0,
DE_FILEPOSITION_END = 1,
DE_FILEPOSITION_CURRENT = 2,
DE_FILEPOSITION_LAST
} deFilePosition;
/* File API. */
deBool deFileExists (const char* filename);
deBool deDeleteFile (const char* filename);
deFile* deFile_create (const char* filename, deUint32 mode);
deFile* deFile_createFromHandle (deUintptr handle);
void deFile_destroy (deFile* file);
deBool deFile_setFlags (deFile* file, deUint32 flags);
deInt64 deFile_getPosition (const deFile* file);
deBool deFile_seek (deFile* file, deFilePosition base, deInt64 offset);
deInt64 deFile_getSize (const deFile* file);
deFileResult deFile_read (deFile* file, void* buf, deInt64 bufSize, deInt64* numRead);
deFileResult deFile_write (deFile* file, const void* buf, deInt64 bufSize, deInt64* numWritten);
DE_END_EXTERN_C
#endif /* _DEFILE_H */