ctr64.h
上传用户:ets1996
上传日期:2014-09-30
资源大小:353k
文件大小:10k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. /*_############################################################################
  2.   _## 
  3.   _##  ctr64.h  
  4.   _##
  5.   _##  SNMP++v3.2.22
  6.   _##  -----------------------------------------------
  7.   _##  Copyright (c) 2001-2007 Jochen Katz, Frank Fock
  8.   _##
  9.   _##  This software is based on SNMP++2.6 from Hewlett Packard:
  10.   _##  
  11.   _##    Copyright (c) 1996
  12.   _##    Hewlett-Packard Company
  13.   _##  
  14.   _##  ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  15.   _##  Permission to use, copy, modify, distribute and/or sell this software 
  16.   _##  and/or its documentation is hereby granted without fee. User agrees 
  17.   _##  to display the above copyright notice and this license notice in all 
  18.   _##  copies of the software and any documentation of the software. User 
  19.   _##  agrees to assume all liability for the use of the software; 
  20.   _##  Hewlett-Packard and Jochen Katz make no representations about the 
  21.   _##  suitability of this software for any purpose. It is provided 
  22.   _##  "AS-IS" without warranty of any kind, either express or implied. User 
  23.   _##  hereby grants a royalty-free license to any and all derivatives based
  24.   _##  upon this software code base. 
  25.   _##  
  26.   _##  Stuttgart, Germany, Wed May  2 23:22:30 CEST 2007 
  27.   _##  
  28.   _##########################################################################*/
  29. /*===================================================================
  30.   Copyright (c) 1999
  31.   Hewlett-Packard Company
  32.   ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  33.   Permission to use, copy, modify, distribute and/or sell this software
  34.   and/or its documentation is hereby granted without fee. User agrees
  35.   to display the above copyright notice and this license notice in all
  36.   copies of the software and any documentation of the software. User
  37.   agrees to assume all liability for the use of the software; Hewlett-Packard
  38.   makes no representations about the suitability of this software for any
  39.   purpose. It is provided "AS-IS without warranty of any kind,either express
  40.   or implied. User hereby grants a royalty-free license to any and all
  41.   derivatives based upon this software code base.
  42.   SNMP++ C O U N T E R 6 4 . H
  43.   COUNTER64 CLASSES DEFINITION
  44.   DESIGN + AUTHOR:    Peter E Mellquist
  45.   LANGUAGE:           ANSI C++
  46.   DESCRIPTION:        SNMP Counter64 class definition.
  47. =====================================================================*/
  48. // $Id: ctr64.h 287 2007-03-22 22:37:09Z katz $
  49. #ifndef _CTR64
  50. #define _CTR64
  51. #include "snmp_pp/smival.h"
  52. #ifdef SNMP_PP_NAMESPACE
  53. namespace Snmp_pp {
  54. #endif
  55. #define CTR64OUTBUF 30  //!< maximum ascii string for a 64-bit counter
  56. //---------[ 64 bit Counter Class ]--------------------------------
  57. /**
  58.  * Counter64 Class encapsulates two unsigned integers into a
  59.  * a single entity. This type has is available in SNMPv2 but
  60.  * may be used anywhere where needed.
  61.  */
  62. class DLLOPT Counter64: public  SnmpSyntax
  63. {
  64.  public:
  65.   //-----------[ Constructors and Destrucotr ]----------------------
  66.   /**
  67.    * Constructs a valid Couter64 with value 0.
  68.    */
  69.   Counter64();
  70.   /**
  71.    * Constructs a valid Counter64 with the given value as the lower 32 bits.
  72.    *
  73.    * @param lo - value (0..MAX_UINT32)
  74.    */
  75.   Counter64(unsigned long lo);
  76.   /**
  77.    * Constructs a valid Counter64 with the given values.
  78.    *
  79.    * @param hi - value for the high 32 bits (0..MAX_UINT32)
  80.    * @param lo - value for the low  32 bits (0..MAX_UINT32)
  81.    */
  82.   Counter64(unsigned long hi, unsigned long lo);
  83.   /**
  84.    * Copy constructor.
  85.    *
  86.    * @param ctr64 - value
  87.    */
  88.   Counter64(const Counter64 &ctr64);
  89.   /**
  90.    * Destructor (ensure that SnmpSyntax::~SnmpSyntax() is overridden).
  91.    */
  92.   ~Counter64() {};
  93.   //-----------[ conversion from/to long double ]----------------------
  94.   /**
  95.    * Get the value of the object as long double.
  96.    *
  97.    * @note DEPRECATED - Use conversions from/to unsigned long long
  98.    *
  99.    * @param c64 - The Counter64 object whose value should be returned
  100.    * @return value as a long double
  101.    */
  102.   static long double c64_to_ld(const Counter64 &c64);
  103.   /**
  104.    * Get the value of this object as long double.
  105.    *
  106.    * @note DEPRECATED - Use conversions from/to unsigned long long
  107.    *
  108.    * @return value as a long double
  109.    */
  110.   long double c64_to_ld() const;
  111.   /**
  112.    * Convert a long double to a Counter64.
  113.    *
  114.    * @note DEPRECATED - Use conversions from/to unsigned long long
  115.    *
  116.    * @param ld - the value to convert
  117.    * @return A Counter64 object with the value of the param ld.
  118.    */
  119.   static Counter64 ld_to_c64(const long double &ld);
  120.   //-----------[ conversion from/to unsigned long long ]----------------
  121.   /**
  122.    * Get the value of the object as 64 bit integer.
  123.    *
  124.    * @param c64 - The Counter64 object whose value should be returned
  125.    * @return value as a unsigned 64 bit integer
  126.    */
  127.   static pp_uint64 c64_to_ll(const Counter64 &c64);
  128.   /**
  129.    * Get the value of this object as 64 bit integer.
  130.    *
  131.    * @return value as a unsigned 64 bit integer
  132.    */
  133.   pp_uint64 c64_to_ll() const;
  134.   /**
  135.    * Convert a 64 bit integer to a Counter64.
  136.    *
  137.    * @param ld - the value to convert
  138.    * @return A Counter64 object with the value of the param ld.
  139.    */
  140.   static Counter64 ll_to_c64(const pp_uint64 &ll);
  141.   //-----------[ get/set using 32 bit variables ]----------------------
  142.   /**
  143.    * Get the high 32 bit part.
  144.    *
  145.    * @return The high part of the Counter64
  146.    */
  147.   unsigned long high() const { return smival.value.hNumber.hipart; };
  148.   /**
  149.    * Get the low 32 bit part.
  150.    *
  151.    * @return The low part of the Counter64
  152.    */
  153.   unsigned long low() const { return smival.value.hNumber.lopart; };
  154.   /**
  155.    * Set the high 32 bit part. The low part will stay unchanged.
  156.    *
  157.    * @param h - The new high part of the Counter64
  158.    */
  159.   void set_high(const unsigned long h)
  160.     { smival.value.hNumber.hipart = h; m_changed = true; };
  161.   /**
  162.    * Set the low 32 bit part. The high part will stay unchanged.
  163.    *
  164.    * @param l - The new low part of the Counter64
  165.    */
  166.   void set_low(const unsigned long l)
  167.     { smival.value.hNumber.lopart = l; m_changed = true; };
  168.   //-----------[ SnmpSyntax methods ]----------------------
  169.   /**
  170.    * Get a printable ASCII string representing the current value.
  171.    *
  172.    * @note The returned string is valid as long as the object is not
  173.    *       modified.
  174.    *
  175.    * @return Null terminated string.
  176.    */
  177.   const char *get_printable() const;
  178.   /**
  179.    * Get the Syntax of the object.
  180.    *
  181.    * @return This method always returns sNMP_SYNTAX_CNTR64.
  182.    */
  183.   SmiUINT32 get_syntax() const { return sNMP_SYNTAX_CNTR64; };
  184.   /**
  185.    * Clone the object.
  186.    *
  187.    * @return A cloned Counter64 object allocated through new.
  188.    */
  189.   SnmpSyntax *clone() const { return (SnmpSyntax *) new Counter64(*this); };
  190.   /**
  191.    * Overloaded assignement operator.
  192.    *
  193.    * @param val - Try to map the given value to a Counter64 and assign it
  194.    * @return Always *this with the new value.
  195.    */
  196.   SnmpSyntax& operator=(const SnmpSyntax &val);
  197.   /**
  198.    * Return validity of the object.
  199.    *
  200.    * @return Always true
  201.    */
  202.   bool valid() const { return true; };
  203.   /**
  204.    * Return the space needed for serialization.
  205.    *
  206.    * @return The needed space that depends on the current value.
  207.    */
  208.   int get_asn1_length() const;
  209.   /**
  210.    * Reset the object.
  211.    */
  212.   void clear()
  213.     { smival.value.hNumber.hipart = 0; smival.value.hNumber.lopart = 0;
  214.       m_changed = true; };
  215.   
  216.   //-----------[ overloaded operators ]----------------------
  217.   /**
  218.    * Assign a Counter64 to a Counter64.
  219.    */
  220.   Counter64& operator=(const Counter64 &ctr64);
  221.   /**
  222.    * Assign a unsigned long to a Counter64.
  223.    *
  224.    * @param i - The new low part. The high part is cleared.
  225.    */
  226.   Counter64& operator=(const unsigned long i);
  227.   /**
  228.    * Add two Counter64.
  229.    */
  230.   Counter64 operator+(const Counter64 &c) const;
  231.   /**
  232.    * Add a unsigned long and a Counter64.
  233.    */
  234.   DLLOPT friend Counter64 operator+(unsigned long ul, const Counter64 &c64)
  235.     { return Counter64(ul) + c64; };
  236.   /**
  237.    * Subtract two Counter64.
  238.    */
  239.   Counter64 operator-(const Counter64 &c) const;
  240.   /**
  241.    * Subtract a unsigned long and a Counter64.
  242.    */
  243.   DLLOPT friend Counter64 operator-(unsigned long ul, const Counter64 &c64)
  244.     { return Counter64(ul) - c64; };
  245.   /**
  246.    * Multiply two Counter64.
  247.    */
  248.   Counter64 operator*(const Counter64 &c) const;
  249.   /**
  250.    * Multiply a unsigned long and a Counter64.
  251.    */
  252.   DLLOPT friend Counter64 operator*(unsigned long ul, const Counter64 &c64)
  253.     { return Counter64(ul) * c64; };
  254.   /**
  255.    * Divide two Counter64.
  256.    */
  257.   Counter64 operator/(const Counter64 &c) const;
  258.   /**
  259.    * Divide a unsigned long and a Counter64.
  260.    */
  261.   DLLOPT friend Counter64 operator/(unsigned long ul, const Counter64 &c64)
  262.     { return Counter64(ul) / c64; };
  263.   //-------[ overloaded comparison operators ]--------------
  264.   /**
  265.    * Equal operator for two Cunter64.
  266.    */
  267.   DLLOPT friend bool operator==(const Counter64 &lhs, const Counter64 &rhs);
  268.   /**
  269.    * Not equal operator for two Cunter64.
  270.    */
  271.   DLLOPT friend bool operator!=(const Counter64 &lhs, const Counter64 &rhs);
  272.   /**
  273.    * Less than operator for two Cunter64.
  274.    */
  275.   DLLOPT friend bool operator<(const Counter64 &lhs, const Counter64 &rhs);
  276.   /**
  277.    * Less than or equal operator for two Cunter64.
  278.    */
  279.   DLLOPT friend bool operator<=(const Counter64 &lhs, const Counter64 &rhs);
  280.   /**
  281.    * Greater than operator for two Cunter64.
  282.    */
  283.   DLLOPT friend bool operator>(const Counter64 &lhs, const Counter64 &rhs);
  284.   /**
  285.    * Greater than or equal operator for two Cunter64.
  286.    */
  287.   DLLOPT friend bool operator>=(const Counter64 &lhs, const Counter64 &rhs);
  288.   bool to_asn1(unsigned char *&data,
  289.        int &datalength,
  290.        const unsigned char type);
  291.   bool from_asn1(unsigned char *&data,
  292.  int &datalength,
  293.  unsigned char &type);
  294.  private:
  295.   SNMP_PP_MUTABLE char output_buffer[CTR64OUTBUF];
  296.   SNMP_PP_MUTABLE bool m_changed;
  297. };
  298. #ifdef SNMP_PP_NAMESPACE
  299. } // end of namespace Snmp_pp
  300. #endif 
  301. #endif