Fixed: Warnings, throw(type) deprecated in C++11 and removed in C++17

--HG--
branch : develop
This commit is contained in:
kervala 2018-08-08 20:54:09 +02:00
parent 675f85c288
commit c4888b2d5b
24 changed files with 55 additions and 55 deletions

View file

@ -226,7 +226,7 @@ public:
std::string toString() { if(Ptr) return toString(*Ptr); else return "<null>"; } std::string toString() { if(Ptr) return toString(*Ptr); else return "<null>"; }
// serial using serialPtr // serial using serialPtr
void serialPtr(NLMISC::IStream &f) throw(NLMISC::EStream ) void serialPtr(NLMISC::IStream &f)
{ {
T* obj= NULL; T* obj= NULL;
if(f.isReading()) if(f.isReading())
@ -242,7 +242,7 @@ public:
} }
} }
// serial using serialPloyPtr // serial using serialPloyPtr
void serialPolyPtr(NLMISC::IStream &f) throw(NLMISC::EStream ) void serialPolyPtr(NLMISC::IStream &f)
{ {
T* obj= NULL; T* obj= NULL;
if(f.isReading()) if(f.isReading())
@ -337,7 +337,7 @@ public:
void kill(); void kill();
// serial using serialPloyPtr // serial using serialPloyPtr
void serialPolyPtr(NLMISC::IStream &f) throw(NLMISC::EStream ) void serialPolyPtr(NLMISC::IStream &f)
{ {
T* obj= NULL; T* obj= NULL;
if(f.isReading()) if(f.isReading())

View file

@ -1328,7 +1328,7 @@ const D3DFORMAT FinalPixelFormat[ITexture::UploadFormatCount][CDriverD3D::FinalP
// *************************************************************************** // ***************************************************************************
bool CDriverD3D::setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool resizeable) throw(EBadDisplay) bool CDriverD3D::setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool resizeable)
{ {
H_AUTO_D3D(CDriver3D_setDisplay); H_AUTO_D3D(CDriver3D_setDisplay);

View file

@ -611,7 +611,7 @@ void CDriverGL::setWindowIcon(const std::vector<NLMISC::CBitmap> &bitmaps)
} }
// -------------------------------------------------- // --------------------------------------------------
bool CDriverGL::setDisplay(nlWindow wnd, const GfxMode &mode, bool show, bool resizeable) throw(EBadDisplay) bool CDriverGL::setDisplay(nlWindow wnd, const GfxMode &mode, bool show, bool resizeable)
{ {
H_AUTO_OGL(CDriverGL_setDisplay) H_AUTO_OGL(CDriverGL_setDisplay)

View file

@ -77,7 +77,7 @@ extern IDriver* createGlEsDriverInstance ();
#endif #endif
// *************************************************************************** // ***************************************************************************
IDriver *CDRU::createGlDriver() throw (EDru) IDriver *CDRU::createGlDriver()
{ {
#ifdef NL_STATIC #ifdef NL_STATIC
@ -131,7 +131,7 @@ IDriver *CDRU::createGlDriver() throw (EDru)
} }
// *************************************************************************** // ***************************************************************************
IDriver *CDRU::createGlEsDriver() throw (EDru) IDriver *CDRU::createGlEsDriver()
{ {
#ifdef NL_STATIC #ifdef NL_STATIC
@ -188,7 +188,7 @@ IDriver *CDRU::createGlEsDriver() throw (EDru)
#ifdef NL_OS_WINDOWS #ifdef NL_OS_WINDOWS
IDriver *CDRU::createD3DDriver() throw (EDru) IDriver *CDRU::createD3DDriver()
{ {
#ifdef NL_STATIC #ifdef NL_STATIC

View file

@ -2423,7 +2423,7 @@ void CLandscape::checkZoneBinds(CZone &curZone, EBadBind &bindError)
// *************************************************************************** // ***************************************************************************
void CLandscape::checkBinds() throw(EBadBind) void CLandscape::checkBinds()
{ {
EBadBind bindError; EBadBind bindError;
@ -2439,7 +2439,7 @@ void CLandscape::checkBinds() throw(EBadBind)
// *************************************************************************** // ***************************************************************************
void CLandscape::checkBinds(uint16 zoneId) throw(EBadBind) void CLandscape::checkBinds(uint16 zoneId)
{ {
EBadBind bindError; EBadBind bindError;

View file

@ -51,7 +51,7 @@ CEventServer CNELU::EventServer;
CEventListenerAsync CNELU::AsyncListener; CEventListenerAsync CNELU::AsyncListener;
bool CNELU::initDriver (uint w, uint h, uint bpp, bool windowed, nlWindow systemWindow, bool offscreen, bool direct3d) throw(EDru) bool CNELU::initDriver (uint w, uint h, uint bpp, bool windowed, nlWindow systemWindow, bool offscreen, bool direct3d)
{ {
// Init debug system // Init debug system
// NLMISC::InitDebug(); // NLMISC::InitDebug();
@ -183,7 +183,7 @@ void CNELU::releaseDriver()
} }
} }
bool CNELU::init (uint w, uint h, CViewport viewport, uint bpp, bool windowed, nlWindow systemWindow, bool offscreen, bool direct3d) throw(EDru) bool CNELU::init (uint w, uint h, CViewport viewport, uint bpp, bool windowed, nlWindow systemWindow, bool offscreen, bool direct3d)
{ {
NL3D::registerSerial3d(); NL3D::registerSerial3d();
if (initDriver(w,h,bpp,windowed,systemWindow,offscreen,direct3d)) if (initDriver(w,h,bpp,windowed,systemWindow,offscreen,direct3d))

View file

@ -1434,7 +1434,7 @@ namespace NLGUI
} }
// *************************************************************************** // ***************************************************************************
void CLuaIHM::luaValueToReflectedProperty(CLuaState &ls, int stackIndex, CReflectable &target, const CReflectedProperty &property) throw(ELuaIHMException) void CLuaIHM::luaValueToReflectedProperty(CLuaState &ls, int stackIndex, CReflectable &target, const CReflectedProperty &property)
{ {
//H_AUTO(Lua_property_throw) //H_AUTO(Lua_property_throw)
if(ls.isNil(stackIndex)) if(ls.isNil(stackIndex))

View file

@ -222,7 +222,7 @@ namespace NLGUI
} }
// ************************************************* // *************************************************
CLuaEnumeration CLuaObject::enumerate() throw(ELuaNotATable) CLuaEnumeration CLuaObject::enumerate()
{ {
if (!isEnumerable()) if (!isEnumerable())
{ {
@ -317,7 +317,7 @@ namespace NLGUI
} }
// ************************************************* // *************************************************
void CLuaObject::setNil(const char *key) throw(ELuaNotATable) void CLuaObject::setNil(const char *key)
{ {
nlassert(key); nlassert(key);
nlassert(isValid()); nlassert(isValid());

View file

@ -401,7 +401,7 @@ bool CIFile::eof ()
} }
// ====================================================================================================== // ======================================================================================================
void CIFile::serialBuffer(uint8 *buf, uint len) throw(EReadError) void CIFile::serialBuffer(uint8 *buf, uint len)
{ {
if (len == 0) if (len == 0)
return; return;
@ -444,7 +444,7 @@ void CIFile::serialBuffer(uint8 *buf, uint len) throw(EReadError)
} }
// ====================================================================================================== // ======================================================================================================
void CIFile::serialBit(bool &bit) throw(EReadError) void CIFile::serialBit(bool &bit)
{ {
// Simple for now. // Simple for now.
uint8 v=bit; uint8 v=bit;
@ -485,7 +485,7 @@ bool CIFile::seek (sint32 offset, IStream::TSeekOrigin origin) const
} }
// ====================================================================================================== // ======================================================================================================
sint32 CIFile::getPos () const throw(EStream) sint32 CIFile::getPos () const
{ {
return _ReadPos; return _ReadPos;
} }
@ -652,7 +652,7 @@ void COFile::flush()
// ====================================================================================================== // ======================================================================================================
void COFile::serialBuffer(uint8 *buf, uint len) throw(EWriteError) void COFile::serialBuffer(uint8 *buf, uint len)
{ {
if(!_F) if(!_F)
throw EFileNotOpened(_FileName); throw EFileNotOpened(_FileName);
@ -667,14 +667,14 @@ void COFile::serialBuffer(uint8 *buf, uint len) throw(EWriteError)
} }
} }
// ====================================================================================================== // ======================================================================================================
void COFile::serialBit(bool &bit) throw(EWriteError) void COFile::serialBit(bool &bit)
{ {
// Simple for now. // Simple for now.
uint8 v=bit; uint8 v=bit;
serialBuffer(&v, 1); serialBuffer(&v, 1);
} }
// ====================================================================================================== // ======================================================================================================
bool COFile::seek (sint32 offset, IStream::TSeekOrigin origin) const throw(EStream) bool COFile::seek (sint32 offset, IStream::TSeekOrigin origin) const
{ {
if (_F) if (_F)
{ {
@ -701,7 +701,7 @@ bool COFile::seek (sint32 offset, IStream::TSeekOrigin origin) const throw(EStr
return false; return false;
} }
// ====================================================================================================== // ======================================================================================================
sint32 COFile::getPos () const throw(EStream) sint32 COFile::getPos () const
{ {
if (_F) if (_F)
{ {

View file

@ -211,7 +211,7 @@ void CStaticStringMapper::clear()
} }
// **************************************************************************** // ****************************************************************************
void CStaticStringMapper::serial(IStream &f, TSStringId &strId) throw(EStream) void CStaticStringMapper::serial(IStream &f, TSStringId &strId)
{ {
std::string tmp; std::string tmp;
if (f.isReading()) if (f.isReading())
@ -227,7 +227,7 @@ void CStaticStringMapper::serial(IStream &f, TSStringId &strId) throw(EStream)
} }
// **************************************************************************** // ****************************************************************************
void CStaticStringMapper::serial(IStream &f, std::vector<TSStringId> &strIdVect) throw(EStream) void CStaticStringMapper::serial(IStream &f, std::vector<TSStringId> &strIdVect)
{ {
std::vector<std::string> vsTmp; std::vector<std::string> vsTmp;
std::string sTmp; std::string sTmp;

View file

@ -397,7 +397,7 @@ namespace NLNET
} }
void CModuleBase::plugModule(IModuleSocket *moduleSocket) throw (EModuleAlreadyPluggedHere) void CModuleBase::plugModule(IModuleSocket *moduleSocket)
{ {
CModuleSocket *sock = dynamic_cast<CModuleSocket*>(moduleSocket); CModuleSocket *sock = dynamic_cast<CModuleSocket*>(moduleSocket);
nlassert(sock != NULL); nlassert(sock != NULL);
@ -415,7 +415,7 @@ namespace NLNET
_ModuleSockets.insert(moduleSocket); _ModuleSockets.insert(moduleSocket);
} }
void CModuleBase::unplugModule(IModuleSocket *moduleSocket) throw (EModuleNotPluggedHere) void CModuleBase::unplugModule(IModuleSocket *moduleSocket)
{ {
CModuleSocket *sock = dynamic_cast<CModuleSocket*>(moduleSocket); CModuleSocket *sock = dynamic_cast<CModuleSocket*>(moduleSocket);
nlassert(sock != NULL); nlassert(sock != NULL);
@ -443,7 +443,7 @@ namespace NLNET
* The call is blocking until receptions of the operation * The call is blocking until receptions of the operation
* result message (or a module down) * result message (or a module down)
*/ */
void CModuleBase::invokeModuleOperation(IModuleProxy *destModule, const NLNET::CMessage &opMsg, NLNET::CMessage &resultMsg) throw (EInvokeFailed) void CModuleBase::invokeModuleOperation(IModuleProxy *destModule, const NLNET::CMessage &opMsg, NLNET::CMessage &resultMsg)
{ {
H_AUTO(CModuleBase_invokeModuleOperation); H_AUTO(CModuleBase_invokeModuleOperation);

View file

@ -184,13 +184,13 @@ namespace NLNET
} }
} }
void onCommand(const CMessage &/* command */) throw (EInvalidCommand) void onCommand(const CMessage &/* command */)
{ {
// nothing done for now // nothing done for now
throw EInvalidCommand(); throw EInvalidCommand();
} }
/// The gateway send a textual command to the transport /// The gateway send a textual command to the transport
bool onCommand(const TParsedCommandLine &command) throw (EInvalidCommand) bool onCommand(const TParsedCommandLine &command)
{ {
if (command.SubParams.size() < 1) if (command.SubParams.size() < 1)
throw EInvalidCommand(); throw EInvalidCommand();
@ -218,7 +218,7 @@ namespace NLNET
} }
/// Open the server by starting listing for incoming connection on the specified port /// Open the server by starting listing for incoming connection on the specified port
void openServer(uint16 port) throw (ETransportError) void openServer(uint16 port)
{ {
if (_CallbackServer.get() != NULL) if (_CallbackServer.get() != NULL)
throw ETransportError("openServer : The server is already open"); throw ETransportError("openServer : The server is already open");
@ -607,13 +607,13 @@ namespace NLNET
} }
} }
void onCommand(const CMessage &/* command */) throw (EInvalidCommand) void onCommand(const CMessage &/* command */)
{ {
// nothing done for now // nothing done for now
throw EInvalidCommand(); throw EInvalidCommand();
} }
/// The gateway send a textual command to the transport /// The gateway send a textual command to the transport
bool onCommand(const TParsedCommandLine &command) throw (EInvalidCommand) bool onCommand(const TParsedCommandLine &command)
{ {
if (command.SubParams.size() < 1) if (command.SubParams.size() < 1)
throw EInvalidCommand(); throw EInvalidCommand();

View file

@ -218,13 +218,13 @@ namespace NLNET
} }
} }
void onCommand(const CMessage &/* command */) throw (EInvalidCommand) void onCommand(const CMessage &/* command */)
{ {
// nothing done for now // nothing done for now
throw EInvalidCommand(); throw EInvalidCommand();
} }
/// The gateway send a textual command to the transport /// The gateway send a textual command to the transport
bool onCommand(const TParsedCommandLine &command) throw (EInvalidCommand) bool onCommand(const TParsedCommandLine &command)
{ {
if (command.SubParams.size() < 1) if (command.SubParams.size() < 1)
throw EInvalidCommand(); throw EInvalidCommand();
@ -255,7 +255,7 @@ namespace NLNET
/// Open the server by establishing route with all known services /// Open the server by establishing route with all known services
void open(const std::string &subNetName) throw (ETransportError) void open(const std::string &subNetName)
{ {
H_AUTO(L5_open); H_AUTO(L5_open);

View file

@ -186,7 +186,7 @@ public:
* *
* \return pointer to new node, or NULL if already inserted * \return pointer to new node, or NULL if already inserted
*/ */
CNode *addNode(const std::string &filenameWithFullPath) throw( NLMISC::Exception); CNode *addNode(const std::string &filenameWithFullPath);
// remove a node by its index // remove a node by its index
void removeNode(uint index); void removeNode(uint index);
// remove a node by its pointer // remove a node by its pointer

View file

@ -1066,7 +1066,7 @@ void CFightScript::add(CFightScriptCompReader *reader)
} }
CFightScriptCompReader *CFightScriptCompReader::getScriptReader (const string &str) throw (ReadFightActionException) CFightScriptCompReader *CFightScriptCompReader::getScriptReader (const string &str)
{ {
CFightScript::TFightScriptMap::iterator it=CFightScript::_ScriptCompList.find(str); CFightScript::TFightScriptMap::iterator it=CFightScript::_ScriptCompList.find(str);
if (it==CFightScript::_ScriptCompList.end()) if (it==CFightScript::_ScriptCompList.end())

View file

@ -1279,7 +1279,7 @@ static void displayErrorLinesForIndex(const string &text, size_t &index)
} }
bool CCompiler::getNextToken(const string &text, size_t &index, string &tokenName, string &textValue) throw (EScriptError) bool CCompiler::getNextToken(const string &text, size_t &index, string &tokenName, string &textValue)
{ {
char c=text.at(index); char c=text.at(index);
while (c==' '||c=='\n'||c=='\r'||c=='\t') // to avoid blanks, returns and Tabs. while (c==' '||c=='\n'||c=='\r'||c=='\t') // to avoid blanks, returns and Tabs.

View file

@ -394,7 +394,7 @@ void CEntityBase::setTarget( const NLMISC::CEntityId& targetId, bool sendMessage
// lookupStat : // lookupStat :
// //
//--------------------------------------------------- //---------------------------------------------------
sint32& CEntityBase::lookupStat( const string& var ) throw (CEntityBase::EInvalidStat) sint32& CEntityBase::lookupStat( const string& var)
{ {
// TODO Alain: optimize this... // TODO Alain: optimize this...
uint i; uint i;
@ -562,7 +562,7 @@ sint32& CEntityBase::lookupStat( const string& var ) throw (CEntityBase::EInvali
// lookupStat for Characteristics: // lookupStat for Characteristics:
// //
//--------------------------------------------------- //---------------------------------------------------
sint32& CEntityBase::lookupStat( CHARACTERISTICS::TCharacteristics c, SCharacteristicsAndScores::TCharacteristicsAndScoreSubType st ) throw (CEntityBase::EInvalidStat) sint32& CEntityBase::lookupStat( CHARACTERISTICS::TCharacteristics c, SCharacteristicsAndScores::TCharacteristicsAndScoreSubType st)
{ {
if( c < CHARACTERISTICS::NUM_CHARACTERISTICS ) if( c < CHARACTERISTICS::NUM_CHARACTERISTICS )
{ {
@ -601,7 +601,7 @@ sint32& CEntityBase::lookupStat( CHARACTERISTICS::TCharacteristics c, SCharacter
// lookupStat for Scores: // lookupStat for Scores:
// //
//--------------------------------------------------- //---------------------------------------------------
sint32& CEntityBase::lookupStat( SCORES::TScores score, SCharacteristicsAndScores::TCharacteristicsAndScoreSubType st ) throw (CEntityBase::EInvalidStat) sint32& CEntityBase::lookupStat( SCORES::TScores score, SCharacteristicsAndScores::TCharacteristicsAndScoreSubType st)
{ {
if( score < SCORES::NUM_SCORES ) if( score < SCORES::NUM_SCORES )
{ {
@ -640,7 +640,7 @@ sint32& CEntityBase::lookupStat( SCORES::TScores score, SCharacteristicsAndScore
// lookupStat for Skills: // lookupStat for Skills:
// //
//--------------------------------------------------- //---------------------------------------------------
sint32& CEntityBase::lookupStat( SKILLS::ESkills skill, SSkill::ESkillSubType st ) throw (CEntityBase::EInvalidStat) sint32& CEntityBase::lookupStat( SKILLS::ESkills skill, SSkill::ESkillSubType st)
{ {
/* enum ESkillSubType /* enum ESkillSubType
{ {
@ -675,7 +675,7 @@ sint32& CEntityBase::lookupStat( SKILLS::ESkills skill, SSkill::ESkillSubType st
// lookupStat for SpecialModifiers: // lookupStat for SpecialModifiers:
// //
//--------------------------------------------------- //---------------------------------------------------
sint32& CEntityBase::lookupStat( CSpecialModifiers::ESpecialModifiers sm ) throw (CEntityBase::EInvalidStat) sint32& CEntityBase::lookupStat( CSpecialModifiers::ESpecialModifiers sm)
{ {
switch( sm ) switch( sm )
{ {
@ -738,7 +738,7 @@ sint32& CEntityBase::lookupStat( CSpecialModifiers::ESpecialModifiers sm ) throw
throw CEntityBase::EInvalidStat() ; throw CEntityBase::EInvalidStat() ;
} // lookupStat // } // lookupStat //
const sint32& CEntityBase::lookupStat( CSpecialModifiers::ESpecialModifiers sm ) const throw (CEntityBase::EInvalidStat) const sint32& CEntityBase::lookupStat( CSpecialModifiers::ESpecialModifiers sm) const
{ {
return const_cast<CEntityBase*>(this)->lookupStat(sm); return const_cast<CEntityBase*>(this)->lookupStat(sm);
} }

View file

@ -93,7 +93,7 @@ void CItemForSale::setAvailable( bool a )
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
//void CItemForSale::serial(NLMISC::IStream &f) throw(NLMISC::EStream ) //void CItemForSale::serial(NLMISC::IStream &f)
//{ //{
// f.serial( _PriceInfo ); // f.serial( _PriceInfo );
// f.serial( _RetirePrice ); // f.serial( _RetirePrice );

View file

@ -312,7 +312,7 @@ public:
void setContinent( CONTINENT::TContinent ) {} void setContinent( CONTINENT::TContinent ) {}
// serial // serial
void serial(NLMISC::IStream &f) throw(NLMISC::EStream ) {} void serial(NLMISC::IStream &f) {}
// set item for sale // set item for sale
void itemForSale( uint32 price, uint32 retirePrice, CGameItemPtr item, uint32 quantity, const NLMISC::CEntityId& id, CONTINENT::TContinent continent, uint32 identifier ) {} void itemForSale( uint32 price, uint32 retirePrice, CGameItemPtr item, uint32 quantity, const NLMISC::CEntityId& id, CONTINENT::TContinent continent, uint32 identifier ) {}

View file

@ -96,7 +96,7 @@ NLMISC::CSmartPtr< IItemTrade > CItemsForSale::removeItem( uint32 identifier, ui
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void CItemsForSale::serial(NLMISC::IStream &f) throw(NLMISC::EStream ) void CItemsForSale::serial(NLMISC::IStream &f)
{ {
// YOYO: we should not be here. OLD serial was very buggy. // YOYO: we should not be here. OLD serial was very buggy.
// AlainS ensure me this code is no more called (no write, use PDS instead, and old version // AlainS ensure me this code is no more called (no write, use PDS instead, and old version

View file

@ -179,13 +179,13 @@ public:
} }
} }
void onCommand(const CMessage &command) throw (EInvalidCommand) void onCommand(const CMessage &command)
{ {
// nothing done for now // nothing done for now
throw EInvalidCommand(); throw EInvalidCommand();
} }
/// The gateway send a textual command to the transport /// The gateway send a textual command to the transport
bool onCommand(const TParsedCommandLine &command) throw (EInvalidCommand) bool onCommand(const TParsedCommandLine &command)
{ {
if (command.SubParams.size() < 1) if (command.SubParams.size() < 1)
throw EInvalidCommand(); throw EInvalidCommand();
@ -212,7 +212,7 @@ public:
} }
/// Open the server by intercepting client gateway message /// Open the server by intercepting client gateway message
void openServer() throw (ETransportError) void openServer()
{ {
if (OpenTransport() != NULL) if (OpenTransport() != NULL)
throw ETransportError("openServer : a transport is already open !"); throw ETransportError("openServer : a transport is already open !");

View file

@ -145,7 +145,7 @@ public :
* \param gId is the group's id * \param gId is the group's id
* \return the group * \return the group
*/ */
CChatGroup& getGroup( const TGroupId& gId );// throw (EChatGroup); CChatGroup& getGroup( const TGroupId& gId );
/** /**
* Transmit a chat message * Transmit a chat message

View file

@ -65,7 +65,7 @@ public:
return true; return true;
} }
public: public:
void serial(IStream &f) throw(EStream) void serial(IStream &f)
{ {
for(uint k = 0; k < NumUserParams; ++k) for(uint k = 0; k < NumUserParams; ++k)
{ {
@ -87,7 +87,7 @@ public:
{ {
return PSName.empty() && UserParams.empty(); return PSName.empty() && UserParams.empty();
} }
void serial(IStream &f) throw(EStream) void serial(IStream &f)
{ {
if (!PSName.empty()) writeAtom(f, "PSName", PSName); if (!PSName.empty()) writeAtom(f, "PSName", PSName);
UserParams.serial(f); UserParams.serial(f);
@ -111,7 +111,7 @@ public:
} }
return true; return true;
} }
void serial(IStream &f) throw(EStream) void serial(IStream &f)
{ {
for(uint k = 0; k < NumFX; ++k) for(uint k = 0; k < NumFX; ++k)
{ {

View file

@ -283,7 +283,7 @@ public:
/// The node is in the 'unloaded' state, so caller must load it afterward. /// The node is in the 'unloaded' state, so caller must load it afterward.
/// NB : no lookup is done, full path must be provided. /// NB : no lookup is done, full path must be provided.
/// @return pointer to new node, or NULL if already inserted /// @return pointer to new node, or NULL if already inserted
CWorkspaceNode *addNode(const std::string &filenameWithFullPath) throw( NLMISC::Exception); CWorkspaceNode *addNode(const std::string &filenameWithFullPath);
/// Remove a node by it's index /// Remove a node by it's index
void removeNode(uint index); void removeNode(uint index);