LCOV - code coverage report
Current view: directory - content/xul/templates/src - nsXMLBinding.h (source / functions) Found Hit Coverage
Test: app.info Lines: 15 1 6.7 %
Date: 2012-06-02 Functions: 9 1 11.1 %

       1                 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2                 : /* ***** BEGIN LICENSE BLOCK *****
       3                 :  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
       4                 :  *
       5                 :  * The contents of this file are subject to the Mozilla Public License Version
       6                 :  * 1.1 (the "License"); you may not use this file except in compliance with
       7                 :  * the License. You may obtain a copy of the License at
       8                 :  * http://www.mozilla.org/MPL/
       9                 :  *
      10                 :  * Software distributed under the License is distributed on an "AS IS" basis,
      11                 :  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
      12                 :  * for the specific language governing rights and limitations under the
      13                 :  * License.
      14                 :  *
      15                 :  * The Original Code is mozilla.org code.
      16                 :  *
      17                 :  * The Initial Developer of the Original Code is Neil Deakin
      18                 :  * Portions created by the Initial Developer are Copyright (C) 2006
      19                 :  * the Initial Developer. All Rights Reserved.
      20                 :  *
      21                 :  * Contributor(s):
      22                 :  *
      23                 :  * Alternatively, the contents of this file may be used under the terms of
      24                 :  * either of the GNU General Public License Version 2 or later (the "GPL"),
      25                 :  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
      26                 :  * in which case the provisions of the GPL or the LGPL are applicable instead
      27                 :  * of those above. If you wish to allow use of your version of this file only
      28                 :  * under the terms of either the GPL or the LGPL, and not to allow others to
      29                 :  * use your version of this file under the terms of the MPL, indicate your
      30                 :  * decision by deleting the provisions above and replace them with the notice
      31                 :  * and other provisions required by the GPL or the LGPL. If you do not delete
      32                 :  * the provisions above, a recipient may use your version of this file under
      33                 :  * the terms of any one of the MPL, the GPL or the LGPL.
      34                 :  *
      35                 :  * ***** END LICENSE BLOCK ***** */
      36                 : 
      37                 : #ifndef nsXMLBinding_h__
      38                 : #define nsXMLBinding_h__
      39                 : 
      40                 : #include "nsAutoPtr.h"
      41                 : #include "nsIAtom.h"
      42                 : #include "nsCycleCollectionParticipant.h"
      43                 : 
      44                 : class nsXULTemplateResultXML;
      45                 : class nsXMLBindingValues;
      46                 : 
      47                 : /**
      48                 :  * Classes related to storing bindings for XML handling.
      49                 :  */
      50                 : 
      51                 : /**
      52                 :  * a <binding> description
      53                 :  */
      54                 : struct nsXMLBinding {
      55                 :   nsCOMPtr<nsIAtom> mVar;
      56                 :   nsCOMPtr<nsIDOMXPathExpression> mExpr;
      57                 : 
      58                 :   nsAutoPtr<nsXMLBinding> mNext;
      59                 : 
      60               0 :   nsXMLBinding(nsIAtom* aVar, nsIDOMXPathExpression* aExpr)
      61               0 :     : mVar(aVar), mExpr(aExpr), mNext(nsnull)
      62                 :   {
      63               0 :     MOZ_COUNT_CTOR(nsXMLBinding);
      64               0 :   }
      65                 : 
      66               0 :   ~nsXMLBinding()
      67               0 :   {
      68               0 :     MOZ_COUNT_DTOR(nsXMLBinding);
      69               0 :   }
      70                 : };
      71                 : 
      72                 : /**
      73                 :  * a collection of <binding> descriptors. This object is refcounted by
      74                 :  * nsXMLBindingValues objects and the query processor.
      75                 :  */
      76                 : class nsXMLBindingSet
      77               0 : {
      78                 : public:
      79                 : 
      80                 :   // results hold a reference to a binding set in their
      81                 :   // nsXMLBindingValues fields
      82                 :   nsAutoRefCnt mRefCnt;
      83                 : 
      84                 :   // pointer to the first binding in a linked list
      85                 :   nsAutoPtr<nsXMLBinding> mFirst;
      86                 : 
      87                 : public:
      88                 : 
      89                 :   NS_IMETHOD_(nsrefcnt) AddRef();
      90                 :   NS_IMETHOD_(nsrefcnt) Release();
      91                 :   NS_DECL_OWNINGTHREAD
      92            1464 :   NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(nsXMLBindingSet)
      93                 : 
      94                 :   /**
      95                 :    * Add a binding to the set
      96                 :    */
      97                 :   nsresult
      98                 :   AddBinding(nsIAtom* aVar, nsIDOMXPathExpression* aExpr);
      99                 : 
     100                 :   /**
     101                 :    * The nsXMLBindingValues class stores an array of values, one for each
     102                 :    * target symbol that could be set by the bindings in the set.
     103                 :    * LookupTargetIndex determines the index into the array for a given
     104                 :    * target symbol.
     105                 :    */
     106                 :   PRInt32
     107                 :   LookupTargetIndex(nsIAtom* aTargetVariable, nsXMLBinding** aBinding);
     108                 : };
     109                 : 
     110                 : /**
     111                 :  * a set of values of bindings. This object is used once per result.
     112                 :  */
     113                 : class nsXMLBindingValues
     114                 : {
     115                 : protected:
     116                 : 
     117                 :   // the binding set
     118                 :   nsRefPtr<nsXMLBindingSet> mBindings;
     119                 : 
     120                 :   /**
     121                 :    * A set of values for variable bindings. To look up a binding value,
     122                 :    * scan through the binding set in mBindings for the right target atom.
     123                 :    * Its index will correspond to the index in this array.
     124                 :    */
     125                 :   nsCOMArray<nsIDOMXPathResult> mValues;
     126                 : 
     127                 : public:
     128                 : 
     129               0 :   nsXMLBindingValues() { MOZ_COUNT_CTOR(nsXMLBindingValues); }
     130               0 :   ~nsXMLBindingValues() { MOZ_COUNT_DTOR(nsXMLBindingValues); }
     131                 : 
     132                 :   nsXMLBindingSet* GetBindingSet() { return mBindings; }
     133                 : 
     134               0 :   void SetBindingSet(nsXMLBindingSet* aBindings) { mBindings = aBindings; }
     135                 : 
     136                 :   PRInt32
     137               0 :   LookupTargetIndex(nsIAtom* aTargetVariable, nsXMLBinding** aBinding)
     138                 :   {
     139                 :     return mBindings ?
     140               0 :            mBindings->LookupTargetIndex(aTargetVariable, aBinding) : -1;
     141                 :   }
     142                 : 
     143                 :   /**
     144                 :    * Retrieve the assignment for a particular variable
     145                 :    *
     146                 :    * aResult the result generated from the template
     147                 :    * aBinding the binding looked up using LookupTargetIndex
     148                 :    * aIndex the index of the assignment to retrieve
     149                 :    * aType the type of result expected
     150                 :    * aValue the value of the assignment
     151                 :    */
     152                 :   void
     153                 :   GetAssignmentFor(nsXULTemplateResultXML* aResult,
     154                 :                    nsXMLBinding* aBinding,
     155                 :                    PRInt32 idx,
     156                 :                    PRUint16 type,
     157                 :                    nsIDOMXPathResult** aValue);
     158                 : 
     159                 :   void
     160                 :   GetNodeAssignmentFor(nsXULTemplateResultXML* aResult,
     161                 :                        nsXMLBinding* aBinding,
     162                 :                        PRInt32 idx,
     163                 :                        nsIDOMNode** aValue);
     164                 : 
     165                 :   void
     166                 :   GetStringAssignmentFor(nsXULTemplateResultXML* aResult,
     167                 :                          nsXMLBinding* aBinding,
     168                 :                          PRInt32 idx,
     169                 :                          nsAString& aValue);
     170                 : };
     171                 : 
     172                 : #endif // nsXMLBinding_h__

Generated by: LCOV version 1.7