Open Bug 1738775 Opened 4 years ago

Should be able to `getter_AddRefs` a StaticRefPtr

Categories

(Core :: XPCOM, task)

task

Tracking

()

Tracking Status
firefox96 --- affected

People

(Reporter: Gijs, Unassigned)

Details

Nika suggests:

template <class T>
class StaticRefPtrGetterAddRefs {
 public:
  explicit StaticRefPtrGetterAddRefs(StaticRefPtr<T>& aSmartPtr)
      : mTargetSmartPtr(aSmartPtr) {}

  operator void**() {
    return reinterpret_cast<void**>(mTargetSmartPtr.StartAssignment());
  }

  operator T**() { return mTargetSmartPtr.StartAssignment(); }

  T*& operator*() { return *(mTargetSmartPtr.StartAssignment()); }

 private:
  StaticRefPtr<T>& mTargetSmartPtr;
};

template <class T>
inline StaticRefPtrGetterAddRefs<T> getter_AddRefs(StaticRefPtr<T>& aSmartPtr) {
  return StaticRefPtrGetterAddRefs<T>(aSmartPtr);
}

where you'd need to add a StartAssignment method to StaticRefPtr<T> too:

  T** StartAssignment() {
    AssignAssumingAddRef(nullptr);
    return &mRawPtr;
  }
You need to log in before you can comment on or make changes to this bug.