Example #1
0
 internal static XmlNode GetCached(IntPtr ptr)
 {
     XmlNode retval=null;
     #if DEBUG
     if(!XmlNodeCache.IsCached(ptr))
     {
     throw new Exception("Node not registered ...");
     }
     #endif
     //retval=(XmlNode)(Native._xmlNodeGetCached(ptr));
     retval = new XmlNode(Native._xmlNodeGetCached(ptr));
     return retval;
 }
Example #2
0
 public XmlNode AddChild(XmlNode child)
 {
     // clear the cache as this /might/ be freed !
     // I ain't taking no chances. (wild wild west)
     if(this.GetFirstChild()!=null)
     {
     throw new Exception("Cannot add more that one child to a XmlDoc");
     }
     if(child.ElementType==XmlElementType.XML_TEXT_NODE)
     XmlNodeCache.Uncache(child.DeSerialize());
     IntPtr retval=Native._xmlAddChild(dataPtr,child.DeSerialize());
     if(retval == IntPtr.Zero)
     {
     throw new Exception("New node Could not be linked in !");
     }
     return XmlNodeFactory.NewNode(retval);
 }
Example #3
0
 public XmlNode AddChild(XmlNode child)
 {
     if(child.ElementType == XmlElementType.XML_DOCUMENT_NODE)
     {
     throw new Exception("Document nodes cannot be added anywhere !");
     }
     // clear the cache as this /might/ be freed !
     // I don't take no chances. (wild wild west)
     if(child.ElementType == XmlElementType.XML_TEXT_NODE)
     XmlNodeCache.Uncache(child.DeSerialize());
     IntPtr retval=Native._xmlAddChild(dataPtr,child.DeSerialize());
     if(retval == IntPtr.Zero)
     {
     throw new Exception("New node Could not be linked in !");
     }
     return XmlNodeFactory.NewNode(retval);
 }
        public static XmlNode NewNode(IntPtr ptr)
        {
            XmlNode retval;
            /*
             * TODO: find a way to debug ....
             *
             *     Also fix pnet's switch bug so that this works !
             *     try #define INCLUDE_TODO and running this
             */
            if(ptr==IntPtr.Zero)
            {
            return null; //should I throw an exception here ?
            }
            if(XmlNodeCache.IsCached(ptr))
            {
            return XmlNodeCache.GetCached(ptr);
            }
            /*
             * I wish I could write macros for the following code :(
             * identical code .... yuck !
             */
            switch(Native._xmlNodeGetElementType(ptr))
            {
            case XmlElementType.XML_ELEMENT_UNDEF:
                throw new Exception("Impossible !");
                break;

            case XmlElementType.XML_ELEMENT_NODE:
                retval=new XmlElement(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            case XmlElementType.XML_ATTRIBUTE_NODE:
                retval=new XmlAttr(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            case XmlElementType.XML_TEXT_NODE:
                retval=new XmlText(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            case XmlElementType.XML_CDATA_SECTION_NODE:
                retval=new XmlCData(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;
            /*TODO*/
            case XmlElementType.XML_ENTITY_REF_NODE:
                goto default;

            /*TODO*/
            case XmlElementType.XML_ENTITY_NODE:
                goto default;

            case XmlElementType.XML_PI_NODE:
                retval=new XmlPI(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            case XmlElementType.XML_COMMENT_NODE:
                retval=new XmlComment(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            case XmlElementType.XML_DOCUMENT_NODE:
                retval=new XmlDoc(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;
            /*TODO*/
            case XmlElementType.XML_DOCUMENT_TYPE_NODE:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_DOCUMENT_FRAG_NODE:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_NOTATION_NODE:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_HTML_DOCUMENT_NODE:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_DTD_NODE:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_ELEMENT_DECL:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_ATTRIBUTE_DECL:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_ENTITY_DECL:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_NAMESPACE_DECL:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_XINCLUDE_START:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;

            /*TODO*/
            case XmlElementType.XML_XINCLUDE_END:
                retval=new XmlNode(ptr);
                XmlNodeCache.Cache(ptr,retval);
                return retval;
                break;
            default:
                throw new Exception("Unexpected error !");
            }
            //we never get here !
            return null;
        }
Example #5
0
 internal static bool Cache(IntPtr ptr,XmlNode node)
 {
     return Native._xmlNodeCache(ptr,node.DataPtr);
 }