williamr@4: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // williamr@4: williamr@4: #ifndef EMISC_H williamr@4: #define EMISC_H williamr@4: williamr@4: #include williamr@4: williamr@4: /** williamr@4: @file williamr@4: williamr@4: Miscellaneous utilities that can help make code more readable. williamr@4: */ williamr@4: williamr@4: /** williamr@4: A convenience postfix macro that is equivalent to wrapping the williamr@4: preceding expression with User::LeaveIfError(). williamr@4: williamr@4: The code: williamr@4: @code williamr@4: fs.Connect() OR_LEAVE; williamr@4: @endcode williamr@4: williamr@4: is equivalent to: williamr@4: williamr@4: @code williamr@4: User::LeaveIfError(fs.Connect()); williamr@4: @endcode williamr@4: williamr@4: The implementation happens to rely on overloading operator|| for williamr@4: TLeave. However, this macro is not intended for use within general williamr@4: expressions, just to guard individual calls to methods that may williamr@4: return an error code. williamr@4: */ williamr@4: #define OR_LEAVE || ELeave williamr@4: williamr@4: /** williamr@4: Enabling overload for OR_LEAVE. Should only be invoked via williamr@4: OR_LEAVE, never directly. williamr@4: */ williamr@4: inline void operator||(TInt aStatus, TLeave /*aTag*/) williamr@4: { williamr@4: User::LeaveIfError(aStatus); williamr@4: } williamr@4: williamr@4: #endif // !EMISC_H williamr@4: