tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

txResultRecycler.h (2223B)


      1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 #ifndef txResultRecycler_h__
      7 #define txResultRecycler_h__
      8 
      9 #include "nsCOMPtr.h"
     10 #include "txStack.h"
     11 
     12 class txAExprResult;
     13 class StringResult;
     14 class txNodeSet;
     15 class txXPathNode;
     16 class NumberResult;
     17 class BooleanResult;
     18 
     19 class txResultRecycler {
     20 public:
     21  txResultRecycler();
     22  ~txResultRecycler();
     23 
     24  void AddRef() {
     25    ++mRefCnt;
     26    NS_LOG_ADDREF(this, mRefCnt, "txResultRecycler", sizeof(*this));
     27  }
     28  void Release() {
     29    --mRefCnt;
     30    NS_LOG_RELEASE(this, mRefCnt, "txResultRecycler");
     31    if (mRefCnt == 0) {
     32      mRefCnt = 1;  // stabilize
     33      delete this;
     34    }
     35  }
     36 
     37  /**
     38   * Returns an txAExprResult to this recycler for reuse.
     39   * @param aResult  result to recycle
     40   */
     41  void recycle(txAExprResult* aResult);
     42 
     43  /**
     44   * Functions to return results that will be fully used by the caller.
     45   * Returns nullptr on out-of-memory and an inited result otherwise.
     46   */
     47  nsresult getStringResult(StringResult** aResult);
     48  nsresult getStringResult(const nsAString& aValue, txAExprResult** aResult);
     49  nsresult getNodeSet(txNodeSet** aResult);
     50  nsresult getNodeSet(txNodeSet* aNodeSet, txNodeSet** aResult);
     51  nsresult getNodeSet(const txXPathNode& aNode, txAExprResult** aResult);
     52  nsresult getNumberResult(double aValue, txAExprResult** aResult);
     53 
     54  /**
     55   * Functions to return a txAExprResult that is shared across several
     56   * clients and must not be modified. Never returns nullptr.
     57   */
     58  void getEmptyStringResult(txAExprResult** aResult);
     59  void getBoolResult(bool aValue, txAExprResult** aResult);
     60 
     61  /**
     62   * Functions that return non-shared resultsobjects
     63   */
     64  nsresult getNonSharedNodeSet(txNodeSet* aNodeSet, txNodeSet** aResult);
     65 
     66 private:
     67  nsAutoRefCnt mRefCnt;
     68  txStack mStringResults;
     69  txStack mNodeSetResults;
     70  txStack mNumberResults;
     71  RefPtr<StringResult> mEmptyStringResult;
     72  RefPtr<BooleanResult> mTrueResult;
     73  RefPtr<BooleanResult> mFalseResult;
     74 };
     75 
     76 #endif  // txResultRecycler_h__