integer.cpp
上传用户:czjinwang
上传日期:2007-01-12
资源大小:2484k
文件大小:6k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. /*===================================================================
  2.   Copyright (c) 1999
  3.   Hewlett-Packard Company
  4.   ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  5.   Permission to use, copy, modify, distribute and/or sell this software 
  6.   and/or its documentation is hereby granted without fee. User agrees 
  7.   to display the above copyright notice and this license notice in all 
  8.   copies of the software and any documentation of the software. User 
  9.   agrees to assume all liability for the use of the software; Hewlett-Packard 
  10.   makes no representations about the suitability of this software for any 
  11.   purpose. It is provided "AS-IS without warranty of any kind,either express 
  12.   or implied. User hereby grants a royalty-free license to any and all 
  13.   derivatives based upon this software code base. 
  14.   I N T E G E R . C P P
  15.       
  16.   SMI INTEGER CLASS IMPLEMTATION
  17.        
  18.       
  19.   VERSION: 2.8
  20.        
  21.   DESIGN: Jeff Meyer
  22.                 
  23.   AUTHOR: Jeff Meyer     
  24.               
  25.   LANGUAGE:
  26.   ANSI C++ 
  27.       
  28.   OPERATING SYSTEMS:
  29.   MS-Windows Win32
  30.   BSD UNIX
  31.       
  32.   DESCRIPTION:
  33.   Class implemtation for SMI Integer classes.
  34.       
  35. =====================================================================*/
  36. char integer_cpp_version[]="#(@)SNMP++ 2.8 $Header: integer.cpp,v 1.7 96/09/11 14:01:52 hmgr Exp $";
  37. #include "stdio.h"          // for sprintf()
  38. #include "integer.h"        // header file for gauge class 
  39. // constructor no value
  40. SnmpUInt32::SnmpUInt32( void) 
  41.    { smival.value.uNumber=0;
  42.      smival.syntax = sNMP_SYNTAX_UINT32;
  43.      valid_flag = 1;
  44.    };
  45.         
  46. // constructor with value
  47. SnmpUInt32::SnmpUInt32 (const unsigned long i)
  48.    { smival.value.uNumber=i;
  49.      smival.syntax = sNMP_SYNTAX_UINT32;
  50.      valid_flag = 1;
  51.    };
  52. // copy constructor
  53. SnmpUInt32::SnmpUInt32( const SnmpUInt32 &c)
  54.    { smival.value.uNumber=c.smival.value.uNumber;
  55.      smival.syntax = sNMP_SYNTAX_UINT32;
  56.      valid_flag = 1;
  57.    };
  58. // destructor (ensure that SnmpSyntax::~SnmpSyntax() is overridden)
  59. SnmpUInt32::~SnmpUInt32() 
  60. {};
  61. // syntax type
  62. SmiUINT32 SnmpUInt32::get_syntax()
  63. { return sNMP_SYNTAX_UINT32; };
  64. // object validity 
  65. int SnmpUInt32::valid( void) const
  66.    { return valid_flag; };
  67.  
  68. // overloaded assignment   
  69. SnmpUInt32& SnmpUInt32::operator=( const unsigned long int i) 
  70.    { smival.value.uNumber=i; 
  71.      valid_flag = 1;
  72.      return *this;
  73.    };
  74.         
  75. // general assignment from any Value
  76. SnmpSyntax& SnmpUInt32::operator=( SnmpSyntax &in_val)
  77. {
  78.   if ( this == &in_val ) // handle assignement from itself
  79.       return *this;
  80.   valid_flag = 0; // will get set true if really valid
  81.   if (in_val.valid())
  82.   {  
  83.     switch (in_val.get_syntax())
  84.     {
  85.       case sNMP_SYNTAX_UINT32:
  86.    // case sNMP_SYNTAX_GAUGE32:   .. indistinquishable from UINT32
  87.       case sNMP_SYNTAX_CNTR32:
  88.       case sNMP_SYNTAX_TIMETICKS:
  89.       case sNMP_SYNTAX_INT32: // implied cast int -> uint 
  90.   this->smival.value.uNumber = 
  91.       ((SnmpUInt32 &)in_val).smival.value.uNumber;  
  92.      valid_flag = 1;
  93.   break;
  94.     }
  95.   }
  96.   return *this;
  97. };
  98. // overloaded assignment   
  99. SnmpUInt32& SnmpUInt32::operator=( const SnmpUInt32 &uli) 
  100.    { this->smival.value.uNumber = uli.smival.value.uNumber; return *this;};
  101. // otherwise, behave like an unsigned long int
  102. SnmpUInt32::operator unsigned long()
  103. { return smival.value.uNumber; };
  104. // create a new instance of this Value
  105. SnmpSyntax* SnmpUInt32::clone() const
  106. { return (SnmpSyntax *) new SnmpUInt32(*this); };
  107. // ASCII format return
  108. char * SnmpUInt32::get_printable() 
  109.    { sprintf(output_buffer, "%d", this->smival.value.uNumber);
  110.      return output_buffer;};
  111. //====================================================================
  112. //  INT 32 Implementation
  113. //====================================================================
  114. // constructor no value
  115. SnmpInt32::SnmpInt32( void) 
  116.    { smival.value.sNumber=0;
  117.      smival.syntax = sNMP_SYNTAX_INT32;
  118.      valid_flag = 1;
  119.    };
  120.         
  121. // constructor with value
  122. SnmpInt32::SnmpInt32 (const long i) 
  123.    { smival.value.sNumber=i;
  124.      smival.syntax = sNMP_SYNTAX_INT32;
  125.      valid_flag = 1;
  126.    };
  127. // constructor with value
  128. SnmpInt32::SnmpInt32 (const SnmpInt32 &c) 
  129.    { smival.value.sNumber=c.smival.value.sNumber;
  130.      smival.syntax = sNMP_SYNTAX_INT32;
  131.      valid_flag = 1;
  132.    };
  133. // destructor 
  134. SnmpInt32::~SnmpInt32() 
  135. {};
  136. // syntax type
  137. SmiUINT32 SnmpInt32::get_syntax()
  138. { return sNMP_SYNTAX_INT32; };
  139. // object validity 
  140. int SnmpInt32::valid( void) const
  141.    { return valid_flag; };
  142.  
  143. // overloaded assignment   
  144. SnmpInt32& SnmpInt32::operator=( const long i) 
  145.    { this->smival.value.sNumber = (unsigned long) i; 
  146.      valid_flag = 1;
  147.      return *this;
  148.    };
  149.         
  150. // overloaded assignment   
  151. SnmpInt32& SnmpInt32::operator=( const SnmpInt32 &uli) 
  152.    { this->smival.value.sNumber = uli.smival.value.sNumber; 
  153.      valid_flag = 1;
  154.      return *this;
  155.    };
  156. // general assignment from any Value
  157. SnmpSyntax& SnmpInt32::operator=( SnmpSyntax &in_val)
  158. {
  159.   if ( this == &in_val ) // handle assignement from itself
  160.       return *this;
  161.   valid_flag = 0; // will get set true if really valid
  162.   if (in_val.valid())
  163.   {  
  164.     switch (in_val.get_syntax())
  165.     {
  166.       case sNMP_SYNTAX_INT32:
  167.       case sNMP_SYNTAX_UINT32: // implied cast uint -> int
  168.    // case sNMP_SYNTAX_GAUGE32:   .. indistinquishable from UINT32
  169.       case sNMP_SYNTAX_CNTR32: // implied cast uint -> int
  170.       case sNMP_SYNTAX_TIMETICKS: // implied cast uint -> int
  171.   this->smival.value.sNumber = 
  172. ((SnmpInt32 &)in_val).smival.value.sNumber;  
  173.      valid_flag = 1;
  174.   break;
  175.     }
  176.   }
  177.   return *this;
  178. };
  179. // otherwise, behave like a long int
  180. SnmpInt32::operator long()
  181.    { return (long) smival.value.sNumber; };
  182. // clone - create a new instance of this Value
  183. SnmpSyntax* SnmpInt32::clone() const
  184.    { return ( SnmpSyntax *) new SnmpInt32(*this); };
  185. // ASCII format return
  186. char * SnmpInt32::get_printable() 
  187.    { sprintf(output_buffer, "%d", (long) this->smival.value.sNumber);
  188.      return output_buffer;
  189.    };