authenticationservices/authenticationserver/inc/authserver/authexpression.h
changeset 19 ece3df019add
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/inc/authserver/authexpression.h	Tue Nov 24 09:06:03 2009 +0200
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CAuthExpression declaration
+*
+*/
+
+
+/**
+ @file 
+ @publishedAll
+ @released
+*/
+
+#ifndef AUTHEXPRESSION_H
+#define AUTHEXPRESSION_H
+
+#include <s32strm.h>
+#include "authserver/authtypes.h"
+
+
+namespace AuthServer
+{
+
+
+class CAuthExpression : public CBase
+/**
+	Describes an authentication expression.
+
+	AuthServer clients construct expressions using
+	AuthExpr, combined with AuthAnd and AuthOr, or
+	the equivalent overloaded & and | operators.
+
+	@see AuthExpr
+	@see AuthAnd
+	@see AuthOr
+ */
+	{
+public:
+	/**
+		Externalize this object to the supplied stream.
+
+		@param	aWriteStream Stream to write persistent state to.
+	 */
+	virtual void ExternalizeL(RWriteStream& aWriteStream) const = 0;
+	};
+
+
+class TAuthExpressionWrapper
+/**
+	Simple wrapper around a pointer to an authentication
+	expression.  It is defined so the binary & and | operators
+	can be overloaded to generate concise expressions.
+	
+	Like CAuthExpression, this class should not be
+	used directly by clients, but via the AuthExpr,
+	AuthAnd, and AuthOr functions, or via the overloaded
+	& and | operators.  For this reason, the constructors
+	are not exported.
+	
+	@see AuthExpr
+	@see AuthAnd
+	@see AuthOr
+ */
+	{
+public:
+	/* @internalComponent*/
+	TAuthExpressionWrapper(CAuthExpression* aExpression);
+	/* @internalComponent */
+	TAuthExpressionWrapper(TAuthPluginType aType);
+	/* @internalComponent */
+	TAuthExpressionWrapper(TPluginId aPluginId);
+	/* @internalComponent */
+	TAuthExpressionWrapper();
+	
+	inline operator CAuthExpression*();
+	
+private:
+	/**
+		Pointer to the referenced authentication expression.
+		This is NULL in OOM.
+	 */
+	CAuthExpression*const iPtr;
+	};
+
+
+IMPORT_C TAuthExpressionWrapper AuthExpr(TAuthPluginType aType);
+IMPORT_C TAuthExpressionWrapper AuthExpr(TPluginId aPluginId);
+IMPORT_C TAuthExpressionWrapper AuthExpr();
+
+IMPORT_C TAuthExpressionWrapper AuthOr(CAuthExpression* aLeft, CAuthExpression* aRight);
+IMPORT_C TAuthExpressionWrapper AuthAnd(CAuthExpression* aLeft, CAuthExpression* aRight);
+
+
+#define AUTH_EXPR_BINARY_OPS
+#ifdef AUTH_EXPR_BINARY_OPS
+
+// These binary operators provide a more concise way to write
+// authentication expressions than AuthOr and AuthAnd.  However,
+// their behaviour - dynamically allocating from the heap - is
+// non-obvious to a reader, so they are left as a build-time
+// option.
+
+inline TAuthExpressionWrapper operator&(TAuthExpressionWrapper aLeft, TAuthExpressionWrapper aRight);
+inline TAuthExpressionWrapper operator|(TAuthExpressionWrapper aLeft, TAuthExpressionWrapper aRight);
+
+#endif
+
+
+}	// namespace AuthServer
+
+#include "authserver/authexpression.inl"
+
+#endif // EXPRESSION_H