netint32.h
来自「一个语言识别引擎」· C头文件 代码 · 共 216 行
H
216 行
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
/*
* Copyright (C) 2006 Paul Fitzpatrick
* CopyPolicy: Released under the terms of the GNU GPL v2.0.
*
*/
#ifndef _YARP2_NETINT32_
#define _YARP2_NETINT32_
// Sleazy trick for big endian systems we haven't tested on yet.
// The two files NetInt32.h and NetFloat64.h need to be cleaned up.
// They can be much simplified by deferring to cmake/autoconf.
#ifdef YARP_BIG_ENDIAN
#define YARP2_OSX
#endif
namespace yarp {
namespace os {
/**
* Definition of the NetInt32 type
*/
#ifdef WIN32
#ifndef YARP2_WINDOWS
#define YARP2_WINDOWS
#endif
#endif
#ifdef CYGWIN
#ifndef YARP2_CYGWIN
#define YARP2_CYGWIN
#endif
#endif
#ifdef _WIN32
#ifndef YARP2_WINDOWS
#define YARP2_WINDOWS
#endif
#endif
#ifdef WINDOW2
#ifndef YARP2_WINDOWS
#define YARP2_WINDOWS
#endif
#endif
#ifdef __WIN__
#ifndef YARP2_WINDOWS
#define YARP2_WINDOWS
#endif
#endif
#ifdef __WINDOWS__
#ifndef YARP2_WINDOWS
#define YARP2_WINDOWS
#endif
#endif
#ifdef WINDOWS
#ifndef YARP2_WINDOWS
#define YARP2_WINDOWS
#endif
#endif
#ifdef __LINUX__
#ifndef YARP2_LINUX
#define YARP2_LINUX
#endif
#endif
#ifdef __linux__
#ifndef YARP2_LINUX
#define YARP2_LINUX
#endif
#endif
#ifdef __darwin__
#ifndef YARP2_OSX
#define YARP2_OSX
#endif
#endif
#ifdef __DARWIN__
#ifndef YARP2_OSX
#define YARP2_OSX
#endif
#endif
#ifdef DARWIN
#ifndef YARP2_OSX
#define YARP2_OSX
#endif
#endif
#ifdef MACOSX
#ifndef YARP2_OSX
#define YARP2_OSX
#endif
#endif
#ifdef __APPLE__
#ifndef YARP2_OSX
#define YARP2_OSX
#endif
#endif
#ifdef YARP2_LINUX
typedef int NetInt32;
//typedef int32_t NetInt32;
#else
# ifdef YARP2_WINDOWS
typedef __int32 NetInt32;
#else
# ifdef YARP2_CYGWIN
typedef int NetInt32;
# else
# ifdef YARP2_OSX
// in general, this has to come before any reference to sys/types.h
#include <ace/config.h>
/* OSX begins*/
#ifndef YARP_LITTLE_ENDIAN
#include <sys/types.h>
typedef int32_t RawNetInt32;
class NetInt32 {
private:
int32_t raw_value;
int32_t swap(uint32_t x) const {
return (x>>24) | ((x>>8) & 0xff00) | ((x<<8) & 0xff0000) | (x<<24);
}
RawNetInt32 get() const {
return (int32_t)swap((uint32_t)raw_value);
}
void set(RawNetInt32 v) {
raw_value = (int32_t)swap((uint32_t)v);
}
public:
NetInt32() {
}
NetInt32(RawNetInt32 val) {
set(val);
}
operator RawNetInt32() const {
return get();
}
RawNetInt32 operator+(RawNetInt32 v) const {
return get()+v;
}
RawNetInt32 operator-(RawNetInt32 v) const {
return get()-v;
}
RawNetInt32 operator*(RawNetInt32 v) const {
return get()*v;
}
RawNetInt32 operator/(RawNetInt32 v) const {
return get()/v;
}
void operator+=(RawNetInt32 v) {
set(get()+v);
}
void operator-=(RawNetInt32 v) {
set(get()-v);
}
void operator*=(RawNetInt32 v) {
set(get()*v);
}
void operator/=(RawNetInt32 v) {
set(get()/v);
}
};
#else
// not really guaranteed to have this
#include <sys/types.h>
typedef int32_t NetInt32;
#endif
/* OSX ends*/
# else
// now we have to assume we are using autoconf etc
#undef PACKAGE_BUGREPORT
#undef PACKAGE_NAME
#undef PACKAGE_STRING
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION
# include <yarp/conf/yarp-config.h>
# if !(WORDS_BIGENDIAN)
#if SIZEOF_INT == 4
typedef int NetInt32;
#else
#if SIZEOF_SHORT == 4
typedef short NetInt32;
#else
# error "could not choose NetInt32 type; see yarp/os/NetInt32.h"
#endif
#endif
# else
# error "need to define NetInt32 for this OS; see yarp/os/NetInt32.h"
# endif
# endif
# endif
#endif
#endif
}
}
#endif /* _YARP2_NETINT32_ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?