00001 /* 00002 * Copyright (c) 2001-2006 00003 * DecisionSoft Limited. All rights reserved. 00004 * Copyright (c) 2004-2006 00005 * Progress Software Corporation. All rights reserved. 00006 * Copyright (c) 2004-2006 00007 * Oracle. All rights reserved. 00008 * 00009 * See the file LICENSE for redistribution information. 00010 * 00011 * $Id: ContextHelpers.hpp,v 1.2 2006/11/01 16:37:11 jpcs Exp $ 00012 */ 00013 00014 #if !defined(AFXQ_CONTEXTHELPERS_H__D6A320F5_21F1_421D_9E46_E4373B375E1A__INCLUDED_) 00015 #define AFXQ_CONTEXTHELPERS_H__D6A320F5_21F1_421D_9E46_E4373B375E1A__INCLUDED_ 00016 00017 #include <xqilla/framework/XQillaExport.hpp> 00018 #include <xqilla/context/DynamicContext.hpp> 00019 00020 class XQILLA_API AutoNodeSetOrderingReset 00021 { 00022 public: 00023 AutoNodeSetOrderingReset(StaticContext* context, StaticContext::NodeSetOrdering ordering = StaticContext::ORDERING_UNORDERED) 00024 { 00025 context_ = context; 00026 ordering_ = context->getNodeSetOrdering(); 00027 context->setNodeSetOrdering(ordering); 00028 } 00029 00030 ~AutoNodeSetOrderingReset() 00031 { 00032 context_->setNodeSetOrdering(ordering_); 00033 } 00034 00035 protected: 00036 StaticContext* context_; 00037 StaticContext::NodeSetOrdering ordering_; 00038 }; 00039 00040 class XQILLA_API AutoContextItemTypeReset 00041 { 00042 public: 00043 AutoContextItemTypeReset(StaticContext* context, const StaticType &sType) 00044 { 00045 context_ = context; 00046 sType_ = context->getContextItemType(); 00047 context->setContextItemType(sType); 00048 } 00049 00050 ~AutoContextItemTypeReset() 00051 { 00052 context_->setContextItemType(sType_); 00053 } 00054 00055 protected: 00056 StaticContext* context_; 00057 StaticType sType_; 00058 }; 00059 00060 class XQILLA_API AutoContextInfoReset 00061 { 00062 public: 00063 AutoContextInfoReset(DynamicContext* context) 00064 : oldContextItem(context->getContextItem()), 00065 oldContextPosition(context->getContextPosition()), 00066 oldContextSize(context->getContextSize()), 00067 context_(context) 00068 { 00069 } 00070 00071 ~AutoContextInfoReset() 00072 { 00073 resetContextInfo(); 00074 } 00075 00076 void resetContextInfo() 00077 { 00078 context_->setContextItem(oldContextItem); 00079 context_->setContextPosition(oldContextPosition); 00080 context_->setContextSize(oldContextSize); 00081 } 00082 00083 Item::Ptr oldContextItem; 00084 unsigned int oldContextPosition; 00085 unsigned int oldContextSize; 00086 00087 private: 00088 DynamicContext* context_; 00089 }; 00090 00091 #endif