/////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1998, Microsoft Corp. All rights reserved. // // FILE // // snmpoid.cpp // // SYNOPSIS // // Defines the class SnmpOid. // // MODIFICATION HISTORY // // 09/10/1998 Original version. // /////////////////////////////////////////////////////////////////////////////// #include #include SnmpOid& SnmpOid::operator=(const AsnObjectIdentifier& a) { // Note: self-assignment is benign, so we don't bother to check. resize(a.idLength); memcpy(oid.ids, a.ids, length() * sizeof(UINT)); return *this; } bool SnmpOid::isChildOf(const AsnObjectIdentifier& parent) const throw () { if (length() < parent.idLength) { return false; } return SnmpUtilOidNCmp( *this, const_cast(&parent), parent.idLength ) == 0; } void SnmpOid::resize(UINT newLength) { if (newLength <= length()) { // Truncation is easy. oid.idLength = newLength; } else { // Try to extend our buffer. PVOID p = SnmpUtilMemReAlloc(oid.ids, newLength * sizeof(UINT)); if (p == NULL) { throw (AsnInteger32)SNMP_MEM_ALLOC_ERROR; } // Swap in the extended buffer. oid.ids = (UINT*)p; // Zero out the added ID's. memset(oid.ids + length(), 0, (newLength - length()) * sizeof(UINT)); // Update our length. oid.idLength = newLength; } }