Browse Source

Removed some erroneous casts from ReferenceCountedObjectPtr that allowed base classes to be implicitly converted to derived classes

tags/2021-05-28
jules 7 years ago
parent
commit
8e280f3454
3 changed files with 30 additions and 29 deletions
  1. +1
    -1
      modules/juce_box2d/box2d/Common/b2Timer.cpp
  2. +17
    -17
      modules/juce_core/memory/juce_ReferenceCountedObject.h
  3. +12
    -11
      modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm

+ 1
- 1
modules/juce_box2d/box2d/Common/b2Timer.cpp View File

@@ -18,7 +18,7 @@
#include "b2Timer.h" #include "b2Timer.h"
b2Timer::b2Timer()
b2Timer::b2Timer()
{ {
Reset(); Reset();
} }


+ 17
- 17
modules/juce_core/memory/juce_ReferenceCountedObject.h View File

@@ -237,12 +237,12 @@ private:
@tags{Core} @tags{Core}
*/ */
template <class ReferenceCountedObjectClass>
template <class ObjectType>
class ReferenceCountedObjectPtr class ReferenceCountedObjectPtr
{ {
public: public:
/** The class being referenced by this pointer. */ /** The class being referenced by this pointer. */
typedef ReferenceCountedObjectClass ReferencedType;
typedef ObjectType ReferencedType;
//============================================================================== //==============================================================================
/** Creates a pointer to a null object. */ /** Creates a pointer to a null object. */
@@ -274,7 +274,7 @@ public:
*/ */
template <typename Convertible> template <typename Convertible>
ReferenceCountedObjectPtr (const ReferenceCountedObjectPtr<Convertible>& other) noexcept ReferenceCountedObjectPtr (const ReferenceCountedObjectPtr<Convertible>& other) noexcept
: referencedObject (static_cast<ReferencedType*> (other.get()))
: referencedObject (other.get())
{ {
incIfNotNull (referencedObject); incIfNotNull (referencedObject);
} }
@@ -295,7 +295,7 @@ public:
template <typename Convertible> template <typename Convertible>
ReferenceCountedObjectPtr& operator= (const ReferenceCountedObjectPtr<Convertible>& other) ReferenceCountedObjectPtr& operator= (const ReferenceCountedObjectPtr<Convertible>& other)
{ {
return operator= (static_cast<ReferencedType*> (other.get()));
return operator= (other.get());
} }
/** Changes this pointer to point at a different object. /** Changes this pointer to point at a different object.
@@ -303,7 +303,7 @@ public:
The reference count of the old object is decremented, and it might be The reference count of the old object is decremented, and it might be
deleted if it hits zero. The new object's count is incremented. deleted if it hits zero. The new object's count is incremented.
*/ */
ReferenceCountedObjectPtr& operator= (ReferencedType* const newObject)
ReferenceCountedObjectPtr& operator= (ReferencedType* newObject)
{ {
if (referencedObject != newObject) if (referencedObject != newObject)
{ {
@@ -382,43 +382,43 @@ private:
//============================================================================== //==============================================================================
/** Compares two ReferenceCountedObjectPtrs. */ /** Compares two ReferenceCountedObjectPtrs. */
template <typename ReferenceCountedObjectClass>
bool operator== (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, ReferenceCountedObjectClass* const object2) noexcept
template <typename ObjectType>
bool operator== (const ReferenceCountedObjectPtr<ObjectType>& object1, ObjectType* const object2) noexcept
{ {
return object1.get() == object2; return object1.get() == object2;
} }
/** Compares two ReferenceCountedObjectPtrs. */ /** Compares two ReferenceCountedObjectPtrs. */
template <typename ReferenceCountedObjectClass>
bool operator== (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) noexcept
template <typename ObjectType>
bool operator== (const ReferenceCountedObjectPtr<ObjectType>& object1, const ReferenceCountedObjectPtr<ObjectType>& object2) noexcept
{ {
return object1.get() == object2.get(); return object1.get() == object2.get();
} }
/** Compares two ReferenceCountedObjectPtrs. */ /** Compares two ReferenceCountedObjectPtrs. */
template <typename ReferenceCountedObjectClass>
bool operator== (ReferenceCountedObjectClass* object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) noexcept
template <typename ObjectType>
bool operator== (ObjectType* object1, const ReferenceCountedObjectPtr<ObjectType>& object2) noexcept
{ {
return object1 == object2.get(); return object1 == object2.get();
} }
/** Compares two ReferenceCountedObjectPtrs. */ /** Compares two ReferenceCountedObjectPtrs. */
template <typename ReferenceCountedObjectClass>
bool operator!= (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectClass* object2) noexcept
template <typename ObjectType>
bool operator!= (const ReferenceCountedObjectPtr<ObjectType>& object1, const ObjectType* object2) noexcept
{ {
return object1.get() != object2; return object1.get() != object2;
} }
/** Compares two ReferenceCountedObjectPtrs. */ /** Compares two ReferenceCountedObjectPtrs. */
template <typename ReferenceCountedObjectClass>
bool operator!= (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) noexcept
template <typename ObjectType>
bool operator!= (const ReferenceCountedObjectPtr<ObjectType>& object1, const ReferenceCountedObjectPtr<ObjectType>& object2) noexcept
{ {
return object1.get() != object2.get(); return object1.get() != object2.get();
} }
/** Compares two ReferenceCountedObjectPtrs. */ /** Compares two ReferenceCountedObjectPtrs. */
template <typename ReferenceCountedObjectClass>
bool operator!= (ReferenceCountedObjectClass* object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) noexcept
template <typename ObjectType>
bool operator!= (ObjectType* object1, const ReferenceCountedObjectPtr<ObjectType>& object2) noexcept
{ {
return object1 != object2.get(); return object1 != object2.get();
} }


+ 12
- 11
modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm View File

@@ -82,7 +82,7 @@ private:
private: private:
static void frameChanged (id self, SEL, NSNotification*) static void frameChanged (id self, SEL, NSNotification*)
{ {
if (NSViewResizeWatcher* const target = getIvar<NSViewResizeWatcher*> (self, "target"))
if (auto* target = getIvar<NSViewResizeWatcher*> (self, "target"))
target->viewResized(); target->viewResized();
} }
@@ -98,7 +98,7 @@ class NSViewAttachment : public ReferenceCountedObject,
private NSViewResizeWatcher private NSViewResizeWatcher
{ {
public: public:
NSViewAttachment (NSView* const v, Component& comp)
NSViewAttachment (NSView* v, Component& comp)
: ComponentMovementWatcher (&comp), : ComponentMovementWatcher (&comp),
view (v), owner (comp), view (v), owner (comp),
currentPeer (nullptr) currentPeer (nullptr)
@@ -134,9 +134,9 @@ public:
void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) override void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) override
{ {
if (ComponentPeer* const peer = owner.getTopLevelComponent()->getPeer())
if (auto* peer = owner.getTopLevelComponent()->getPeer())
{ {
NSRect r = makeNSRect (peer->getAreaCoveredBy (owner));
auto r = makeNSRect (peer->getAreaCoveredBy (owner));
r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height); r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height);
[view setFrame: r]; [view setFrame: r];
} }
@@ -144,7 +144,7 @@ public:
void componentPeerChanged() override void componentPeerChanged() override
{ {
ComponentPeer* const peer = owner.getPeer();
auto* peer = owner.getPeer();
if (currentPeer != peer) if (currentPeer != peer)
{ {
@@ -152,7 +152,7 @@ public:
if (peer != nullptr) if (peer != nullptr)
{ {
NSView* const peerView = (NSView*) peer->getNativeHandle();
auto peerView = (NSView*) peer->getNativeHandle();
[peerView addSubview: view]; [peerView addSubview: view];
componentMovedOrResized (false, false); componentMovedOrResized (false, false);
} }
@@ -182,7 +182,8 @@ public:
NSView* const view; NSView* const view;
typedef ReferenceCountedObjectPtr<NSViewAttachment> Ptr;
using Ptr = ReferenceCountedObjectPtr<NSViewAttachment>;
private: private:
Component& owner; Component& owner;
ComponentPeer* currentPeer; ComponentPeer* currentPeer;
@@ -201,11 +202,11 @@ private:
NSViewComponent::NSViewComponent() {} NSViewComponent::NSViewComponent() {}
NSViewComponent::~NSViewComponent() {} NSViewComponent::~NSViewComponent() {}
void NSViewComponent::setView (void* const view)
void NSViewComponent::setView (void* view)
{ {
if (view != getView()) if (view != getView())
{ {
NSViewAttachment::Ptr old = attachment;
auto old = attachment;
attachment = nullptr; attachment = nullptr;
@@ -226,7 +227,7 @@ void NSViewComponent::resizeToFitView()
{ {
if (attachment != nullptr) if (attachment != nullptr)
{ {
NSRect r = [static_cast<NSViewAttachment*> (attachment.get())->view frame];
auto r = [static_cast<NSViewAttachment*> (attachment.get())->view frame];
setBounds (Rectangle<int> ((int) r.size.width, (int) r.size.height)); setBounds (Rectangle<int> ((int) r.size.width, (int) r.size.height));
} }
} }
@@ -239,7 +240,7 @@ void NSViewComponent::alphaChanged()
(static_cast<NSViewAttachment*> (attachment.get()))->updateAlpha(); (static_cast<NSViewAttachment*> (attachment.get()))->updateAlpha();
} }
ReferenceCountedObject* NSViewComponent::attachViewToComponent (Component& comp, void* const view)
ReferenceCountedObject* NSViewComponent::attachViewToComponent (Component& comp, void* view)
{ {
return new NSViewAttachment ((NSView*) view, comp); return new NSViewAttachment ((NSView*) view, comp);
} }


Loading…
Cancel
Save