1. OctetStr Class
SNMP++之OctetStr Class的对象模型(Object Modeling Technique)视图
1.1. 八位字节类
(通过)SNMP++的Octet class,可以简单且安全地操作SMI的8位字节。有了Octet class,就不需要通过内部指针和长度来操作8位字节了。使用SNMP++的Octet class来实例化、操作、销毁一个8位字节对象是很简单的,不用担心如何管理内存以及内存是否会泄漏。与ANSI C++的string class类似,OctetStr class可以通过多种方法构造8位字节,还可以对它们进行赋值操作,与其他SNMP++ classes一起使用。
1.2. OctetStr Class的成员函数列表
OctetStr Class Member Functions | Description |
Constructors |
|
OctetStr::OctetStr( void); | 构造一个空的OctetStr |
OctetStr::OctetStr( const char* string); | 用一个没有结束符的字符串构造OctetStr |
OctetStr::OctetStr( const unsigned char *s, unsigned long int i); | 通过一个指针和长度来构造OctetStr |
OctetStr::OctetStr( const OctetStr &octet); | 用已有的OctetStr构造新的OctetStr |
Destructor |
|
OctetStr::~OctetStr( ); | 销毁一个OctetStr |
Overloaded Operators |
|
OctetStr& operator = ( const char *string); | 将一个没有结束符的字符串付给一个OctetStr |
OctetStr& operator = ( const OctetStr& octet); | 将一个OctetStr付给另一个OctetStr |
int operator == ( const OctetStr &lhs, const OctetStr &rhs); | 判断两个OctetStr对象是否相等 |
int operator == ( const OctetStr & lhs, const char *string); | 判断OctetStr是否和一个char*字符串相等 |
int operator != ( const OctetStr& lhs, const OctetStr& rhs); | 判断两个OctetStr对象是否不相等 |
int operator != ( const OctetStr& lhs, const char *string); | 判断OctetStr是否和一个char*字符串不相等 |
int operator < ( const OctetStr&lhs, const OctetStr& rhs); | 判断一个OctetStr是否比另一个小 |
int operator < ( const OctetStr &lhs, const char * string); | 判断一个OctetStr是否比另一个char *字符串小 |
int operator <= ( const OctetStr &lhs, const OctetStr &rhs); | 判断一个OctetStr是否“小于等于”另一个 |
int operator <= ( const OctetStr &lhs, const char * string); | 判断一个OctetStr是否“小于等于”一个char *的字符串 |
int operator > ( const OctetStr& lhs, const OctetStr &rhs); | 判断一个OctetStr是否比另一个大 |
int operator > ( const OctetStr& lhs, const char * string); | Test if one OctetStr is greater than a char *. 判断一个OctetStr是否比一个char *的字符串大 |
int operator >= ( const OctetStr& lhs, const OctetStr &rhs); | 判断一个OctetStr是否“大于等于”另一个 |
int operator >= ( const OctetStr& lhs, const char *); | 判断一个OctetStr是否“大于等于”一个char*的字符串 |
OctetStr& operator +=( const char * string); | 在一个OctetStr后面连接一个字符串 |
OctetStr& operator +=( const unsigned char c); | 在一个OctetStr后面连接一个单字符 |
OctetStr& operator+=( const OctetStr &octetstr); | 将两个OctetStr连接在一起 |
unsigned char& operator[ ] ( int position i); | 用数组的形式来访问一个OctetStr |
Miscellaneous |
|
void set_data( const unsigned char *s, unsigned long l); | 用指针和长度来设置一个OctetStr |
int nCompare( const unsigned long n, const OctetStr &o); | 与另一个OctetStr比较前n个元素 |
unsigned long len(); | 返回一个OctetStr的长度 |
int valid(); | 返回一个OctetStr的有效性 |
unsigned char * data(); | 返回一个指向内部数据的指针 |
char * get_printable(); | 格式化输出,如果不是ASCII则按16进制处理 |
char * get_printable_hex(); | 按16进制格式,进行格式化输出 |
1.3. 注意
当输出一个OctetStr对象时,如果该8位字节所包含的字符不是ASCII码,对成员函数char *或者get_printable()的调用,就会自动转换成对成员函数get_printable_hex()的调用。这就使得使用者只需要简单地使用成员函数char *或get_printable()来进行输出。而成员函数get_printable_hex()是专门用来把OctetStr按16进制格式输出的。
1.4. 一些OctetStr Class的例子
// Octet Class Examples #include “octet.h” void octet_example() { OctetStr octet1; // create an invalid un- initialized octet object OctetStr octet2( “Red Hook Extra Bitter Ale”); // create an octet with a string OctetStr octet3( octet2); // create an octet with another octet unsigned char raw_data[50]; // create some raw data OctetStr octet4( raw_data, 50); // create an OctetStr using unsigned char data
octet1 = “ Sierra Nevada Pale Ale”; // assign one octet to another cout << octet1.get_printable(); // show octet1 as a null terminated string cout << octet4.get_printable_hex(); // show octet4 as a hex string cout << (char *) octet1; // same as get_printable() if ( octet1 == octet2) // compare two octets cout << “octet1 is equal to octet 2” ;
octet2 += “WinterFest Ale”; // concat a string to an Octet if ( octet2 >= octet3) cout << “octet2 greater than or equal to octet 2” ;
octet2[4] = ‘b’; // modify an element of an OctetStr using [ ]’s
cout << octet.len(); // print out the length of an OctetStr
unsigned char raw_data[100]; octet1.set_data( raw_data, 100); // set the data of an to unsigned char data
// get the validity of an OctetStr cout << (octet1.valid() )? “Octet1 is valid” : “Octet1 is Invalid”;
}; // end octet example |
2. TimeTicks Class
SNMP++之TimeTicks Class的对象模型(Object Modeling Technique)视图
|
2.1. 时间戳类
SNMP++的TimeTicks Class为(使用)SMI中的timeticks带来了方便。SMI的时间戳被定义成了一种存放无符号长整形的存储单元。为了成为无符号长整形,SMI timeticks被加工成了一种特殊的类型。因此SNMP++的TimeTicks类具有无符号长整形的所有功能和属性,但同时又是一个独立的类。对无符号长整形的任何操作,拿到TimeTicks的对象上一样有效。TimeTicks class与其他SNMP++的类,比如Vb class(译注:后面将会讲到)交互的时候,还可以有些额外的操作:在使用Vb class的时候,TimeTicks的对象可以被置入Vb对象(用Vb::set),也从Vb对象中取出(用Vb::get)。也即,对于SMI timeticks,开发者可以像对无符号长整形一样来操作,并且还提供了一对一的映射关系。
2.2. TimeTicks Class的成员函数列表
TimeTicks Class Member Functions | Description |
Constructors |
|
TimeTicks::TimeTicks( void); | 构造一个空的TimeTicks对象 |
TimeTicks::TimeTicks( const unsigned long i ); | 用一个无符号长整形来构造一个TimeTicks对象 |
TimeTicks:;TimeTicks( const TimeTicks &t); | 用一个已有的TimeTicks对象来构造一个新的 |
Destructor |
|
TimeTicks::~TimeTicks( ); | 销毁一个TimeTicks对象 |
Overloaded Operators |
|
TimeTicks& operator =( const TimeTicks &t); | 重载赋值操作符 |
char * get_printable(); | 格式化输出,格式为:DD Days, HH:MM:SS.hh |
operator unsigned long(); | 把TimeTicks转换为无符号长整形 |
2.3. 注意
TimeTicks对象用TimeTicks::get_printable()输出时,其值自动被格式化为“DD days, HH:MM:SS.hh”。其中DD代表天,HH代表小时(24时制的),MM代表分钟,SS是秒钟,hh则是百分之几秒。
2.4. 一些TimeTicks Class的例子
// TimeTicks Examples #include “timetick.h” void timeticks_example() { TimeTicks tt; // create an un-initialized timeticks instance TimeTicks tt1( (unsigned long) 57); // create a timeticks using a number TimeTicks tt2( tt1); // create a timeticks using another instance
tt = 192; // overloaded assignment to a number tt2 = tt; // overloaded assignment to another timeticks
cout << tt.get_printable(); // print out in DD days, HH:MM:SS.hh cout << ( unsigned long) tt; // print out unsigned long int value
}; // end timeticks example |