domcasts.hpp
来自「IBM的解析xml的工具Xerces的源代码」· HPP 代码 · 共 131 行
HPP
131 行
#ifndef DOMCasts_HEADER_GUARD_#define DOMCasts_HEADER_GUARD_/* * Copyright 2001-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: DOMCasts.hpp,v 1.3 2004/09/08 13:55:51 peiyongz Exp $ *///// This file is part of the internal implementation of the C++ XML DOM.// It should NOT be included or used directly by application programs.//// Applications should include the file <xercesc/dom/DOM.hpp> for the entire// DOM API, or xercesc/dom/DOM*.hpp for individual DOM classes, where the class// name is substituded for the *.////// Define inline casting functions to convert from// (DOMNode *) to DOMParentNode or DOMChildNode *.//// This requires knowledge of the structure of the fields of// for all node types. There are three categories -//// Nodetypes that can have children and can be a child themselves.// e.g. Elements//// Object// DOMNodeImpl fNode;// DOMParentNode fParent;// DOMChildNode fChild;// ... // other fields, depending on node type.//// Nodetypes that can not have children, e.g. TEXT//// Object// DOMNodeImpl fNode;// DOMChildNode fChild;// ... // other fields, depending on node type//// Nodetypes that can not be a child of other nodes, but that can// have children (are a parent) e.g. ATTR// Object// DOMNodeImpl fNode;// DOMParentNode fParent// ... // other fields, depending on node type//// The casting functions make these assumptions:// 1. The cast is possible. Using code will not attempt to// cast to something that does not exist, such as the child// part of an ATTR//// 2. The nodes belong to this implementation.//// Some of the casts use the LEAFNODE flag in the common fNode part to// determine whether an fParent field exists, and thus the// position of the fChild part within the node.//// These functions also cast off const. It was either do that, or make// a second overloaded set that took and returned const arguements.//#include "DOMElementImpl.hpp"#include "DOMTextImpl.hpp"XERCES_CPP_NAMESPACE_BEGINstatic inline DOMNodeImpl *castToNodeImpl(const DOMNode *p){ DOMElementImpl *pE = (DOMElementImpl *)p; return &(pE->fNode);}static inline DOMParentNode *castToParentImpl(const DOMNode *p) { DOMElementImpl *pE = (DOMElementImpl *)p; return &(pE->fParent);}static inline DOMChildNode *castToChildImpl(const DOMNode *p) { DOMElementImpl *pE = (DOMElementImpl *)p; if (pE->fNode.isLeafNode()) { DOMTextImpl *pT = (DOMTextImpl *)p; return &(pT->fChild); } return &(pE->fChild);}static inline DOMNode *castToNode(const DOMParentNode *p ) { int parentOffset = (char *)&(((DOMElementImpl *)0)->fParent) - (char *)0; char *retPtr = (char *)p - parentOffset; return (DOMNode *)retPtr;}static inline DOMNode *castToNode(const DOMNodeImpl *p) { int nodeImplOffset = (char *)&(((DOMElementImpl *)0)->fNode) - (char *)0; char *retPtr = (char *)p - nodeImplOffset; return (DOMNode *)retPtr;}static inline DOMNodeImpl *castToNodeImpl(const DOMParentNode *p){ int nodeImplOffset = (char *)&(((DOMElementImpl *)0)->fNode) - (char *)0; int parentOffset = (char *)&(((DOMElementImpl *)0)->fParent) - (char *)0; char *retPtr = (char *)p - parentOffset + nodeImplOffset; return (DOMNodeImpl *)retPtr;}XERCES_CPP_NAMESPACE_END#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?