VirtualBox

Changeset 44039 in vbox for trunk/include/VBox/com


Ignore:
Timestamp:
Dec 5, 2012 12:08:52 PM (12 years ago)
Author:
vboxsync
Message:

Main: renavation com::Guid class. PR5744

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/com/Guid.h

    r34071 r44039  
    4848{
    4949
     50typedef enum
     51    {
     52        ZERO_GUID,
     53        NORMAL_GUID,
     54        INVALID_GUID
     55    }GuidState_t;
     56
    5057/**
    5158 *  Helper class that represents the UUID type and hides platform-specific
     
    6067        ::RTUuidClear(&mUuid);
    6168        refresh();
     69        mGuidState = ZERO_GUID;
    6270    }
    6371
     
    6674        mUuid = that.mUuid;
    6775        refresh();
     76        if (isEmpty())
     77            mGuidState = ZERO_GUID;
     78        else
     79            mGuidState = NORMAL_GUID;
    6880    }
    6981
     
    7284        mUuid = that;
    7385        refresh();
     86        if (isEmpty())
     87            mGuidState = ZERO_GUID;
     88        else
     89            mGuidState = NORMAL_GUID;
    7490    }
    7591
     
    7995        ::memcpy(&mUuid, &that, sizeof(GUID));
    8096        refresh();
     97        if (isEmpty())
     98            mGuidState = ZERO_GUID;
     99        else
     100            mGuidState = NORMAL_GUID;
    81101    }
    82102
     
    92112    Guid(const char *that)
    93113    {
     114        mGuidState = NORMAL_GUID;
     115
    94116        int rc = ::RTUuidFromStr(&mUuid, that);
     117
    95118        if (RT_FAILURE(rc))
     119        {
    96120            ::RTUuidClear(&mUuid);
     121            mGuidState = INVALID_GUID;
     122        }
     123        else if(isEmpty())
     124            mGuidState = ZERO_GUID;
    97125        refresh();
    98126    }
     
    109137    Guid(const Bstr &that)
    110138    {
    111         int rc = !that.isEmpty()
    112                ? ::RTUuidFromUtf16(&mUuid, that.raw())
    113                : VERR_INVALID_UUID_FORMAT;
     139        mGuidState = NORMAL_GUID;
     140
     141        if (that.isEmpty())
     142        {
     143            ::RTUuidClear(&mUuid);
     144            mGuidState = ZERO_GUID;
     145        }
     146        else
     147        {
     148            int rc = ::RTUuidFromUtf16(&mUuid, that.raw());
     149            if (RT_FAILURE(rc))
     150            {
     151                ::RTUuidClear(&mUuid);
     152                mGuidState = INVALID_GUID;
     153            }
     154        }
     155
     156        refresh();
     157    }
     158
     159    Guid& operator=(const Guid &that)
     160    {
     161        mGuidState = NORMAL_GUID;
     162        ::memcpy(&mUuid, &that.mUuid, sizeof (RTUUID));
     163        if (isEmpty())
     164            mGuidState = ZERO_GUID;
     165        refresh();
     166        return *this;
     167    }
     168    Guid& operator=(const GUID &guid)
     169    {
     170        mGuidState = NORMAL_GUID;
     171        ::memcpy(&mUuid, &guid, sizeof (GUID));
     172        if (isEmpty())
     173            mGuidState = ZERO_GUID;
     174        refresh();
     175        return *this;
     176    }
     177    Guid& operator=(const RTUUID &guid)
     178    {
     179        mGuidState = NORMAL_GUID;
     180        ::memcpy(&mUuid, &guid, sizeof (RTUUID));
     181        if (isEmpty())
     182            mGuidState = ZERO_GUID;
     183        refresh();
     184        return *this;
     185    }
     186    Guid& operator=(const char *str)
     187    {
     188        mGuidState = NORMAL_GUID;
     189        int rc = ::RTUuidFromStr(&mUuid, str);
     190
    114191        if (RT_FAILURE(rc))
     192        {
    115193            ::RTUuidClear(&mUuid);
    116         refresh();
    117     }
    118 
    119     Guid& operator=(const Guid &that)
    120     {
    121         ::memcpy(&mUuid, &that.mUuid, sizeof (RTUUID));
    122         refresh();
    123         return *this;
    124     }
    125     Guid& operator=(const GUID &guid)
    126     {
    127         ::memcpy(&mUuid, &guid, sizeof (GUID));
    128         refresh();
    129         return *this;
    130     }
    131     Guid& operator=(const RTUUID &guid)
    132     {
    133         ::memcpy(&mUuid, &guid, sizeof (RTUUID));
    134         refresh();
    135         return *this;
    136     }
    137     Guid& operator=(const char *str)
    138     {
    139         int rc = ::RTUuidFromStr(&mUuid, str);
    140         if (RT_FAILURE(rc))
    141             ::RTUuidClear(&mUuid);
    142         refresh();
     194            mGuidState = INVALID_GUID;
     195        }
     196        else
     197        {
     198            if (isEmpty())
     199            mGuidState = ZERO_GUID;
     200        }
     201
     202        refresh();
     203
    143204        return *this;
    144205    }
     
    147208    {
    148209        ::RTUuidCreate(&mUuid);
     210        mGuidState = NORMAL_GUID;
    149211        refresh();
    150212    }
     
    152214    {
    153215        ::RTUuidClear(&mUuid);
     216        mGuidState = ZERO_GUID;
    154217        refresh();
    155218    }
     
    164227    {
    165228        char buf[RTUUID_STR_LENGTH];
     229
     230        ::memset(buf,0,RTUUID_STR_LENGTH);
     231
     232        if (mGuidState == INVALID_GUID)
     233        {
     234            /* What to return in case of wrong Guid */
     235            return Utf8Str("00000000-0000-0000-0000-00000000000");
     236        }
     237
    166238        ::RTUuidToStr(&mUuid, buf, RTUUID_STR_LENGTH);
     239
     240
    167241        return Utf8Str(buf);
    168242    }
     
    176250    Utf8Str toStringCurly() const
    177251    {
     252
     253        if (mGuidState == INVALID_GUID)
     254        {
     255            /* What to return in case of wrong Guid */
     256            return Utf8Str("{00000000-0000-0000-0000-00000000000}");
     257        }
     258
    178259        char buf[RTUUID_STR_LENGTH + 2] = "{";
     260
    179261        ::RTUuidToStr(&mUuid, buf + 1, RTUUID_STR_LENGTH);
    180262        buf[sizeof(buf) - 2] = '}';
    181263        buf[sizeof(buf) - 1] = '\0';
     264
    182265        return Utf8Str(buf);
    183266    }
     
    191274    Bstr toUtf16() const
    192275    {
    193         if (isEmpty())
    194           return Bstr();
     276        if (mGuidState == INVALID_GUID)
     277          return Bstr("00000000-0000-0000-0000-00000000000");
    195278
    196279        RTUTF16 buf[RTUUID_STR_LENGTH];
     
    199282    }
    200283
    201     bool isEmpty() const
    202     {
    203         return ::RTUuidIsNull(&mUuid);
    204     }
    205 
    206     bool isNotEmpty() const
    207     {
    208         return !::RTUuidIsNull(&mUuid);
     284    bool isValid() const
     285    {
     286        bool res = true;
     287        if (mGuidState == INVALID_GUID)
     288            res = false;
     289
     290        return res;
     291    }
     292
     293    bool isZero() const
     294    {
     295        return (::RTUuidIsNull(&mUuid) && mGuidState == ZERO_GUID);
    209296    }
    210297
     
    257344        if (ppGuid)
    258345            *ppGuid = (nsID *)nsMemory::Clone(&mUuid, sizeof(nsID));
     346
    259347        return *this;
    260348    }
     
    309397    static const Guid Empty;
    310398
     399protected:
     400
     401    bool isEmpty() const
     402    {
     403        return ::RTUuidIsNull(&mUuid);
     404    }
     405
     406    bool isNotEmpty() const
     407    {
     408        return !::RTUuidIsNull(&mUuid);
     409    }
     410
    311411private:
    312412    /**
     
    327427    /** The UUID. */
    328428    RTUUID mUuid;
     429
     430    GuidState_t mGuidState;
    329431
    330432#ifdef DEBUG
     
    335437#endif
    336438};
    337 
     439/*
    338440inline Bstr asGuidStr(const Bstr& str)
    339441{
     
    341443   return guid.isEmpty() ? Bstr() : guid.toUtf16();
    342444}
    343 
     445*/
    344446inline bool isValidGuid(const Bstr& str)
    345447{
    346448   Guid guid(str);
    347    return !guid.isEmpty();
     449   return guid.isValid();
     450//   return !guid.isEmpty();
    348451}
    349452
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette