Reviewed by Darin.
authorandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 Feb 2008 20:00:19 +0000 (20:00 +0000)
committerandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 Feb 2008 20:00:19 +0000 (20:00 +0000)
        Make some of the refcounted style objects start out with a refcount of 1.

        * rendering/DataRef.h:
        Make a DeprecatedDataRef class which is just a copy of the old DataRef class.
        Change DataRef to use ::create() and ::copy() instead of the constructors.
        Change DataRef's pointer to be a RefPtr instead.

        * rendering/RenderStyle.cpp:
        (WebCore::StyleMarqueeData::StyleMarqueeData):
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleTransformData::StyleTransformData):
        Start with a RefCount of 1.

        * rendering/RenderStyle.h:
        * rendering/SVGRenderStyle.h:
        Add ::create() and ::copy() methods. Make not yet converted classes use DeprecatedDataRef.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@30572 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/rendering/DataRef.h
WebCore/rendering/RenderStyle.cpp
WebCore/rendering/RenderStyle.h
WebCore/rendering/SVGRenderStyle.h

index 44ea9365376d8617879b36412aa236cf765cc4b0..d1fcb96154780ee15ee306db845f525d49eedee6 100644 (file)
@@ -1,3 +1,25 @@
+2008-02-25  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Darin.
+
+        Make some of the refcounted style objects start out with a refcount of 1.
+
+        * rendering/DataRef.h:
+        Make a DeprecatedDataRef class which is just a copy of the old DataRef class.
+        Change DataRef to use ::create() and ::copy() instead of the constructors.
+        Change DataRef's pointer to be a RefPtr instead.
+
+        * rendering/RenderStyle.cpp:
+        (WebCore::StyleMarqueeData::StyleMarqueeData):
+        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
+        (WebCore::StyleMultiColData::StyleMultiColData):
+        (WebCore::StyleTransformData::StyleTransformData):
+        Start with a RefCount of 1.
+        
+        * rendering/RenderStyle.h:
+        * rendering/SVGRenderStyle.h:
+        Add ::create() and ::copy() methods. Make not yet converted classes use DeprecatedDataRef.
+
 2008-02-25  Darin Adler  <darin@apple.com>
 
         Reviewed by Anders.
