/*---------------------------------------------------------------------------* Project: NintendoWare File: io_FileStream.cpp Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo and/or its licensed developers and are protected by national and international copyright laws. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. The content herein is highly confidential and should be handled accordingly. $Revision: 31311 $ *---------------------------------------------------------------------------*/ #include "precompiled.h" #include #include #include #include #include namespace nw { namespace io { NW_UT_RUNTIME_TYPEINFO_DEFINITION(FileStream,IOStream); /*!--------------------------------------------------------------------------* Name: FileStream::Seek @brief ファイルポインタの移動 @param[in] offset ファイルポインタ移動値を指定します。 @param[in] origin ファイルポインタ移動の基準点を指定します。 FILE_STREAM_SEEK_BEGIN - ファイルの先頭を基準 FILE_STREAM_SEEK_CURRENT - 現在の読み込み位置を基準 FILE_STREAM_SEEK_END - ファイルの終端を基準(offset <= 0で指定されるはずです) @return None. *---------------------------------------------------------------------------*/ void FileStream::Seek( s32 /*offset*/, u32 /*origin*/ ) { NW_ASSERTMSG( CanSeek(), "Stream don't support SEEK function\n" ); } /*!--------------------------------------------------------------------------* Name: FileStream::Cancel @brief 非同期処理をキャンセルします。(同期関数) @return None. *---------------------------------------------------------------------------*/ void FileStream::Cancel( void ) { NW_ASSERTMSG( CanCancel(), "Stream don't support CANCEL function\n" ); } /*!--------------------------------------------------------------------------* Name: FileStream::CancelAsync @brief 非同期処理をキャンセルします。(非同期関数) @param[in] callback @param[in] arg @return コマンドが正常に発行された場合には真を返します。 発行されなかった場合には偽を返します。 *---------------------------------------------------------------------------*/ bool FileStream::CancelAsync( IOStreamCallback /*callback*/, void* /*arg*/ ) { NW_ASSERTMSG( CanCancel(), "Stream don't support CANCEL function\n" ); NW_ASSERTMSG( CanAsync(), "Stream don't support ASYNC function\n" ); return true; } /*!--------------------------------------------------------------------------* Name: FileStream::FilePosition::Skip @brief ファイルポインタの移動。 ファイルの終端を越えた場合には、ファイルポインタは終端位置を示します。 @param[in] offset ファイルポインタ移動オフセット @return 移動後のファイル位置を返します。 *---------------------------------------------------------------------------*/ u32 FileStream::FilePosition::Skip( s32 offset ) { if ( offset != 0 ) { s64 position = mPosition + offset; position = ut::Clamp( position, static_cast(0), static_cast(mFileSize) ); mPosition = static_cast(position); } return mPosition; } /*!--------------------------------------------------------------------------* Name: FileStream::FilePosition::Append @brief データ追加によるファイルポインタの移動。 ファイルの終端を越えた場合には、その分ファイルサイズを増加します。 @param[in] offset ファイルポインタ移動オフセット @return 移動後のファイル位置を返します。 *---------------------------------------------------------------------------*/ u32 FileStream::FilePosition::Append( s32 offset ) { s64 position = mPosition + offset; if ( position < 0 ) { mPosition = 0; } else { mPosition = static_cast(position); mFileSize = ut::Max( mPosition, mFileSize ); } return mPosition; } /*!--------------------------------------------------------------------------* Name: FileStream::FilePosition::Seek @brief ファイルポインタの移動 @param[in] offset ファイルポインタ移動値を指定します。 @param[in] origin ファイルポインタ移動の基準点を指定します。 FILE_STREAM_SEEK_BEGIN - ファイルの先頭を基準 FILE_STREAM_SEEK_CURRENT - 現在の読み込み位置を基準 FILE_STREAM_SEEK_END - ファイルの終端を基準(offset <= 0で指定されるはずです) @return None. *---------------------------------------------------------------------------*/ void FileStream::FilePosition::Seek( s32 offset, u32 origin ) { switch ( origin ) { case FILE_STREAM_SEEK_BEGIN: mPosition = 0; break; case FILE_STREAM_SEEK_CURRENT: break; case FILE_STREAM_SEEK_END: mPosition = mFileSize; break; } (void)Skip( offset ); } } /* namespace io */ } /* namespace nw */