Changeset 10399 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Aug 30, 2005, 4:56:15 PM (20 years ago)
Author:
darin
Message:

JavaScriptCore:

Reviewed by John Sullivan.

  • kjs/shared_ptr.h: Updated namespace to KXMLCore instead of kxhmlcore. Made a few small improvements to use local variables a bit more and added an "operator int" to reduce the chance that we'll convert a SharedPtr to an int by accident. Also made the == operators normal functions rather than friend functions, added a couple of comemnts.
  • kjs/function.h: Updated for namespace change.
  • kjs/function.cpp: Ditto.
  • kjs/function_object.cpp: Ditto.
  • kjs/internal.h: Ditto.
  • kjs/internal.cpp: Ditto.
  • kjs/nodes.h: Ditto.
  • kjs/nodes2string.cpp: Ditto.

WebCore:

Reviewed by John Sullivan.

  • ForwardingHeaders/kjs/shared_ptr.h: Added.
  • khtml/misc/shared.h: Removed SharedPtr, and instead included <kjs/shared_ptr.h> and did some using statements to import the template into the khtml namespace.
Location:
trunk/JavaScriptCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r10354 r10399  
     12005-08-30  Darin Adler  <[email protected]>
     2
     3        Reviewed by John Sullivan.
     4
     5        - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=4758
     6          unify SharedPtr in WebCore and JavaScriptCore
     7
     8        * kjs/shared_ptr.h: Updated namespace to KXMLCore instead of kxhmlcore.
     9        Made a few small improvements to use local variables a bit more and added
     10        an "operator int" to reduce the chance that we'll convert a SharedPtr to
     11        an int by accident. Also made the == operators normal functions rather than
     12        friend functions, added a couple of comemnts.
     13
     14        * kjs/function.h: Updated for namespace change.
     15        * kjs/function.cpp: Ditto.
     16        * kjs/function_object.cpp: Ditto.
     17        * kjs/internal.h: Ditto.
     18        * kjs/internal.cpp: Ditto.
     19        * kjs/nodes.h: Ditto.
     20        * kjs/nodes2string.cpp: Ditto.
     21
    1222005-08-26  Maciej Stachowiak  <[email protected]>
    223
  • trunk/JavaScriptCore/kjs/function.cpp

    r10352 r10399  
    4444#endif
    4545
    46 using namespace kxmlcore;
     46using namespace KXMLCore;
    4747
    4848namespace KJS {
  • trunk/JavaScriptCore/kjs/function.h

    r10352 r10399  
    8383    virtual Completion execute(ExecState *exec);
    8484    CodeType codeType() const { return FunctionCode; }
    85     kxmlcore::SharedPtr<FunctionBodyNode> body;
     85    KXMLCore::SharedPtr<FunctionBodyNode> body;
    8686
    8787    virtual const ClassInfo *classInfo() const { return &info; }
  • trunk/JavaScriptCore/kjs/function_object.cpp

    r10352 r10399  
    3535
    3636using namespace KJS;
    37 using namespace kxmlcore;
     37using namespace KXMLCore;
    3838
    3939// ------------------------------ FunctionPrototypeImp -------------------------
  • trunk/JavaScriptCore/kjs/internal.cpp

    r10354 r10399  
    5454extern int kjsyyparse();
    5555
    56 using namespace kxmlcore;
     56using namespace KXMLCore;
    5757
    5858namespace KJS {
  • trunk/JavaScriptCore/kjs/internal.h

    r10354 r10399  
    197197  class Parser {
    198198  public:
    199     static kxmlcore::SharedPtr<ProgramNode> parse(const UString &sourceURL, int startingLineNumber,
     199    static KXMLCore::SharedPtr<ProgramNode> parse(const UString &sourceURL, int startingLineNumber,
    200200                                                  const UChar *code, unsigned int length, int *sourceId = 0,
    201201                                                  int *errLine = 0, UString *errMsg = 0);
  • trunk/JavaScriptCore/kjs/nodes.h

    r10354 r10399  
    205205    virtual void streamTo(SourceStream &s) const;
    206206  private:
    207     kxmlcore::SharedPtr<Node> group;
     207    KXMLCore::SharedPtr<Node> group;
    208208  };
    209209
     
    218218  private:
    219219    friend class ArrayNode;
    220     kxmlcore::SharedPtr<ElementNode> list;
     220    KXMLCore::SharedPtr<ElementNode> list;
    221221    int elision;
    222     kxmlcore::SharedPtr<Node> node;
     222    KXMLCore::SharedPtr<Node> node;
    223223  };
    224224
     
    233233    virtual void streamTo(SourceStream &s) const;
    234234  private:
    235     kxmlcore::SharedPtr<ElementNode> element;
     235    KXMLCore::SharedPtr<ElementNode> element;
    236236    int elision;
    237237    bool opt;
     
    249249  private:
    250250    friend class ObjectLiteralNode;
    251     kxmlcore::SharedPtr<PropertyNode> name;
    252     kxmlcore::SharedPtr<Node> assign;
    253     kxmlcore::SharedPtr<PropertyValueNode> list;
     251    KXMLCore::SharedPtr<PropertyNode> name;
     252    KXMLCore::SharedPtr<Node> assign;
     253    KXMLCore::SharedPtr<PropertyValueNode> list;
    254254  };
    255255
     
    261261    virtual void streamTo(SourceStream &s) const;
    262262  private:
    263     kxmlcore::SharedPtr<PropertyValueNode> list;
     263    KXMLCore::SharedPtr<PropertyValueNode> list;
    264264  };
    265265
     
    282282    virtual void streamTo(SourceStream &s) const;
    283283  private:
    284     kxmlcore::SharedPtr<Node> expr1;
    285     kxmlcore::SharedPtr<Node> expr2;
     284    KXMLCore::SharedPtr<Node> expr1;
     285    KXMLCore::SharedPtr<Node> expr2;
    286286  };
    287287
     
    293293    virtual void streamTo(SourceStream &s) const;
    294294  private:
    295     kxmlcore::SharedPtr<Node> expr;
     295    KXMLCore::SharedPtr<Node> expr;
    296296    Identifier ident;
    297297  };
     
    308308  private:
    309309    friend class ArgumentsNode;
    310     kxmlcore::SharedPtr<ArgumentListNode> list;
    311     kxmlcore::SharedPtr<Node> expr;
     310    KXMLCore::SharedPtr<ArgumentListNode> list;
     311    KXMLCore::SharedPtr<Node> expr;
    312312  };
    313313
     
    321321    virtual void streamTo(SourceStream &s) const;
    322322  private:
    323     kxmlcore::SharedPtr<ArgumentListNode> list;
     323    KXMLCore::SharedPtr<ArgumentListNode> list;
    324324  };
    325325
     
    331331    virtual void streamTo(SourceStream &s) const;
    332332  private:
    333     kxmlcore::SharedPtr<Node> expr;
    334     kxmlcore::SharedPtr<ArgumentsNode> args;
     333    KXMLCore::SharedPtr<Node> expr;
     334    KXMLCore::SharedPtr<ArgumentsNode> args;
    335335  };
    336336
     
    341341    virtual void streamTo(SourceStream &s) const;
    342342  private:
    343     kxmlcore::SharedPtr<Node> expr;
    344     kxmlcore::SharedPtr<ArgumentsNode> args;
     343    KXMLCore::SharedPtr<Node> expr;
     344    KXMLCore::SharedPtr<ArgumentsNode> args;
    345345  };
    346346
     
    352352  private:
    353353    Identifier ident;
    354     kxmlcore::SharedPtr<ArgumentsNode> args;
     354    KXMLCore::SharedPtr<ArgumentsNode> args;
    355355  };
    356356
     
    361361    virtual void streamTo(SourceStream &s) const;
    362362  protected:
    363     kxmlcore::SharedPtr<Node> base;
    364     kxmlcore::SharedPtr<Node> subscript;
    365     kxmlcore::SharedPtr<ArgumentsNode> args;
     363    KXMLCore::SharedPtr<Node> base;
     364    KXMLCore::SharedPtr<Node> subscript;
     365    KXMLCore::SharedPtr<ArgumentsNode> args;
    366366  };
    367367
     
    378378    virtual void streamTo(SourceStream &s) const;
    379379  protected:
    380     kxmlcore::SharedPtr<Node> base;
     380    KXMLCore::SharedPtr<Node> base;
    381381    Identifier ident;
    382     kxmlcore::SharedPtr<ArgumentsNode> args;
     382    KXMLCore::SharedPtr<ArgumentsNode> args;
    383383  };
    384384
     
    395395    virtual void streamTo(SourceStream &s) const;
    396396  private:
    397     kxmlcore::SharedPtr<Node> expr;
     397    KXMLCore::SharedPtr<Node> expr;
    398398    Operator oper;
    399399  };
     
    405405    virtual void streamTo(SourceStream &s) const;
    406406  private:
    407     kxmlcore::SharedPtr<Node> expr;
     407    KXMLCore::SharedPtr<Node> expr;
    408408  };
    409409
     
    414414    virtual void streamTo(SourceStream &s) const;
    415415  private:
    416     kxmlcore::SharedPtr<Node> expr;
     416    KXMLCore::SharedPtr<Node> expr;
    417417  };
    418418
     
    423423    virtual void streamTo(SourceStream &s) const;
    424424  private:
    425     kxmlcore::SharedPtr<Node> expr;
     425    KXMLCore::SharedPtr<Node> expr;
    426426  };
    427427
     
    433433  private:
    434434    Operator oper;
    435     kxmlcore::SharedPtr<Node> expr;
     435    KXMLCore::SharedPtr<Node> expr;
    436436  };
    437437
     
    442442    virtual void streamTo(SourceStream &s) const;
    443443  private:
    444     kxmlcore::SharedPtr<Node> expr;
     444    KXMLCore::SharedPtr<Node> expr;
    445445  };
    446446
     
    451451    virtual void streamTo(SourceStream &s) const;
    452452  private:
    453     kxmlcore::SharedPtr<Node> expr;
     453    KXMLCore::SharedPtr<Node> expr;
    454454  };
    455455
     
    460460    virtual void streamTo(SourceStream &s) const;
    461461  private:
    462     kxmlcore::SharedPtr<Node> expr;
     462    KXMLCore::SharedPtr<Node> expr;
    463463  };
    464464
     
    469469    virtual void streamTo(SourceStream &s) const;
    470470  private:
    471     kxmlcore::SharedPtr<Node> expr;
     471    KXMLCore::SharedPtr<Node> expr;
    472472  };
    473473
     
    478478    virtual void streamTo(SourceStream &s) const;
    479479  private:
    480     kxmlcore::SharedPtr<Node> term1;
    481     kxmlcore::SharedPtr<Node> term2;
     480    KXMLCore::SharedPtr<Node> term1;
     481    KXMLCore::SharedPtr<Node> term2;
    482482    char oper;
    483483  };
     
    489489    virtual void streamTo(SourceStream &s) const;
    490490  private:
    491     kxmlcore::SharedPtr<Node> term1;
    492     kxmlcore::SharedPtr<Node> term2;
     491    KXMLCore::SharedPtr<Node> term1;
     492    KXMLCore::SharedPtr<Node> term2;
    493493    char oper;
    494494  };
     
    501501    virtual void streamTo(SourceStream &s) const;
    502502  private:
    503     kxmlcore::SharedPtr<Node> term1;
    504     kxmlcore::SharedPtr<Node> term2;
     503    KXMLCore::SharedPtr<Node> term1;
     504    KXMLCore::SharedPtr<Node> term2;
    505505    Operator oper;
    506506  };
     
    513513    virtual void streamTo(SourceStream &s) const;
    514514  private:
    515     kxmlcore::SharedPtr<Node> expr1;
    516     kxmlcore::SharedPtr<Node> expr2;
     515    KXMLCore::SharedPtr<Node> expr1;
     516    KXMLCore::SharedPtr<Node> expr2;
    517517    Operator oper;
    518518  };
     
    525525    virtual void streamTo(SourceStream &s) const;
    526526  private:
    527     kxmlcore::SharedPtr<Node> expr1;
    528     kxmlcore::SharedPtr<Node> expr2;
     527    KXMLCore::SharedPtr<Node> expr1;
     528    KXMLCore::SharedPtr<Node> expr2;
    529529    Operator oper;
    530530  };
     
    537537    virtual void streamTo(SourceStream &s) const;
    538538  private:
    539     kxmlcore::SharedPtr<Node> expr1;
    540     kxmlcore::SharedPtr<Node> expr2;
     539    KXMLCore::SharedPtr<Node> expr1;
     540    KXMLCore::SharedPtr<Node> expr2;
    541541    Operator oper;
    542542  };
     
    552552    virtual void streamTo(SourceStream &s) const;
    553553  private:
    554     kxmlcore::SharedPtr<Node> expr1;
    555     kxmlcore::SharedPtr<Node> expr2;
     554    KXMLCore::SharedPtr<Node> expr1;
     555    KXMLCore::SharedPtr<Node> expr2;
    556556    Operator oper;
    557557  };
     
    567567    virtual void streamTo(SourceStream &s) const;
    568568  private:
    569     kxmlcore::SharedPtr<Node> logical;
    570     kxmlcore::SharedPtr<Node> expr1;
    571     kxmlcore::SharedPtr<Node> expr2;
     569    KXMLCore::SharedPtr<Node> logical;
     570    KXMLCore::SharedPtr<Node> expr1;
     571    KXMLCore::SharedPtr<Node> expr2;
    572572  };
    573573
     
    581581    Identifier m_ident;
    582582    Operator m_oper;
    583     kxmlcore::SharedPtr<Node> m_right;
     583    KXMLCore::SharedPtr<Node> m_right;
    584584  };
    585585
     
    591591    virtual void streamTo(SourceStream &s) const;
    592592  protected:
    593     kxmlcore::SharedPtr<Node> m_base;
    594     kxmlcore::SharedPtr<Node> m_subscript;
     593    KXMLCore::SharedPtr<Node> m_base;
     594    KXMLCore::SharedPtr<Node> m_subscript;
    595595    Operator m_oper;
    596     kxmlcore::SharedPtr<Node> m_right;
     596    KXMLCore::SharedPtr<Node> m_right;
    597597  };
    598598
     
    604604    virtual void streamTo(SourceStream &s) const;
    605605  protected:
    606     kxmlcore::SharedPtr<Node> m_base;
     606    KXMLCore::SharedPtr<Node> m_base;
    607607    Identifier m_ident;
    608608    Operator m_oper;
    609     kxmlcore::SharedPtr<Node> m_right;
     609    KXMLCore::SharedPtr<Node> m_right;
    610610  };
    611611
     
    616616    virtual void streamTo(SourceStream &s) const;
    617617  private:
    618     kxmlcore::SharedPtr<Node> expr1;
    619     kxmlcore::SharedPtr<Node> expr2;
     618    KXMLCore::SharedPtr<Node> expr1;
     619    KXMLCore::SharedPtr<Node> expr2;
    620620  };
    621621
     
    630630  private:
    631631    friend class CaseClauseNode;
    632     kxmlcore::SharedPtr<StatementNode> statement;
    633     kxmlcore::SharedPtr<StatListNode> list;
     632    KXMLCore::SharedPtr<StatementNode> statement;
     633    KXMLCore::SharedPtr<StatListNode> list;
    634634  };
    635635
     
    640640    virtual void streamTo(SourceStream &s) const;
    641641  private:
    642     kxmlcore::SharedPtr<Node> expr;
     642    KXMLCore::SharedPtr<Node> expr;
    643643  };
    644644
     
    653653    Type varType;
    654654    Identifier ident;
    655     kxmlcore::SharedPtr<AssignExprNode> init;
     655    KXMLCore::SharedPtr<AssignExprNode> init;
    656656  };
    657657
     
    668668    friend class ForNode;
    669669    friend class VarStatementNode;
    670     kxmlcore::SharedPtr<VarDeclListNode> list;
    671     kxmlcore::SharedPtr<VarDeclNode> var;
     670    KXMLCore::SharedPtr<VarDeclListNode> list;
     671    KXMLCore::SharedPtr<VarDeclNode> var;
    672672  };
    673673
     
    679679    virtual void streamTo(SourceStream &s) const;
    680680  private:
    681     kxmlcore::SharedPtr<VarDeclListNode> list;
     681    KXMLCore::SharedPtr<VarDeclListNode> list;
    682682  };
    683683
     
    689689    virtual void streamTo(SourceStream &s) const;
    690690  protected:
    691     kxmlcore::SharedPtr<SourceElementsNode> source;
     691    KXMLCore::SharedPtr<SourceElementsNode> source;
    692692  };
    693693
     
    705705    virtual void streamTo(SourceStream &s) const;
    706706  private:
    707     kxmlcore::SharedPtr<Node> expr;
     707    KXMLCore::SharedPtr<Node> expr;
    708708  };
    709709
     
    716716    virtual void streamTo(SourceStream &s) const;
    717717  private:
    718     kxmlcore::SharedPtr<Node> expr;
    719     kxmlcore::SharedPtr<StatementNode> statement1;
    720     kxmlcore::SharedPtr<StatementNode> statement2;
     718    KXMLCore::SharedPtr<Node> expr;
     719    KXMLCore::SharedPtr<StatementNode> statement1;
     720    KXMLCore::SharedPtr<StatementNode> statement2;
    721721  };
    722722
     
    728728    virtual void streamTo(SourceStream &s) const;
    729729  private:
    730     kxmlcore::SharedPtr<StatementNode> statement;
    731     kxmlcore::SharedPtr<Node> expr;
     730    KXMLCore::SharedPtr<StatementNode> statement;
     731    KXMLCore::SharedPtr<Node> expr;
    732732  };
    733733
     
    739739    virtual void streamTo(SourceStream &s) const;
    740740  private:
    741     kxmlcore::SharedPtr<Node> expr;
    742     kxmlcore::SharedPtr<StatementNode> statement;
     741    KXMLCore::SharedPtr<Node> expr;
     742    KXMLCore::SharedPtr<StatementNode> statement;
    743743  };
    744744
     
    753753    virtual void streamTo(SourceStream &s) const;
    754754  private:
    755     kxmlcore::SharedPtr<Node> expr1;
    756     kxmlcore::SharedPtr<Node> expr2;
    757     kxmlcore::SharedPtr<Node> expr3;
    758     kxmlcore::SharedPtr<StatementNode> statement;
     755    KXMLCore::SharedPtr<Node> expr1;
     756    KXMLCore::SharedPtr<Node> expr2;
     757    KXMLCore::SharedPtr<Node> expr3;
     758    KXMLCore::SharedPtr<StatementNode> statement;
    759759  };
    760760
     
    768768  private:
    769769    Identifier ident;
    770     kxmlcore::SharedPtr<AssignExprNode> init;
    771     kxmlcore::SharedPtr<Node> lexpr;
    772     kxmlcore::SharedPtr<Node> expr;
    773     kxmlcore::SharedPtr<VarDeclNode> varDecl;
    774     kxmlcore::SharedPtr<StatementNode> statement;
     770    KXMLCore::SharedPtr<AssignExprNode> init;
     771    KXMLCore::SharedPtr<Node> lexpr;
     772    KXMLCore::SharedPtr<Node> expr;
     773    KXMLCore::SharedPtr<VarDeclNode> varDecl;
     774    KXMLCore::SharedPtr<StatementNode> statement;
    775775  };
    776776
     
    801801    virtual void streamTo(SourceStream &s) const;
    802802  private:
    803     kxmlcore::SharedPtr<Node> value;
     803    KXMLCore::SharedPtr<Node> value;
    804804  };
    805805
     
    811811    virtual void streamTo(SourceStream &s) const;
    812812  private:
    813     kxmlcore::SharedPtr<Node> expr;
    814     kxmlcore::SharedPtr<StatementNode> statement;
     813    KXMLCore::SharedPtr<Node> expr;
     814    KXMLCore::SharedPtr<StatementNode> statement;
    815815  };
    816816
     
    825825    virtual void streamTo(SourceStream &s) const;
    826826  private:
    827     kxmlcore::SharedPtr<Node> expr;
    828     kxmlcore::SharedPtr<StatListNode> list;
     827    KXMLCore::SharedPtr<Node> expr;
     828    KXMLCore::SharedPtr<StatListNode> list;
    829829  };
    830830
     
    842842  private:
    843843    friend class CaseBlockNode;
    844     kxmlcore::SharedPtr<CaseClauseNode> cl;
    845     kxmlcore::SharedPtr<ClauseListNode> nx;
     844    KXMLCore::SharedPtr<CaseClauseNode> cl;
     845    KXMLCore::SharedPtr<ClauseListNode> nx;
    846846  };
    847847
     
    854854    virtual void streamTo(SourceStream &s) const;
    855855  private:
    856     kxmlcore::SharedPtr<ClauseListNode> list1;
    857     kxmlcore::SharedPtr<CaseClauseNode> def;
    858     kxmlcore::SharedPtr<ClauseListNode> list2;
     856    KXMLCore::SharedPtr<ClauseListNode> list1;
     857    KXMLCore::SharedPtr<CaseClauseNode> def;
     858    KXMLCore::SharedPtr<ClauseListNode> list2;
    859859  };
    860860
     
    866866    virtual void streamTo(SourceStream &s) const;
    867867  private:
    868     kxmlcore::SharedPtr<Node> expr;
    869     kxmlcore::SharedPtr<CaseBlockNode> block;
     868    KXMLCore::SharedPtr<Node> expr;
     869    KXMLCore::SharedPtr<CaseBlockNode> block;
    870870  };
    871871
     
    878878  private:
    879879    Identifier label;
    880     kxmlcore::SharedPtr<StatementNode> statement;
     880    KXMLCore::SharedPtr<StatementNode> statement;
    881881  };
    882882
     
    887887    virtual void streamTo(SourceStream &s) const;
    888888  private:
    889     kxmlcore::SharedPtr<Node> expr;
     889    KXMLCore::SharedPtr<Node> expr;
    890890  };
    891891
     
    899899  private:
    900900    Identifier ident;
    901     kxmlcore::SharedPtr<StatementNode> block;
     901    KXMLCore::SharedPtr<StatementNode> block;
    902902  };
    903903
     
    909909    virtual void streamTo(SourceStream &s) const;
    910910  private:
    911     kxmlcore::SharedPtr<StatementNode> block;
     911    KXMLCore::SharedPtr<StatementNode> block;
    912912  };
    913913
     
    924924    virtual void streamTo(SourceStream &s) const;
    925925  private:
    926     kxmlcore::SharedPtr<StatementNode> block;
    927     kxmlcore::SharedPtr<CatchNode> _catch;
    928     kxmlcore::SharedPtr<FinallyNode> _final;
     926    KXMLCore::SharedPtr<StatementNode> block;
     927    KXMLCore::SharedPtr<CatchNode> _catch;
     928    KXMLCore::SharedPtr<FinallyNode> _final;
    929929  };
    930930
     
    943943    friend class FuncExprNode;
    944944    Identifier id;
    945     kxmlcore::SharedPtr<ParameterNode> next;
     945    KXMLCore::SharedPtr<ParameterNode> next;
    946946  };
    947947
     
    965965  private:
    966966    Identifier ident;
    967     kxmlcore::SharedPtr<ParameterNode> param;
    968     kxmlcore::SharedPtr<FunctionBodyNode> body;
     967    KXMLCore::SharedPtr<ParameterNode> param;
     968    KXMLCore::SharedPtr<FunctionBodyNode> body;
    969969  };
    970970
     
    977977    virtual void streamTo(SourceStream &s) const;
    978978  private:
    979     kxmlcore::SharedPtr<ParameterNode> param;
    980     kxmlcore::SharedPtr<FunctionBodyNode> body;
     979    KXMLCore::SharedPtr<ParameterNode> param;
     980    KXMLCore::SharedPtr<FunctionBodyNode> body;
    981981  };
    982982
     
    994994  private:
    995995    friend class BlockNode;
    996     kxmlcore::SharedPtr<StatementNode> element; // 'this' element
    997     kxmlcore::SharedPtr<SourceElementsNode> elements; // pointer to next
     996    KXMLCore::SharedPtr<StatementNode> element; // 'this' element
     997    KXMLCore::SharedPtr<SourceElementsNode> elements; // pointer to next
    998998  };
    999999
  • trunk/JavaScriptCore/kjs/nodes2string.cpp

    r10352 r10399  
    2424#include "nodes.h"
    2525
    26 using namespace kxmlcore;
     26using KXMLCore::SharedPtr;
    2727
    2828namespace KJS {
  • trunk/JavaScriptCore/kjs/shared_ptr.h

    r10352 r10399  
    2424#define KXMLCORE_SHARED_PTR_H
    2525
    26 namespace kxmlcore {
     26namespace KXMLCore {
    2727
     28// FIXME: Change template name to RefPtr?
    2829template <class T> class SharedPtr
    2930{
    3031public:
    31     SharedPtr() : m_ptr(0) {}
    32     explicit SharedPtr(T *ptr) : m_ptr(ptr) { if (m_ptr) m_ptr->ref(); }
    33     SharedPtr(const SharedPtr &o) : m_ptr(o.m_ptr) { if (m_ptr) m_ptr->ref(); }
    34     ~SharedPtr() { if (m_ptr) m_ptr->deref(); }
     32    SharedPtr() : m_ptr(NULL) {}
     33    SharedPtr(T *ptr) : m_ptr(ptr) { if (ptr) ptr->ref(); }
     34    SharedPtr(const SharedPtr &o) : m_ptr(o.m_ptr) { if (T *ptr = m_ptr) ptr->ref(); }
     35    ~SharedPtr() { if (T *ptr = m_ptr) ptr->deref(); }
    3536
    36     template <class U> explicit SharedPtr(SharedPtr<U> o)  : m_ptr(o.get()) { if (m_ptr) m_ptr->ref(); }
    37        
    38     bool isNull() const { return m_ptr == 0; }
    39     bool notNull() const { return m_ptr != 0; }
     37    template <class U> SharedPtr(const SharedPtr<U> &o) : m_ptr(o.get()) { if (T *ptr = m_ptr) ptr->ref(); }
    4038
    41     void reset() { if (m_ptr) m_ptr->deref(); m_ptr = 0; }
    42     void reset(T *o) { if (o) o->ref(); if (m_ptr) m_ptr->deref(); m_ptr = o; }
     39    // FIXME: Deprecate in favor of operators below, then remove?
     40    bool isNull() const { return m_ptr == NULL; }
     41    bool notNull() const { return m_ptr != NULL; }
     42
     43    // FIXME: Deprecate in favor of operator=, then remove?
     44    void reset() { if (T *ptr = m_ptr) ptr->deref(); m_ptr = NULL; }
     45    void reset(T *o) { if (o) o->ref(); if (T *ptr = m_ptr) ptr->deref(); m_ptr = o; }
    4346   
    44     T * get() const { return m_ptr; }
     47    T *get() const { return m_ptr; }
     48
    4549    T &operator*() const { return *m_ptr; }
    4650    T *operator->() const { return m_ptr; }
    4751
    48     bool operator!() const { return m_ptr == 0; }
    49     operator bool() const { return m_ptr != 0; }
    50 
    51     inline friend bool operator==(const SharedPtr &a, const SharedPtr &b) { return a.m_ptr == b.m_ptr; }
    52     inline friend bool operator==(const SharedPtr &a, const T *b) { return a.m_ptr == b; }
    53     inline friend bool operator==(const T *a, const SharedPtr &b) { return a == b.m_ptr; }
     52    bool operator!() const { return m_ptr == NULL; }
     53    operator bool() const { return m_ptr != NULL; }
    5454
    5555    SharedPtr &operator=(const SharedPtr &);
     
    5757
    5858private:
    59     T* m_ptr;
     59    T *m_ptr;
     60
     61    operator int() const; // deliberately not implemented; helps prevent operator bool from converting to int accidentally
    6062};
    6163
    6264template <class T> SharedPtr<T> &SharedPtr<T>::operator=(const SharedPtr<T> &o)
    6365{
    64     if (o.m_ptr)
    65         o.m_ptr->ref();
    66     if (m_ptr)
    67         m_ptr->deref();
    68     m_ptr = o.m_ptr;
     66    T *optr = o.m_ptr;
     67    if (optr)
     68        optr->ref();
     69    if (T *ptr = m_ptr)
     70        ptr->deref();
     71    m_ptr = optr;
    6972    return *this;
    7073}
    7174
    72 template <class T> inline SharedPtr<T> &SharedPtr<T>::operator=(T *ptr)
     75template <class T> inline SharedPtr<T> &SharedPtr<T>::operator=(T *optr)
    7376{
    74     if (ptr)
    75         ptr->ref();
    76     if (m_ptr)
    77         m_ptr->deref();
    78     m_ptr = ptr;
     77    if (optr)
     78        optr->ref();
     79    if (T *ptr = m_ptr)
     80        ptr->deref();
     81    m_ptr = optr;
    7982    return *this;
    8083}
    8184
    82 template <class T> inline bool operator!=(const SharedPtr<T> &a, const SharedPtr<T> &b) { return !(a==b); }
    83 template <class T> inline bool operator!=(const SharedPtr<T> &a, const T *b) { return !(a == b); }
    84 template <class T> inline bool operator!=(const T *a, const SharedPtr<T> &b) { return !(a == b); }
     85template <class T> inline bool operator==(const SharedPtr<T> &a, const SharedPtr<T> &b) { return a.get() == b.get(); }
     86template <class T> inline bool operator==(const SharedPtr<T> &a, const T *b) { return a.get() == b; }
     87template <class T> inline bool operator==(const T *a, const SharedPtr<T> &b) { return a == b.get(); }
     88
     89template <class T> inline bool operator!=(const SharedPtr<T> &a, const SharedPtr<T> &b) { return a.get() != b.get(); }
     90template <class T> inline bool operator!=(const SharedPtr<T> &a, const T *b) { return a.get() != b; }
     91template <class T> inline bool operator!=(const T *a, const SharedPtr<T> &b) { return a != b.get(); }
    8592
    8693template <class T, class U> inline SharedPtr<T> static_pointer_cast(const SharedPtr<U> &p) { return SharedPtr<T>(static_cast<T *>(p.get())); }
Note: See TracChangeset for help on using the changeset viewer.