index 1e063e6e26a47f553f5e10e7bc05e83f3cc08596..ed8c29228a93abbd6d3519c3b497c027536dfe44 100644 (file)
@@ -1,10 +1,8 @@
 /*
- * This file is part of the DOM implementation for KDE.
- *
  * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
  *           (C) 2000 Antti Koivisto (koivisto@kde.org)
  *           (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2003, 2005 Apple Computer, Inc.
+ * Copyright (C) 2003, 2005, 2008 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
 #ifndef DataRef_h
 #define DataRef_h
 
+#include <wtf/RefPtr.h>
+
 namespace WebCore {
 
 template <typename T> class DataRef {
 public:
-    DataRef()
+    const T* get() const { return m_data.get(); }
+
+    const T& operator*() const { return *m_data; }
+    const T* operator->() const { return m_data.get(); }
+
+    T* access()
+    {
+        if (!m_data->hasOneRef())
+            m_data = m_data->copy();
+        return m_data.get();
+    }
+
+    void init()
+    {
+        ASSERT(!m_data);
+        m_data = T::create();
+    }
+
+    bool operator==(const DataRef<T>& o) const
+    {
+        ASSERT(m_data);
+        ASSERT(o.m_data);
+        return m_data == o.m_data || *m_data == *o.m_data;
+    }
+    
+    bool operator!=(const DataRef<T>& o) const
+    {
+        ASSERT(m_data);
+        ASSERT(o.m_data);
+        return m_data != o.m_data && *m_data != *o.m_data;
+    }
+
+private:
+    RefPtr<T> m_data;
+};
+
+template <typename T> class DeprecatedDataRef {
+public:
+    DeprecatedDataRef()
         : m_data(0)
     {
     }
 
-    DataRef(const DataRef<T>& d)
+    DeprecatedDataRef(const DeprecatedDataRef<T>& d)
     {
         ASSERT(d.m_data);
         m_data = d.m_data;
         m_data->ref();
     }
 
-    ~DataRef()
+    ~DeprecatedDataRef()
     {
         if (m_data)
             m_data->deref();
@@ -70,7 +108,7 @@ public:
         m_data->ref();
     }
 
-    DataRef<T>& operator=(const DataRef<T>& d)
+    DeprecatedDataRef<T>& operator=(const DeprecatedDataRef<T>& d)
     {
         ASSERT(d.m_data);
         d.m_data->ref();
@@ -80,14 +118,14 @@ public:
         return *this;
     }
 
-    bool operator==(const DataRef<T>& o) const
+    bool operator==(const DeprecatedDataRef<T>& o) const
     {
         ASSERT(m_data);
         ASSERT(o.m_data);
         return m_data == o.m_data || *m_data == *o.m_data;
     }
     
-    bool operator!=(const DataRef<T>& o) const
+    bool operator!=(const DeprecatedDataRef<T>& o) const
     {
         ASSERT(m_data);
         ASSERT(o.m_data);
index feee570ac056539eada0bace3dd46e7b05474b58..a30605416338727e8ec0b7a60e995a6f0696a194 100644 (file)
@@ -336,8 +336,7 @@ bool StyleBackgroundData::operator==(const StyleBackgroundData& o) const
 }
 
 StyleMarqueeData::StyleMarqueeData()
-    : RefCounted<StyleMarqueeData>(0)
-    , increment(RenderStyle::initialMarqueeIncrement())
+    : increment(RenderStyle::initialMarqueeIncrement())
     , speed(RenderStyle::initialMarqueeSpeed())
     , loops(RenderStyle::initialMarqueeLoopCount())
     , behavior(RenderStyle::initialMarqueeBehavior())
@@ -346,7 +345,7 @@ StyleMarqueeData::StyleMarqueeData()
 }
 
 StyleMarqueeData::StyleMarqueeData(const StyleMarqueeData& o)
-    : RefCounted<StyleMarqueeData>(0)
+    : RefCounted<StyleMarqueeData>()
     , increment(o.increment)
     , speed(o.speed)
     , loops(o.loops)
@@ -362,8 +361,7 @@ bool StyleMarqueeData::operator==(const StyleMarqueeData& o) const
 }
 
 StyleFlexibleBoxData::StyleFlexibleBoxData()
-    : RefCounted<StyleFlexibleBoxData>(0)
-    , flex(RenderStyle::initialBoxFlex())
+    : flex(RenderStyle::initialBoxFlex())
     , flex_group(RenderStyle::initialBoxFlexGroup())
     , ordinal_group(RenderStyle::initialBoxOrdinalGroup())
     , align(RenderStyle::initialBoxAlign())
@@ -374,7 +372,7 @@ StyleFlexibleBoxData::StyleFlexibleBoxData()
 }
 
 StyleFlexibleBoxData::StyleFlexibleBoxData(const StyleFlexibleBoxData& o)
-    : RefCounted<StyleFlexibleBoxData>(0)
+    : RefCounted<StyleFlexibleBoxData>()
     , flex(o.flex)
     , flex_group(o.flex_group)
     , ordinal_group(o.ordinal_group)
@@ -393,8 +391,7 @@ bool StyleFlexibleBoxData::operator==(const StyleFlexibleBoxData& o) const
 }
 
 StyleMultiColData::StyleMultiColData()
-    : RefCounted<StyleMultiColData>(0)
-    , m_width(0)
+    : m_width(0)
     , m_count(RenderStyle::initialColumnCount())
     , m_gap(0)
     , m_autoWidth(true)
@@ -407,7 +404,7 @@ StyleMultiColData::StyleMultiColData()
 }
 
 StyleMultiColData::StyleMultiColData(const StyleMultiColData& o)
-    : RefCounted<StyleMultiColData>(0)
+    : RefCounted<StyleMultiColData>()
     , m_width(o.m_width)
     , m_count(o.m_count)
     , m_gap(o.m_gap)
@@ -430,15 +427,14 @@ bool StyleMultiColData::operator==(const StyleMultiColData& o) const
 }
 
 StyleTransformData::StyleTransformData()
-    : RefCounted<StyleTransformData>(0)
-    , m_operations(RenderStyle::initialTransform())
+    : m_operations(RenderStyle::initialTransform())
     , m_x(RenderStyle::initialTransformOriginX())
     , m_y(RenderStyle::initialTransformOriginY())
 {
 }
 
 StyleTransformData::StyleTransformData(const StyleTransformData& o)
-    : RefCounted<StyleTransformData>(0)
+    : RefCounted<StyleTransformData>()
     , m_operations(o.m_operations)
     , m_x(o.m_x)
     , m_y(o.m_y)
index 7d66066d117d15a45f42135a6183238cc75b4333..d84272a75bd970879a655dfbdd755f011a71e90c 100644 (file)
@@ -576,8 +576,8 @@ enum EMarqueeDirection { MAUTO = 0, MLEFT = 1, MRIGHT = -1, MUP = 2, MDOWN = -2,
 
 class StyleMarqueeData : public RefCounted<StyleMarqueeData> {
 public:
-    StyleMarqueeData();
-    StyleMarqueeData(const StyleMarqueeData& o);
+    static PassRefPtr<StyleMarqueeData> create() { return adoptRef(new StyleMarqueeData); }
+    PassRefPtr<StyleMarqueeData> copy() const { return adoptRef(new StyleMarqueeData(*this)); }
     
     bool operator==(const StyleMarqueeData& o) const;
     bool operator!=(const StyleMarqueeData& o) const {
@@ -591,15 +591,19 @@ public:
     
     unsigned behavior : 3; // EMarqueeBehavior 
     EMarqueeDirection direction : 3; // not unsigned because EMarqueeDirection has negative values
+    
+private:
+    StyleMarqueeData();
+    StyleMarqueeData(const StyleMarqueeData& o);
 };
   
 // CSS3 Multi Column Layout
 
 class StyleMultiColData : public RefCounted<StyleMultiColData> {
 public:
-    StyleMultiColData();
-    StyleMultiColData(const StyleMultiColData& o);
-
+    static PassRefPtr<StyleMultiColData> create() { return adoptRef(new StyleMultiColData); }
+    PassRefPtr<StyleMultiColData> copy() const { return adoptRef(new StyleMultiColData(*this)); }
+    
     bool operator==(const StyleMultiColData& o) const;
     bool operator!=(const StyleMultiColData &o) const {
         return !(*this == o);
@@ -622,6 +626,10 @@ public:
     unsigned m_breakBefore : 2; // EPageBreak
     unsigned m_breakAfter : 2; // EPageBreak
     unsigned m_breakInside : 2; // EPageBreak
+    
+private:
+    StyleMultiColData();
+    StyleMultiColData(const StyleMultiColData& o);
 };
 
 // CSS Transforms (may become part of CSS3)
@@ -819,8 +827,8 @@ private:
 
 class StyleTransformData : public RefCounted<StyleTransformData> {
 public:
-    StyleTransformData();
-    StyleTransformData(const StyleTransformData&);
+    static PassRefPtr<StyleTransformData> create() { return adoptRef(new StyleTransformData); }
+    PassRefPtr<StyleTransformData> copy() const { return adoptRef(new StyleTransformData(*this)); }
 
     bool operator==(const StyleTransformData&) const;
     bool operator!=(const StyleTransformData& o) const {
@@ -830,6 +838,10 @@ public:
     TransformOperations m_operations;
     Length m_x;
     Length m_y;
+
+private:
+    StyleTransformData();
+    StyleTransformData(const StyleTransformData&);
 };
 
 //------------------------------------------------
@@ -842,9 +854,9 @@ enum EBoxDirection { BNORMAL, BREVERSE };
 
 class StyleFlexibleBoxData : public RefCounted<StyleFlexibleBoxData> {
 public:
-    StyleFlexibleBoxData();
-    StyleFlexibleBoxData(const StyleFlexibleBoxData& o);
-
+    static PassRefPtr<StyleFlexibleBoxData> create() { return adoptRef(new StyleFlexibleBoxData); }
+    PassRefPtr<StyleFlexibleBoxData> copy() const { return adoptRef(new StyleFlexibleBoxData(*this)); }
+    
     bool operator==(const StyleFlexibleBoxData& o) const;
     bool operator!=(const StyleFlexibleBoxData &o) const {
         return !(*this == o);
@@ -858,6 +870,10 @@ public:
     unsigned pack: 3; // EBoxAlignment
     unsigned orient: 1; // EBoxOrient
     unsigned lines : 1; // EBoxLines
+    
+private:
+    StyleFlexibleBoxData();
+    StyleFlexibleBoxData(const StyleFlexibleBoxData& o);
 };
 
 // This struct holds information about shadows for the text-shadow and box-shadow properties.
@@ -1450,15 +1466,15 @@ protected:
     } noninherited_flags;
 
 // non-inherited attributes
-    DataRef<StyleBoxData> box;
-    DataRef<StyleVisualData> visual;
-    DataRef<StyleBackgroundData> background;
-    DataRef<StyleSurroundData> surround;
-    DataRef<StyleRareNonInheritedData> rareNonInheritedData;
+    DeprecatedDataRef<StyleBoxData> box;
+    DeprecatedDataRef<StyleVisualData> visual;
+    DeprecatedDataRef<StyleBackgroundData> background;
+    DeprecatedDataRef<StyleSurroundData> surround;
+    DeprecatedDataRef<StyleRareNonInheritedData> rareNonInheritedData;
 
 // inherited attributes
-    DataRef<StyleRareInheritedData> rareInheritedData;
-    DataRef<StyleInheritedData> inherited;
+    DeprecatedDataRef<StyleRareInheritedData> rareInheritedData;
+    DeprecatedDataRef<StyleInheritedData> inherited;
     
 // list of associated pseudo styles
     RenderStyle* pseudoStyle;
@@ -1484,7 +1500,7 @@ protected:
     int m_ref;
     
 #if ENABLE(SVG)
-    DataRef<SVGRenderStyle> m_svgStyle;
+    DeprecatedDataRef<SVGRenderStyle> m_svgStyle;
 #endif
     
 // !END SYNC!
index 09ac1be8cc72b67cc436b133c7984bfddfa29f15..58adca0a810c8b3964d342e6579eb3c1cad09718 100644 (file)
@@ -169,16 +169,16 @@ namespace WebCore {
         } svg_noninherited_flags;
 
         // inherited attributes
-        DataRef<StyleFillData> fill;
-        DataRef<StyleStrokeData> stroke;
-        DataRef<StyleMarkerData> markers;
-        DataRef<StyleTextData> text;
+        DeprecatedDataRef<StyleFillData> fill;
+        DeprecatedDataRef<StyleStrokeData> stroke;
+        DeprecatedDataRef<StyleMarkerData> markers;
+        DeprecatedDataRef<StyleTextData> text;
 
         // non-inherited attributes
-        DataRef<StyleStopData> stops;
-        DataRef<StyleClipData> clip;
-        DataRef<StyleMaskData> mask;
-        DataRef<StyleMiscData> misc;
+        DeprecatedDataRef<StyleStopData> stops;
+        DeprecatedDataRef<StyleClipData> clip;
+        DeprecatedDataRef<StyleMaskData> mask;
+        DeprecatedDataRef<StyleMiscData> misc;
 
         // static default style
         static SVGRenderStyle *s_defaultStyle;