From 0dcedf8faa5e7df647cd612d55ef049b3db3821e Mon Sep 17 00:00:00 2001 From: Alex Kotlar Date: Thu, 16 Nov 2017 13:13:41 -0500 Subject: [PATCH 1/3] added float32 option --- lib/Data/MessagePack.pm | 4 ++-- lib/Data/MessagePack/PP.pm | 16 +++++++++++++++- t/01_pack.t | 16 +++++++++++++++- t/25_single_float.t | 20 ++++++++++++++++++++ xs-src/pack.c | 13 ++++++++++++- 5 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 t/25_single_float.t diff --git a/lib/Data/MessagePack.pm b/lib/Data/MessagePack.pm index 9eb6f62..8b95beb 100644 --- a/lib/Data/MessagePack.pm +++ b/lib/Data/MessagePack.pm @@ -4,7 +4,6 @@ use warnings; use 5.008001; our $VERSION = '1.00'; - sub true () { require Data::MessagePack::Boolean; no warnings 'once'; @@ -36,7 +35,7 @@ sub new { return bless \%args, $class; } -foreach my $name(qw(canonical prefer_integer utf8)) { +foreach my $name(qw(canonical prefer_integer prefer_float32 utf8)) { my $setter = sub { my($self, $value) = @_; $self->{$name} = defined($value) ? $value : 1; @@ -49,6 +48,7 @@ foreach my $name(qw(canonical prefer_integer utf8)) { no strict 'refs'; *{$name} = $setter; *{'get_' . $name} = $getter; + } diff --git a/lib/Data/MessagePack/PP.pm b/lib/Data/MessagePack/PP.pm index 5d85c31..670984b 100644 --- a/lib/Data/MessagePack/PP.pm +++ b/lib/Data/MessagePack/PP.pm @@ -87,11 +87,17 @@ BEGIN { my @v = unpack( 'V2', pack( 'q', $_[0] ) ); return pack 'CN2', 0xd3, @v[1,0]; }; + *pack_double = $pack_double_oabi || sub { my @v = unpack( 'V2', pack( 'd', $_[0] ) ); return pack 'CN2', 0xcb, @v[1,0]; }; + *pack_float = sub { + my @v = unpack( 'V2', pack( 'f', $_[0] ) ); + return pack 'CN2', 0xca, @v[1,0]; + }; + *unpack_float = sub { my @v = unpack( 'v2', substr( $_[0], $_[1], 4 ) ); return unpack( 'f', pack( 'n2', @v[1,0] ) ); @@ -113,6 +119,7 @@ BEGIN { else { # big endian *pack_uint64 = sub { return pack 'CQ', 0xcf, $_[0]; }; *pack_int64 = sub { return pack 'Cq', 0xd3, $_[0]; }; + *pack_float = sub { return pack 'Cf', 0xca, $_[0]; }; *pack_double = $pack_double_oabi || sub { return pack 'Cd', 0xcb, $_[0]; }; *unpack_float = sub { return unpack( 'f', substr( $_[0], $_[1], 4 ) ); }; @@ -139,6 +146,7 @@ BEGIN { # pack_int64/uint64 are used only when the perl support quad types *pack_uint64 = sub { return pack 'CQ>', 0xcf, $_[0]; }; *pack_int64 = sub { return pack 'Cq>', 0xd3, $_[0]; }; + *pack_float = sub { return pack 'Cf>', 0xca, $_[0]; }; *pack_double = $pack_double_oabi || sub { return pack 'Cd>', 0xcb, $_[0]; }; *unpack_float = sub { return unpack( 'f>', substr( $_[0], $_[1], 4 ) ); }; @@ -175,6 +183,7 @@ sub pack :method { Carp::croak('Usage: Data::MessagePack->pack($dat [,$max_depth])') if @_ < 2; $_max_depth = defined $max_depth ? $max_depth : 512; # init + # back-compat if(not ref $self) { $self = $self->new( prefer_integer => $Data::MessagePack::PreferInteger || 0, @@ -271,7 +280,12 @@ sub _pack { return $header . $value; } - elsif( $flags & B::SVp_NOK ) { # double only + elsif( $flags & B::SVp_NOK ) { + # double unless user prefers single precision + if($self->{prefer_float32}) { + return pack_float( $value ); + } + return pack_double( $value ); } elsif ( $flags & B::SVp_IOK ) { diff --git a/t/01_pack.t b/t/01_pack.t index 99f0ca0..84deca5 100644 --- a/t/01_pack.t +++ b/t/01_pack.t @@ -19,6 +19,13 @@ sub packit_utf8 { $_; } +sub packit_float32 { + local $_ = unpack("H*", Data::MessagePack->new->prefer_float32->pack($_[0])); + s/(..)/$1 /g; + s/ $//; + $_; +} + sub pis ($$) { is packit($_[0]), $_[1], 'dump ' . $_[1]; } @@ -27,6 +34,10 @@ sub pis_utf8 ($$) { is packit_utf8($_[0]), $_[1], 'dump ' . $_[1]; } +sub pis_float32 ($$) { + is packit_float32($_[0]), $_[1], 'dump ' . $_[1]; +} + my @dat = ( 0, '00', (my $foo="0")+0, '00', @@ -88,7 +99,7 @@ my @dat_utf8 = ( 'a' x 0x0100, 'da 01 00' . (' 61' x 0x0100), ); -plan tests => 1*(scalar(@dat)/2) + 1*(scalar(@dat_utf8)/2); +plan tests => 1*(scalar(@dat)/2) + 1*(scalar(@dat_utf8)/2) + 1; for (my $i=0; $i 8, + 'Test::More', skip_all => 'long double is not supported'; +use Test::More; +use Data::MessagePack; + +my $mp = Data::MessagePack->new(); +$mp->prefer_float32(); + +foreach my $float(0.123, 3.14) { + is $mp->unpack($mp->pack($float)), unpack('f', pack('f',$float)); + + scalar( $float > 0 ); + + is $mp->unpack($mp->pack($float)), unpack('f', pack('f',$float)); +} +done_testing; + diff --git a/xs-src/pack.c b/xs-src/pack.c index f09a747..7807cb9 100644 --- a/xs-src/pack.c +++ b/xs-src/pack.c @@ -19,6 +19,7 @@ typedef struct { SV *sv; /* result scalar */ bool prefer_int; + bool prefer_float32; bool canonical; } enc_t; @@ -191,7 +192,11 @@ STATIC_INLINE void _msgpack_pack_sv(pTHX_ enc_t* const enc, SV* const sv, int co } } } else if (SvNOKp(sv)) { - msgpack_pack_double(enc, (double)SvNVX(sv)); + if(enc->prefer_float32) { + msgpack_pack_float(enc, (float)SvNVX(sv)); + } else { + msgpack_pack_double(enc, (double)SvNVX(sv)); + } } else if (SvIOKp(sv)) { if(SvUOK(sv)) { PACK_UV(enc, SvUVX(sv)); @@ -323,6 +328,7 @@ XS(xs_pack) { // setup configuration dMY_CXT; enc.prefer_int = MY_CXT.prefer_int; // back compat + enc.prefer_float32 = false; if(SvROK(self) && SvTYPE(SvRV(self)) == SVt_PVHV) { HV* const hv = (HV*)SvRV(self); SV** svp; @@ -332,6 +338,11 @@ XS(xs_pack) { enc.prefer_int = SvTRUE(*svp) ? true : false; } + svp = hv_fetchs(hv, "prefer_float32", FALSE); + if(svp) { + enc.prefer_float32 = SvTRUE(*svp) ? true : false; + } + svp = hv_fetchs(hv, "canonical", FALSE); if(svp) { enc.canonical = SvTRUE(*svp) ? true : false; From b2f40347e6feda091ea514b70208711db2f54758 Mon Sep 17 00:00:00 2001 From: Alex Kotlar Date: Fri, 17 Nov 2017 22:23:12 -0500 Subject: [PATCH 2/3] updated msgpack-c dependency --- Makefile.PL | 9 +++------ msgpack-c | 2 +- xs-src/unpack.c | 1 + 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Makefile.PL b/Makefile.PL index c796dd7..d5d1880 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -29,9 +29,9 @@ if ( $] >= 5.008005 and want_xs() ) { cc_warnings; cc_include_paths('include'); cc_src_paths('xs-src'); - postamble (qq{ + postamble (qq{ xs-src/pack.o : xshelper.h include/msgpack/pack_define.h include/msgpack/pack_template.h include/msgpack/sysdep.h -xs-src/unpack.o : xshelper.h include/msgpack/unpack_define.h include/msgpack/unpack_template.h include/msgpack/sysdep.h +xs-src/unpack.o : xshelper.h include/msgpack/unpack.h include/msgpack/unpack_define.h include/msgpack/unpack_template.h include/msgpack/sysdep.h }); if($Module::Install::AUTHOR) { @@ -126,10 +126,7 @@ sub init_msgpack { my %msgpack_header = ( 'include' => ['msgpack-c/include/msgpack.h'], - 'include/msgpack' => [, - , - 'msgpack-c/include/msgpack/sysdep.h', - 'msgpack-c/include/msgpack/predef.h'], + 'include/msgpack' => [], 'include/msgpack/predef' => ['msgpack-c/include/msgpack/predef'], ); diff --git a/msgpack-c b/msgpack-c index cabd8a8..83a4b89 160000 --- a/msgpack-c +++ b/msgpack-c @@ -1 +1 @@ -Subproject commit cabd8a8a038c78e569db06d2f3f812da28191cf4 +Subproject commit 83a4b89818d4ed3b84d69cbf36e782c641ffab53 diff --git a/xs-src/unpack.c b/xs-src/unpack.c index 2cefee4..849dd88 100644 --- a/xs-src/unpack.c +++ b/xs-src/unpack.c @@ -1,5 +1,6 @@ #define NEED_newRV_noinc #define NEED_sv_2pv_flags +#include "msgpack/unpack.h" #include "xshelper.h" #define MY_CXT_KEY "Data::MessagePack::_unpack_guts" XS_VERSION From 6fe098dd91e705b12c68d63bcb1f31c369c81e01 Mon Sep 17 00:00:00 2001 From: "Alex V. Kotlar" Date: Fri, 28 Apr 2023 06:12:58 -0400 Subject: [PATCH 3/3] [chore] Merge 2023-04-28 upstream (#2) * migrate to Minilla * perl author/update-msgpack-c.pl 1.4.0 * Fix test for newer Windows Perl(>= 5.30.0) * update .travis.yml * minil build * Checking in changes prior to tagging of version 1.01. Changelog diff is: diff --git a/Changes b/Changes index 002d7c8..da396f2 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,11 @@ Revision history for Perl extension Data-MessagePack {{$NEXT}} +1.01 2020-03-17T17:06:53Z + + - Switch to Minilla from Module::Install + - Fix test for newer Windows Perl + 1.00 2016-08-21 15:30:00+0900 - Update major version for MessagePack versioning rule * Skip 05_preferred_int if use_quadmath is enabled Overflowed integer literal value like 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF is different between use_quadmath enabled perl and use_quadmath disabled perl(default). * Switch to github actions * Checking in changes prior to tagging of version 1.02. Changelog diff is: diff --git a/Changes b/Changes index da396f2..49cf9c5 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,9 @@ Revision history for Perl extension Data-MessagePack {{$NEXT}} +1.02 2022-03-11T14:27:47Z + - Fix test for usequadmath Perl + 1.01 2020-03-17T17:06:53Z - Switch to Minilla from Module::Install --------- Co-authored-by: Shoichi Kaji Co-authored-by: Shohei YOSHIDA Co-authored-by: Shohei YOSHIDA --- .github/workflows/linux.yml | 29 + .gitignore | 8 +- .gitmodules | 3 - .shipit | 4 - .travis.yml | 9 - Build.PL | 72 ++ Changes | 12 + MANIFEST.SKIP | 33 - META.json | 138 +++ Makefile.PL | 153 --- README | 177 ---- README.md | 206 ++++ author/update-msgpack-c.pl | 52 + builder/MyBuilder.pm | 39 + cpanfile | 17 + include/msgpack-c-version | 1 + include/msgpack/fbuffer.h | 38 + include/msgpack/gcc_atomic.h | 25 + include/msgpack/object.h | 111 +++ include/msgpack/pack.h | 147 +++ include/msgpack/pack_define.h | 18 + include/msgpack/pack_template.h | 909 ++++++++++++++++++ include/msgpack/predef.h | 19 + include/msgpack/predef/architecture.h | 30 + include/msgpack/predef/architecture/alpha.h | 60 ++ include/msgpack/predef/architecture/arm.h | 71 ++ .../msgpack/predef/architecture/blackfin.h | 47 + include/msgpack/predef/architecture/convex.h | 67 ++ include/msgpack/predef/architecture/ia64.h | 49 + include/msgpack/predef/architecture/m68k.h | 83 ++ include/msgpack/predef/architecture/mips.h | 74 ++ include/msgpack/predef/architecture/parisc.h | 65 ++ include/msgpack/predef/architecture/ppc.h | 73 ++ include/msgpack/predef/architecture/pyramid.h | 43 + include/msgpack/predef/architecture/rs6k.h | 56 ++ include/msgpack/predef/architecture/sparc.h | 55 ++ include/msgpack/predef/architecture/superh.h | 68 ++ include/msgpack/predef/architecture/sys370.h | 44 + include/msgpack/predef/architecture/sys390.h | 44 + include/msgpack/predef/architecture/x86.h | 38 + include/msgpack/predef/architecture/x86/32.h | 87 ++ include/msgpack/predef/architecture/x86/64.h | 50 + include/msgpack/predef/architecture/z.h | 43 + include/msgpack/predef/compiler.h | 41 + include/msgpack/predef/compiler/borland.h | 64 ++ include/msgpack/predef/compiler/clang.h | 57 ++ include/msgpack/predef/compiler/comeau.h | 62 ++ include/msgpack/predef/compiler/compaq.h | 67 ++ include/msgpack/predef/compiler/diab.h | 57 ++ include/msgpack/predef/compiler/digitalmars.h | 57 ++ include/msgpack/predef/compiler/dignus.h | 57 ++ include/msgpack/predef/compiler/edg.h | 57 ++ include/msgpack/predef/compiler/ekopath.h | 58 ++ include/msgpack/predef/compiler/gcc.h | 69 ++ include/msgpack/predef/compiler/gcc_xml.h | 53 + include/msgpack/predef/compiler/greenhills.h | 67 ++ include/msgpack/predef/compiler/hp_acc.h | 62 ++ include/msgpack/predef/compiler/iar.h | 57 ++ include/msgpack/predef/compiler/ibm.h | 73 ++ include/msgpack/predef/compiler/intel.h | 66 ++ include/msgpack/predef/compiler/kai.h | 57 ++ include/msgpack/predef/compiler/llvm.h | 58 ++ include/msgpack/predef/compiler/metaware.h | 54 ++ include/msgpack/predef/compiler/metrowerks.h | 78 ++ include/msgpack/predef/compiler/microtec.h | 54 ++ include/msgpack/predef/compiler/mpw.h | 64 ++ include/msgpack/predef/compiler/palm.h | 57 ++ include/msgpack/predef/compiler/pgi.h | 61 ++ include/msgpack/predef/compiler/sgi_mipspro.h | 67 ++ include/msgpack/predef/compiler/sunpro.h | 67 ++ include/msgpack/predef/compiler/tendra.h | 54 ++ include/msgpack/predef/compiler/visualc.h | 92 ++ include/msgpack/predef/compiler/watcom.h | 57 ++ include/msgpack/predef/detail/_cassert.h | 17 + include/msgpack/predef/detail/_exception.h | 15 + include/msgpack/predef/detail/comp_detected.h | 10 + include/msgpack/predef/detail/endian_compat.h | 26 + include/msgpack/predef/detail/os_detected.h | 10 + .../msgpack/predef/detail/platform_detected.h | 10 + include/msgpack/predef/detail/test.h | 17 + include/msgpack/predef/language.h | 15 + include/msgpack/predef/language/objc.h | 43 + include/msgpack/predef/language/stdc.h | 54 ++ include/msgpack/predef/language/stdcpp.h | 124 +++ include/msgpack/predef/library.h | 14 + include/msgpack/predef/library/c.h | 18 + include/msgpack/predef/library/c/_prefix.h | 13 + include/msgpack/predef/library/c/gnu.h | 62 ++ include/msgpack/predef/library/c/uc.h | 48 + include/msgpack/predef/library/c/vms.h | 48 + include/msgpack/predef/library/c/zos.h | 57 ++ include/msgpack/predef/library/std.h | 23 + include/msgpack/predef/library/std/_prefix.h | 23 + include/msgpack/predef/library/std/cxx.h | 47 + .../msgpack/predef/library/std/dinkumware.h | 53 + include/msgpack/predef/library/std/libcomo.h | 48 + include/msgpack/predef/library/std/modena.h | 46 + include/msgpack/predef/library/std/msl.h | 54 ++ .../msgpack/predef/library/std/roguewave.h | 57 ++ include/msgpack/predef/library/std/sgi.h | 52 + include/msgpack/predef/library/std/stdcpp3.h | 54 ++ include/msgpack/predef/library/std/stlport.h | 60 ++ include/msgpack/predef/library/std/vacpp.h | 45 + include/msgpack/predef/make.h | 89 ++ include/msgpack/predef/os.h | 31 + include/msgpack/predef/os/aix.h | 67 ++ include/msgpack/predef/os/amigaos.h | 47 + include/msgpack/predef/os/android.h | 46 + include/msgpack/predef/os/beos.h | 46 + include/msgpack/predef/os/bsd.h | 95 ++ include/msgpack/predef/os/bsd/bsdi.h | 48 + include/msgpack/predef/os/bsd/dragonfly.h | 50 + include/msgpack/predef/os/bsd/free.h | 60 ++ include/msgpack/predef/os/bsd/net.h | 84 ++ include/msgpack/predef/os/bsd/open.h | 171 ++++ include/msgpack/predef/os/cygwin.h | 46 + include/msgpack/predef/os/haiku.h | 47 + include/msgpack/predef/os/hpux.h | 48 + include/msgpack/predef/os/ios.h | 51 + include/msgpack/predef/os/irix.h | 47 + include/msgpack/predef/os/linux.h | 47 + include/msgpack/predef/os/macos.h | 66 ++ include/msgpack/predef/os/os400.h | 46 + include/msgpack/predef/os/qnxnto.h | 60 ++ include/msgpack/predef/os/solaris.h | 47 + include/msgpack/predef/os/unix.h | 76 ++ include/msgpack/predef/os/vms.h | 53 + include/msgpack/predef/os/windows.h | 51 + include/msgpack/predef/other.h | 14 + include/msgpack/predef/other/endian.h | 205 ++++ include/msgpack/predef/platform.h | 19 + include/msgpack/predef/platform/mingw.h | 70 ++ .../msgpack/predef/platform/windows_desktop.h | 44 + .../msgpack/predef/platform/windows_phone.h | 42 + .../msgpack/predef/platform/windows_runtime.h | 44 + .../msgpack/predef/platform/windows_store.h | 42 + include/msgpack/predef/version.h | 15 + include/msgpack/predef/version_number.h | 54 ++ include/msgpack/sbuffer.h | 110 +++ include/msgpack/sysdep.h | 189 ++++ include/msgpack/unpack.h | 270 ++++++ include/msgpack/unpack_define.h | 89 ++ include/msgpack/unpack_template.h | 474 +++++++++ include/msgpack/util.h | 15 + include/msgpack/version.h | 38 + include/msgpack/version_master.h | 3 + include/msgpack/vrefbuffer.h | 141 +++ include/msgpack/zbuffer.h | 200 ++++ include/msgpack/zone.h | 163 ++++ lib/Data/MessagePack.pm | 3 +- minil.toml | 9 + msgpack-c | 1 - t/05_preferred_int.t | 21 +- t/23-empty-key.t | 3 +- t/std/cases.mpac | Bin 0 -> 213 bytes t/std/cases_compact.mpac | Bin 0 -> 116 bytes xt/leaks/normal.t | 1 + xt/leaks/stream.t | 1 + 158 files changed, 9782 insertions(+), 391 deletions(-) create mode 100644 .github/workflows/linux.yml delete mode 100644 .gitmodules delete mode 100644 .shipit delete mode 100644 .travis.yml create mode 100644 Build.PL delete mode 100644 MANIFEST.SKIP create mode 100644 META.json delete mode 100644 Makefile.PL delete mode 100644 README create mode 100644 README.md create mode 100644 author/update-msgpack-c.pl create mode 100644 builder/MyBuilder.pm create mode 100644 cpanfile create mode 100644 include/msgpack-c-version create mode 100644 include/msgpack/fbuffer.h create mode 100644 include/msgpack/gcc_atomic.h create mode 100644 include/msgpack/object.h create mode 100644 include/msgpack/pack.h create mode 100644 include/msgpack/pack_define.h create mode 100644 include/msgpack/pack_template.h create mode 100644 include/msgpack/predef.h create mode 100644 include/msgpack/predef/architecture.h create mode 100644 include/msgpack/predef/architecture/alpha.h create mode 100644 include/msgpack/predef/architecture/arm.h create mode 100644 include/msgpack/predef/architecture/blackfin.h create mode 100644 include/msgpack/predef/architecture/convex.h create mode 100644 include/msgpack/predef/architecture/ia64.h create mode 100644 include/msgpack/predef/architecture/m68k.h create mode 100644 include/msgpack/predef/architecture/mips.h create mode 100644 include/msgpack/predef/architecture/parisc.h create mode 100644 include/msgpack/predef/architecture/ppc.h create mode 100644 include/msgpack/predef/architecture/pyramid.h create mode 100644 include/msgpack/predef/architecture/rs6k.h create mode 100644 include/msgpack/predef/architecture/sparc.h create mode 100644 include/msgpack/predef/architecture/superh.h create mode 100644 include/msgpack/predef/architecture/sys370.h create mode 100644 include/msgpack/predef/architecture/sys390.h create mode 100644 include/msgpack/predef/architecture/x86.h create mode 100644 include/msgpack/predef/architecture/x86/32.h create mode 100644 include/msgpack/predef/architecture/x86/64.h create mode 100644 include/msgpack/predef/architecture/z.h create mode 100644 include/msgpack/predef/compiler.h create mode 100644 include/msgpack/predef/compiler/borland.h create mode 100644 include/msgpack/predef/compiler/clang.h create mode 100644 include/msgpack/predef/compiler/comeau.h create mode 100644 include/msgpack/predef/compiler/compaq.h create mode 100644 include/msgpack/predef/compiler/diab.h create mode 100644 include/msgpack/predef/compiler/digitalmars.h create mode 100644 include/msgpack/predef/compiler/dignus.h create mode 100644 include/msgpack/predef/compiler/edg.h create mode 100644 include/msgpack/predef/compiler/ekopath.h create mode 100644 include/msgpack/predef/compiler/gcc.h create mode 100644 include/msgpack/predef/compiler/gcc_xml.h create mode 100644 include/msgpack/predef/compiler/greenhills.h create mode 100644 include/msgpack/predef/compiler/hp_acc.h create mode 100644 include/msgpack/predef/compiler/iar.h create mode 100644 include/msgpack/predef/compiler/ibm.h create mode 100644 include/msgpack/predef/compiler/intel.h create mode 100644 include/msgpack/predef/compiler/kai.h create mode 100644 include/msgpack/predef/compiler/llvm.h create mode 100644 include/msgpack/predef/compiler/metaware.h create mode 100644 include/msgpack/predef/compiler/metrowerks.h create mode 100644 include/msgpack/predef/compiler/microtec.h create mode 100644 include/msgpack/predef/compiler/mpw.h create mode 100644 include/msgpack/predef/compiler/palm.h create mode 100644 include/msgpack/predef/compiler/pgi.h create mode 100644 include/msgpack/predef/compiler/sgi_mipspro.h create mode 100644 include/msgpack/predef/compiler/sunpro.h create mode 100644 include/msgpack/predef/compiler/tendra.h create mode 100644 include/msgpack/predef/compiler/visualc.h create mode 100644 include/msgpack/predef/compiler/watcom.h create mode 100644 include/msgpack/predef/detail/_cassert.h create mode 100644 include/msgpack/predef/detail/_exception.h create mode 100644 include/msgpack/predef/detail/comp_detected.h create mode 100644 include/msgpack/predef/detail/endian_compat.h create mode 100644 include/msgpack/predef/detail/os_detected.h create mode 100644 include/msgpack/predef/detail/platform_detected.h create mode 100644 include/msgpack/predef/detail/test.h create mode 100644 include/msgpack/predef/language.h create mode 100644 include/msgpack/predef/language/objc.h create mode 100644 include/msgpack/predef/language/stdc.h create mode 100644 include/msgpack/predef/language/stdcpp.h create mode 100644 include/msgpack/predef/library.h create mode 100644 include/msgpack/predef/library/c.h create mode 100644 include/msgpack/predef/library/c/_prefix.h create mode 100644 include/msgpack/predef/library/c/gnu.h create mode 100644 include/msgpack/predef/library/c/uc.h create mode 100644 include/msgpack/predef/library/c/vms.h create mode 100644 include/msgpack/predef/library/c/zos.h create mode 100644 include/msgpack/predef/library/std.h create mode 100644 include/msgpack/predef/library/std/_prefix.h create mode 100644 include/msgpack/predef/library/std/cxx.h create mode 100644 include/msgpack/predef/library/std/dinkumware.h create mode 100644 include/msgpack/predef/library/std/libcomo.h create mode 100644 include/msgpack/predef/library/std/modena.h create mode 100644 include/msgpack/predef/library/std/msl.h create mode 100644 include/msgpack/predef/library/std/roguewave.h create mode 100644 include/msgpack/predef/library/std/sgi.h create mode 100644 include/msgpack/predef/library/std/stdcpp3.h create mode 100644 include/msgpack/predef/library/std/stlport.h create mode 100644 include/msgpack/predef/library/std/vacpp.h create mode 100644 include/msgpack/predef/make.h create mode 100644 include/msgpack/predef/os.h create mode 100644 include/msgpack/predef/os/aix.h create mode 100644 include/msgpack/predef/os/amigaos.h create mode 100644 include/msgpack/predef/os/android.h create mode 100644 include/msgpack/predef/os/beos.h create mode 100644 include/msgpack/predef/os/bsd.h create mode 100644 include/msgpack/predef/os/bsd/bsdi.h create mode 100644 include/msgpack/predef/os/bsd/dragonfly.h create mode 100644 include/msgpack/predef/os/bsd/free.h create mode 100644 include/msgpack/predef/os/bsd/net.h create mode 100644 include/msgpack/predef/os/bsd/open.h create mode 100644 include/msgpack/predef/os/cygwin.h create mode 100644 include/msgpack/predef/os/haiku.h create mode 100644 include/msgpack/predef/os/hpux.h create mode 100644 include/msgpack/predef/os/ios.h create mode 100644 include/msgpack/predef/os/irix.h create mode 100644 include/msgpack/predef/os/linux.h create mode 100644 include/msgpack/predef/os/macos.h create mode 100644 include/msgpack/predef/os/os400.h create mode 100644 include/msgpack/predef/os/qnxnto.h create mode 100644 include/msgpack/predef/os/solaris.h create mode 100644 include/msgpack/predef/os/unix.h create mode 100644 include/msgpack/predef/os/vms.h create mode 100644 include/msgpack/predef/os/windows.h create mode 100644 include/msgpack/predef/other.h create mode 100644 include/msgpack/predef/other/endian.h create mode 100644 include/msgpack/predef/platform.h create mode 100644 include/msgpack/predef/platform/mingw.h create mode 100644 include/msgpack/predef/platform/windows_desktop.h create mode 100644 include/msgpack/predef/platform/windows_phone.h create mode 100644 include/msgpack/predef/platform/windows_runtime.h create mode 100644 include/msgpack/predef/platform/windows_store.h create mode 100644 include/msgpack/predef/version.h create mode 100644 include/msgpack/predef/version_number.h create mode 100644 include/msgpack/sbuffer.h create mode 100644 include/msgpack/sysdep.h create mode 100644 include/msgpack/unpack.h create mode 100644 include/msgpack/unpack_define.h create mode 100644 include/msgpack/unpack_template.h create mode 100644 include/msgpack/util.h create mode 100644 include/msgpack/version.h create mode 100644 include/msgpack/version_master.h create mode 100644 include/msgpack/vrefbuffer.h create mode 100644 include/msgpack/zbuffer.h create mode 100644 include/msgpack/zone.h create mode 100644 minil.toml delete mode 160000 msgpack-c create mode 100644 t/std/cases.mpac create mode 100644 t/std/cases_compact.mpac diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 0000000..9e5eb1e --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,29 @@ +name: linux + +on: + - push + - pull_request + +jobs: + perl: + runs-on: ubuntu-latest + strategy: + matrix: + perl-version: + - '5.10' + - '5.30' + - '5.32' + - '5.34' + container: + image: perl:${{ matrix.perl-version }} + steps: + - uses: actions/checkout@v2 + - name: Install Dependencies + run: | + curl -sL https://cpanmin.us/ | perl - -n --installdeps . + - name: Build + run: | + perl Build.PL + ./Build + - name: Run test + run: ./Build test diff --git a/.gitignore b/.gitignore index 67d22ea..25d7d08 100644 --- a/.gitignore +++ b/.gitignore @@ -7,8 +7,6 @@ MessagePack.o MessagePack.c blib/ inc/ -include/ -t/std/ *.o pm_to_blib MANIFEST @@ -18,4 +16,8 @@ xshelper.h *.swp *~ *.bak - +/Data-MessagePack-* +/Build +/Build.bat +/_build/ +/lib/Data/MessagePack.xs diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index f3a9054..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "msgpack-c"] - path = msgpack-c - url = git://github.com/msgpack/msgpack-c.git diff --git a/.shipit b/.shipit deleted file mode 100644 index 3a66936..0000000 --- a/.shipit +++ /dev/null @@ -1,4 +0,0 @@ -steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist, UploadCPAN -MakeDist.destination=~/.shipit-dist/ -git.tagpattern = perl-%v -git.push_to = origin diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 12b8c1f..0000000 --- a/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -sudo: false -language: perl -install: cpanm --installdeps --notest --verbose . -before_install: - - perlbrew install-cpanm -f - - cpanm --notest Module::Install Module::Install::XSUtil Module::Install::AuthorTests -perl: - - "5.20" - - "5.22" diff --git a/Build.PL b/Build.PL new file mode 100644 index 0000000..0aa0db3 --- /dev/null +++ b/Build.PL @@ -0,0 +1,72 @@ +# ========================================================================= +# THIS FILE IS AUTOMATICALLY GENERATED BY MINILLA. +# DO NOT EDIT DIRECTLY. +# ========================================================================= + +use 5.008_001; + +use strict; +use warnings; +use utf8; + +BEGIN { push @INC, '.' } +use builder::MyBuilder; +use File::Basename; +use File::Spec; + +my %args = ( + license => 'perl_5', + dynamic_config => 0, + + configure_requires => { + 'Module::Build' => '0.4005', + }, + + requires => { + 'Math::BigInt' => '1.89', + 'perl' => '5.008001', + }, + + recommends => { + }, + + suggests => { + }, + + build_requires => { + }, + + test_requires => { + 'Test::More' => '0.98', + 'Test::Requires' => '0', + }, + + name => 'Data-MessagePack', + module_name => 'Data::MessagePack', + allow_pureperl => 1, + + script_files => [glob('script/*'), glob('bin/*')], + PL_files => {}, + + test_files => ((-d '.git' || $ENV{RELEASE_TESTING}) && -d 'xt') ? 't/ xt/' : 't/', + recursive_test_files => 1, + + +); +if (-d 'share') { + $args{share_dir} = 'share'; +} + +my $builder = builder::MyBuilder->subclass( + class => 'MyBuilder', + code => q{ + sub ACTION_distmeta { + die "Do not run distmeta. Install Minilla and `minil install` instead.\n"; + } + sub ACTION_installdeps { + die "Do not run installdeps. Run `cpanm --installdeps .` instead.\n"; + } + } +)->new(%args); +$builder->create_build_script(); + diff --git a/Changes b/Changes index 771e6a2..49cf9c5 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,15 @@ +Revision history for Perl extension Data-MessagePack + +{{$NEXT}} + +1.02 2022-03-11T14:27:47Z + - Fix test for usequadmath Perl + +1.01 2020-03-17T17:06:53Z + + - Switch to Minilla from Module::Install + - Fix test for newer Windows Perl + 1.00 2016-08-21 15:30:00+0900 - Update major version for MessagePack versioning rule diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP deleted file mode 100644 index cfa42ec..0000000 --- a/MANIFEST.SKIP +++ /dev/null @@ -1,33 +0,0 @@ -\bRCS\b -\bCVS\b -^MANIFEST\. -^Makefile$ -^MYMETA\.(?:yml|json)$ -~$ -^# -\.old$ -\.swp$ -\.bak$ -^blib/ -^pm_to_blib -^MakeMaker-\d -\.gz$ -\.cvsignore -^t/9\d_.*\.t -^t/perlcritic -^tools/ -\.svn/ -^[^/]+\.yaml$ -^[^/]+\.pl$ -^\.shipit$ -^\.git/ -\.sw[pon]$ -^\.gitignore$ -\.o$ -\.bs$ -^Data-MessagePack-[0-9.]+/ -^\.testenv/test_pp.pl -^ppport.h$ -^msgpack -MessagePack\.c$ - diff --git a/META.json b/META.json new file mode 100644 index 0000000..db67e8d --- /dev/null +++ b/META.json @@ -0,0 +1,138 @@ +{ + "abstract" : "MessagePack serializing/deserializing", + "author" : [ + "Tokuhiro Matsuno" + ], + "dynamic_config" : 0, + "generated_by" : "Minilla/v3.1.15, CPAN::Meta::Converter version 2.150010", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : 2 + }, + "name" : "Data-MessagePack", + "no_index" : { + "directory" : [ + "t", + "xt", + "inc", + "share", + "eg", + "examples", + "author", + "builder" + ] + }, + "prereqs" : { + "configure" : { + "requires" : { + "Devel::PPPort" : "3.42", + "Module::Build" : "0.4005", + "Module::Build::XSUtil" : "0" + } + }, + "develop" : { + "requires" : { + "Test::CPAN::Meta" : "0", + "Test::LeakTrace" : "0", + "Test::MinimumVersion::Fast" : "0.04", + "Test::PAUSE::Permissions" : "0.07", + "Test::Pod" : "1.41", + "Test::Spellunker" : "v0.2.7" + } + }, + "runtime" : { + "requires" : { + "Math::BigInt" : "1.89", + "perl" : "5.008001" + } + }, + "test" : { + "requires" : { + "Test::More" : "0.98", + "Test::Requires" : "0" + } + } + }, + "release_status" : "unstable", + "resources" : { + "bugtracker" : { + "web" : "https://github.com/msgpack/msgpack-perl/issues" + }, + "homepage" : "https://github.com/msgpack/msgpack-perl", + "repository" : { + "type" : "git", + "url" : "https://github.com/msgpack/msgpack-perl.git", + "web" : "https://github.com/msgpack/msgpack-perl" + } + }, + "version" : "1.02", + "x_authority" : "cpan:TOKUHIROM", + "x_contributors" : [ + "Brian Ketelsen ", + "David Steinbrunner ", + "FUJI Goro (gfx) ", + "FURUHASHI Sadayuki ", + "Fuji Goro ", + "Fuji, Goro ", + "Fuji, Goro ", + "Hideyuki TAKEI ", + "Hideyuki Tanaka ", + "Hideyuki Tanaka ", + "Hideyuki Tanaka ", + "Hideyuki Tanaka ", + "INADA Naoki ", + "Kazuho Oku ", + "Kazuki Ohta ", + "Kazuki Ohta ", + "Kazuki Oikawa ", + "Keiji Muraishi ", + "Masahiro Nakagawa ", + "Moriyoshi Koizumi ", + "Muga Nishizawa ", + "Muga Nishizawa ", + "Naoki INADA ", + "Naoki INADA ", + "Naoki INADA ", + "Naoki INADA ", + "Naoki INADA ", + "Nicolas Despres ", + "Nikolay Mishin ", + "Perlover ", + "Reini Urban ", + "Robin Smidsrød ", + "Shohei YOSHIDA ", + "Shohei YOSHIDA ", + "Shoichi Kaji ", + "Taro L. Saito ", + "Tokuhiro Matsuno ", + "UENISHI Kota ", + "UENISHI Kota ", + "Vasily Titskiy ", + "Vincent de Phily ", + "Watabiki Naoya ", + "Yuto Hayamizu ", + "advect ", + "cho45 ", + "egtra ", + "firewood ", + "frsyuki (none) ", + "frsyuki ", + "frsyuki ", + "gfx ", + "inada-n ", + "inada-n ", + "inada-n ", + "makamaka ", + "moaikids ", + "mzp ", + "tailhook ", + "takeshita ", + "tokuhirom ", + "xanxys " + ], + "x_serialization_backend" : "JSON::PP version 4.07", + "x_static_install" : 0 +} diff --git a/Makefile.PL b/Makefile.PL deleted file mode 100644 index d5d1880..0000000 --- a/Makefile.PL +++ /dev/null @@ -1,153 +0,0 @@ -# Usage: Makefile.PL --pp # disable XS -# Makefile.PL -g # add -g to the compiler and disable optimization flags -use inc::Module::Install; -use Module::Install::XSUtil 0.44; -use Module::Install::AuthorTests; - -name 'Data-MessagePack'; -all_from 'lib/Data/MessagePack.pm'; - -configure_requires('File::Copy::Recursive'); - -test_requires('Test::More' => 0.94); # done_testing -test_requires('Test::Requires'); - -tests 't/*.t'; -recursive_author_tests('xt'); - -if ($Module::Install::AUTHOR) { - init_msgpack(); -} - -my $use_xs = 0; -if ( $] >= 5.008005 and want_xs() ) { - my $has_c99 = c99_available(); # msgpack C library requires C99. - - if ( $has_c99 ) { - requires_c99(); - use_xshelper(); - cc_warnings; - cc_include_paths('include'); - cc_src_paths('xs-src'); - postamble (qq{ -xs-src/pack.o : xshelper.h include/msgpack/pack_define.h include/msgpack/pack_template.h include/msgpack/sysdep.h -xs-src/unpack.o : xshelper.h include/msgpack/unpack.h include/msgpack/unpack_define.h include/msgpack/unpack_template.h include/msgpack/sysdep.h -}); - - if($Module::Install::AUTHOR) { - postamble qq{test :: test_pp\n\n}; - } - $use_xs = 1; - } - else { - print < 1.89; # old versions of BigInt were broken -} - -test_with_env( test_pp => PERL_DATA_MESSAGEPACK => 'pp' ); - -repository('https://github.com/msgpack/msgpack-perl'); -bugtracker('https://github.com/msgpack/msgpack-perl/issues'); - -clean_files qw{ - *.stackdump - *.gcov *.gcda *.gcno - *.out - nytprof - cover_db -}; - -WriteAll; - -# copied from Makefile.PL in Text::Xslate. -sub test_with_env { - my($name, %env) = @_; - - my $dir = '.testenv'; - if(not -e $dir) { - mkdir $dir or die "Cannot mkdir '.testenv': $!"; - } - clean_files($dir); - - { - open my $out, '>', "$dir/$name.pl" - or die "Cannot open '$dir/$name.pl' for writing: $!"; - print $out "# This file sets the env for 'make $name', \n"; - print $out "# generated by $0 at ", scalar(localtime), ".\n"; - print $out "# DO NOT EDIT THIS FILE DIRECTLY.\n"; - print $out "\n"; - - while(my($name, $value) = each %env) { - printf $out '$ENV{q{%s}} = q{%s};'."\n", $name, $value; - } - } - - # repeat testing for pure Perl mode - # see also ExtUtils::MM_Any::test_via_harness() - - my $t = q{$(FULLPERLRUN) -MExtUtils::Command::MM -e} - .q{ "do q[%s]; test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')"} - .q{ $(TEST_FILES)}; - - postamble qq{$name :: pure_all\n} - . qq{\t} . q{$(NOECHO) $(ECHO) TESTING: } . $name . qq{\n} - . qq{\t} . sprintf($t, "$dir/$name.pl") . qq{\n\n} - - . qq{testall :: $name\n\n}; - return; -} - -sub init_msgpack { - print "AuthorMode: copy modules\n"; - if(not -d 'include') { - system 'git', 'submodule', 'init'; - system 'git', 'submodule', 'update'; - } - else { - system 'git', 'submodule', 'sync'; - } - - require File::Path; - require File::Copy; - require File::Copy::Recursive; - - File::Path::rmtree([qw(include t/std)]); - - my %msgpack_header = ( - 'include' => ['msgpack-c/include/msgpack.h'], - 'include/msgpack' => [], - 'include/msgpack/predef' => ['msgpack-c/include/msgpack/predef'], - ); - - while (my ($dest, $srcs) = each %msgpack_header) { - File::Path::mkpath([$dest]); - - for my $src (@{$srcs}) { - next if $src =~ m/^\.\.?$/; - print "AuthorMode: copy $src to $dest\n"; - - if (-d $src) { - File::Copy::Recursive::dircopy($src, "$dest/") or die "copy failed: $!"; - } else { - File::Copy::copy($src, $dest) or die "copy failed: $!"; - } - } - } - - File::Path::mkpath([qw(t/std)]); - for my $src() { - print "AuthorMode: copy $src to t/std/\n"; - File::Copy::copy($src, 't/std') or die "copy failed: $!"; - } -} diff --git a/README b/README deleted file mode 100644 index 53e7d9f..0000000 --- a/README +++ /dev/null @@ -1,177 +0,0 @@ -NAME - Data::MessagePack - MessagePack serializing/deserializing - -SYNOPSIS - use Data::MessagePack; - - my $mp = Data::MessagePack->new(); - $mp->canonical->utf8->prefer_integer if $needed; - - my $packed = $mp->pack($dat); - my $unpacked = $mp->unpack($dat); - -DESCRIPTION - This module converts Perl data structures to MessagePack and vice versa. - -ABOUT MESSAGEPACK FORMAT - MessagePack is a binary-based efficient object serialization format. It - enables to exchange structured objects between many languages like JSON. - But unlike JSON, it is very fast and small. - - ADVANTAGES - PORTABLE - The MessagePack format does not depend on language nor byte order. - - SMALL IN SIZE - say length(JSON::XS::encode_json({a=>1, b=>2})); # => 13 - say length(Storable::nfreeze({a=>1, b=>2})); # => 21 - say length(Data::MessagePack->pack({a=>1, b=>2})); # => 7 - - The MessagePack format saves memory than JSON and Storable format. - - STREAMING DESERIALIZER - MessagePack supports streaming deserializer. It is useful for - networking such as RPC. See Data::MessagePack::Unpacker for details. - - If you want to get more information about the MessagePack format, please - visit to . - -METHODS - "my $packed = Data::MessagePack->pack($data[, $max_depth]);" - Pack the $data to messagepack format string. - - This method throws an exception when the perl structure is nested - more than $max_depth levels(default: 512) in order to detect - circular references. - - Data::MessagePack->pack() throws an exception when encountering a - blessed perl object, because MessagePack is a language-independent - format. - - "my $unpacked = Data::MessagePack->unpack($msgpackstr);" - unpack the $msgpackstr to a MessagePack format string. - - "my $mp = Data::MesssagePack->new()" - Creates a new MessagePack instance. - - "$mp = $mp->prefer_integer([ $enable ])" - "$enabled = $mp->get_prefer_integer()" - If *$enable* is true (or missing), then the "pack" method tries a - string as an integer if the string looks like an integer. - - "$mp = $mp->canonical([ $enable ])" - "$enabled = $mp->get_canonical()" - If *$enable* is true (or missing), then the "pack" method will - output packed data by sorting their keys. This is adding a - comparatively high overhead. - - "$mp = $mp->utf8([ $enable ])" - "$enabled = $mp->get_utf8()" - If *$enable* is true (or missing), then the "pack" method will apply - "utf8::encode()" to all the string values. - - In other words, this property tell $mp to deal with text strings. - See perlunifaq for the meaning of text string. - - "$packed = $mp->pack($data)" - "$packed = $mp->encode($data)" - Same as "Data::MessagePack->pack()", but properties are respected. - - "$data = $mp->unpack($data)" - "$data = $mp->decode($data)" - Same as "Data::MessagePack->unpack()", but properties are respected. - -Configuration Variables (DEPRECATED) - $Data::MessagePack::PreferInteger - Packs a string as an integer, when it looks like an integer. - - This variable is deprecated. Use "$msgpack->prefer_integer" property - instead. - -SPEED - This is a result of benchmark/serialize.pl and benchmark/deserialize.pl - on my SC440(Linux 2.6.32-23-server #37-Ubuntu SMP). (You should - benchmark them with your data if the speed matters, of course.) - - -- serialize - JSON::XS: 2.3 - Data::MessagePack: 0.24 - Storable: 2.21 - Benchmark: running json, mp, storable for at least 1 CPU seconds... - json: 1 wallclock secs ( 1.00 usr + 0.01 sys = 1.01 CPU) @ 141939.60/s (n=143359) - mp: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 355500.94/s (n=376831) - storable: 1 wallclock secs ( 1.12 usr + 0.00 sys = 1.12 CPU) @ 38399.11/s (n=43007) - Rate storable json mp - storable 38399/s -- -73% -89% - json 141940/s 270% -- -60% - mp 355501/s 826% 150% -- - - -- deserialize - JSON::XS: 2.3 - Data::MessagePack: 0.24 - Storable: 2.21 - Benchmark: running json, mp, storable for at least 1 CPU seconds... - json: 0 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 179442.86/s (n=188415) - mp: 0 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ 212909.90/s (n=215039) - storable: 2 wallclock secs ( 1.14 usr + 0.00 sys = 1.14 CPU) @ 114974.56/s (n=131071) - Rate storable json mp - storable 114975/s -- -36% -46% - json 179443/s 56% -- -16% - mp 212910/s 85% 19% -- - -CAVEAT - Unpacking 64 bit integers - This module can unpack 64 bit integers even if your perl does not - support them (i.e. where "perl -V:ivsize" is 4), but you cannot - calculate these values unless you use "Math::BigInt". - -TODO - Error handling - MessagePack cannot deal with complex scalars such as object - references, filehandles, and code references. We should report the - errors more kindly. - - Streaming deserializer - The current implementation of the streaming deserializer does not - have internal buffers while some other bindings (such as Ruby - binding) does. This limitation will astonish those who try to unpack - byte streams with an arbitrary buffer size (e.g. - "while(read($socket, $buffer, $arbitrary_buffer_size)) { ... }"). We - should implement the internal buffer for the unpacker. - -FAQ - Why does Data::MessagePack have pure perl implementations? - msgpack C library uses C99 feature, VC++6 does not support C99. So - pure perl version is needed for VC++ users. - -AUTHORS - Tokuhiro Matsuno - - Makamaka Hannyaharamitu - - gfx - -THANKS TO - Jun Kuriyama - - Dan Kogai - - FURUHASHI Sadayuki - - hanekomu - - Kazuho Oku - - shohex - -LICENSE - This library is free software; you can redistribute it and/or modify it - under the same terms as Perl itself. - -SEE ALSO - is the official web site for the MessagePack - format. - - Data::MessagePack::Unpacker - - AnyEvent::MPRPC diff --git a/README.md b/README.md new file mode 100644 index 0000000..e3a15d5 --- /dev/null +++ b/README.md @@ -0,0 +1,206 @@ +[![Build Status](https://travis-ci.org/msgpack/msgpack-perl.svg?branch=master)](https://travis-ci.org/msgpack/msgpack-perl) +# NAME + +Data::MessagePack - MessagePack serializing/deserializing + +# SYNOPSIS + + use Data::MessagePack; + + my $mp = Data::MessagePack->new(); + $mp->canonical->utf8->prefer_integer if $needed; + + my $packed = $mp->pack($dat); + my $unpacked = $mp->unpack($dat); + +# DESCRIPTION + +This module converts Perl data structures to MessagePack and vice versa. + +# ABOUT MESSAGEPACK FORMAT + +MessagePack is a binary-based efficient object serialization format. +It enables to exchange structured objects between many languages like +JSON. But unlike JSON, it is very fast and small. + +## ADVANTAGES + +- PORTABLE + + The MessagePack format does not depend on language nor byte order. + +- SMALL IN SIZE + + say length(JSON::XS::encode_json({a=>1, b=>2})); # => 13 + say length(Storable::nfreeze({a=>1, b=>2})); # => 21 + say length(Data::MessagePack->pack({a=>1, b=>2})); # => 7 + + The MessagePack format saves memory than JSON and Storable format. + +- STREAMING DESERIALIZER + + MessagePack supports streaming deserializer. It is useful for + networking such as RPC. See [Data::MessagePack::Unpacker](https://metacpan.org/pod/Data%3A%3AMessagePack%3A%3AUnpacker) for + details. + +If you want to get more information about the MessagePack format, +please visit to [http://msgpack.org/](http://msgpack.org/). + +# METHODS + +- `my $packed = Data::MessagePack->pack($data[, $max_depth]);` + + Pack the $data to messagepack format string. + + This method throws an exception when the perl structure is nested more + than $max\_depth levels(default: 512) in order to detect circular + references. + + Data::MessagePack->pack() throws an exception when encountering a + blessed perl object, because MessagePack is a language-independent + format. + +- `my $unpacked = Data::MessagePack->unpack($msgpackstr);` + + unpack the $msgpackstr to a MessagePack format string. + +- `my $mp = Data::MesssagePack->new()` + + Creates a new MessagePack instance. + +- `$mp = $mp->prefer_integer([ $enable ])` +- `$enabled = $mp->get_prefer_integer()` + + If _$enable_ is true (or missing), then the `pack` method tries a + string as an integer if the string looks like an integer. + +- `$mp = $mp->canonical([ $enable ])` +- `$enabled = $mp->get_canonical()` + + If _$enable_ is true (or missing), then the `pack` method will output + packed data by sorting their keys. This is adding a comparatively high + overhead. + +- `$mp = $mp->utf8([ $enable ])` +- `$enabled = $mp->get_utf8()` + + If _$enable_ is true (or missing), then the `pack` method will + apply `utf8::encode()` to all the string values. + + In other words, this property tell `$mp` to deal with **text strings**. + See [perlunifaq](https://metacpan.org/pod/perlunifaq) for the meaning of **text string**. + +- `$packed = $mp->pack($data)` +- `$packed = $mp->encode($data)` + + Same as `Data::MessagePack->pack()`, but properties are respected. + +- `$data = $mp->unpack($data)` +- `$data = $mp->decode($data)` + + Same as `Data::MessagePack->unpack()`, but properties are respected. + +# Configuration Variables (DEPRECATED) + +- $Data::MessagePack::PreferInteger + + Packs a string as an integer, when it looks like an integer. + + This variable is **deprecated**. + Use `$msgpack->prefer_integer` property instead. + +# SPEED + +This is a result of `benchmark/serialize.pl` and `benchmark/deserialize.pl` +on my SC440(Linux 2.6.32-23-server #37-Ubuntu SMP). +(You should benchmark them with **your** data if the speed matters, of course.) + + -- serialize + JSON::XS: 2.3 + Data::MessagePack: 0.24 + Storable: 2.21 + Benchmark: running json, mp, storable for at least 1 CPU seconds... + json: 1 wallclock secs ( 1.00 usr + 0.01 sys = 1.01 CPU) @ 141939.60/s (n=143359) + mp: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 355500.94/s (n=376831) + storable: 1 wallclock secs ( 1.12 usr + 0.00 sys = 1.12 CPU) @ 38399.11/s (n=43007) + Rate storable json mp + storable 38399/s -- -73% -89% + json 141940/s 270% -- -60% + mp 355501/s 826% 150% -- + + -- deserialize + JSON::XS: 2.3 + Data::MessagePack: 0.24 + Storable: 2.21 + Benchmark: running json, mp, storable for at least 1 CPU seconds... + json: 0 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 179442.86/s (n=188415) + mp: 0 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ 212909.90/s (n=215039) + storable: 2 wallclock secs ( 1.14 usr + 0.00 sys = 1.14 CPU) @ 114974.56/s (n=131071) + Rate storable json mp + storable 114975/s -- -36% -46% + json 179443/s 56% -- -16% + mp 212910/s 85% 19% -- + +# CAVEAT + +## Unpacking 64 bit integers + +This module can unpack 64 bit integers even if your perl does not support them +(i.e. where `perl -V:ivsize` is 4), but you cannot calculate these values +unless you use `Math::BigInt`. + +# TODO + +- Error handling + + MessagePack cannot deal with complex scalars such as object references, + filehandles, and code references. We should report the errors more kindly. + +- Streaming deserializer + + The current implementation of the streaming deserializer does not have internal + buffers while some other bindings (such as Ruby binding) does. This limitation + will astonish those who try to unpack byte streams with an arbitrary buffer size + (e.g. `while(read($socket, $buffer, $arbitrary_buffer_size)) { ... }`). + We should implement the internal buffer for the unpacker. + +# FAQ + +- Why does Data::MessagePack have pure perl implementations? + + msgpack C library uses C99 feature, VC++6 does not support C99. So pure perl version is needed for VC++ users. + +# AUTHORS + +Tokuhiro Matsuno + +Makamaka Hannyaharamitu + +gfx + +# THANKS TO + +Jun Kuriyama + +Dan Kogai + +FURUHASHI Sadayuki + +hanekomu + +Kazuho Oku + +syohex + +# LICENSE + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +# SEE ALSO + +[http://msgpack.org/](http://msgpack.org/) is the official web site for the MessagePack format. + +[Data::MessagePack::Unpacker](https://metacpan.org/pod/Data%3A%3AMessagePack%3A%3AUnpacker) + +[AnyEvent::MPRPC](https://metacpan.org/pod/AnyEvent%3A%3AMPRPC) diff --git a/author/update-msgpack-c.pl b/author/update-msgpack-c.pl new file mode 100644 index 0000000..02cee4b --- /dev/null +++ b/author/update-msgpack-c.pl @@ -0,0 +1,52 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +use HTTP::Tiny; +use IO::Socket::SSL; +use Path::Tiny; + +use FindBin; +chdir "$FindBin::Bin/.."; + +my $version = shift or die "Usage: $0 VERSION\n"; +my $url = "https://github.com/msgpack/msgpack-c/releases/download/cpp-$version/msgpack-$version.tar.gz"; + +my $tempdir = Path::Tiny->tempdir; + +warn "Downloading $url\n"; +my $res = HTTP::Tiny->new(veriry_SSL => 1)->mirror($url => "$tempdir/msgpack-$version.tar.gz"); +die "$res->{status} $res->{reason}, $url\n" if !$res->{success}; + +warn "Unpacking msgpack-$version.tar.gz\n"; +!system "tar", "xf", "$tempdir/msgpack-$version.tar.gz", "-C", "$tempdir" or die; + +path($_)->remove_tree for grep -d, 'include', 't/std'; + +warn "Copying include/*.h\n"; +path("$tempdir/msgpack-$version/include/msgpack")->visit( + sub { + my $path = shift; + return if !$path->is_file; + return if $path->stringify !~ /\.h$/; + my $relative = $path->relative("$tempdir/msgpack-$version"); + $relative->parent->mkpath if !$relative->parent->exists; + $path->copy($relative); + }, + { recurse => 1 }, +); + +warn "Copying test/*.mapc\n"; +path("t/std")->mkpath; +path("$tempdir/msgpack-$version/test")->visit( + sub { + my $path = shift; + return if !$path->is_file; + return if $path->stringify !~ /\.mpac$/; + my $relative = $path->relative("$tempdir/msgpack-$version/test"); + $path->copy("t/std/$relative"); + }, +); + +warn "Writing include/msgpack-c-version\n"; +path("include/msgpack-c-version")->spew("$version\n"); diff --git a/builder/MyBuilder.pm b/builder/MyBuilder.pm new file mode 100644 index 0000000..fd9fd90 --- /dev/null +++ b/builder/MyBuilder.pm @@ -0,0 +1,39 @@ +package builder::MyBuilder; +use strict; +use warnings; +use base 'Module::Build::XSUtil'; + +sub new { + my ($class, %args) = @_; + + my $self = $class->SUPER::new( + %args, + c_source => ['xs-src'], + cc_warnings => 1, + generate_ppport_h => 'xs-src/ppport.h', + generate_xshelper_h => 'xs-src/xshelper.h', + include_dirs => ['include'], + needs_compiler_c99 => 1, + xs_files => { 'xs-src/MessagePack.xs' => 'lib/Data/MessagePack.xs' }, + ); + $self->c_source([]) if $self->pureperl_only; # for Module::Build 0.4224 or below + $self; +} + +sub ACTION_test { + my $self = shift; + + { + local $ENV{PERL_ONLY} = 1; + $self->log_info("pp tests\n"); + $self->SUPER::ACTION_test(@_); + } + + if (!$self->pureperl_only) { + local $ENV{PERL_DATA_MESSAGEPACK} = "xs"; + $self->log_info("xs tests\n"); + $self->SUPER::ACTION_test(@_); + } +} + +1; diff --git a/cpanfile b/cpanfile new file mode 100644 index 0000000..285dfc6 --- /dev/null +++ b/cpanfile @@ -0,0 +1,17 @@ +requires 'perl', '5.008001'; + +requires 'Math::BigInt', 1.89; # old versions of BigInt were broken + +on configure => sub { + requires 'Module::Build::XSUtil'; + requires 'Devel::PPPort', '3.42'; +}; + +on test => sub { + requires 'Test::More', '0.98'; + requires 'Test::Requires'; +}; + +on develop => sub { + requires 'Test::LeakTrace'; +}; diff --git a/include/msgpack-c-version b/include/msgpack-c-version new file mode 100644 index 0000000..88c5fb8 --- /dev/null +++ b/include/msgpack-c-version @@ -0,0 +1 @@ +1.4.0 diff --git a/include/msgpack/fbuffer.h b/include/msgpack/fbuffer.h new file mode 100644 index 0000000..d478008 --- /dev/null +++ b/include/msgpack/fbuffer.h @@ -0,0 +1,38 @@ +/* + * MessagePack for C FILE* buffer adaptor + * + * Copyright (C) 2013 Vladimir Volodko + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_FBUFFER_H +#define MSGPACK_FBUFFER_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @defgroup msgpack_fbuffer FILE* buffer + * @ingroup msgpack_buffer + * @{ + */ + +static inline int msgpack_fbuffer_write(void* data, const char* buf, size_t len) +{ + return (1 == fwrite(buf, len, 1, (FILE *)data)) ? 0 : -1; +} + +/** @} */ + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/fbuffer.h */ diff --git a/include/msgpack/gcc_atomic.h b/include/msgpack/gcc_atomic.h new file mode 100644 index 0000000..6b1b1a7 --- /dev/null +++ b/include/msgpack/gcc_atomic.h @@ -0,0 +1,25 @@ +/* + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ + +#ifndef MSGPACK_GCC_ATOMIC_H +#define MSGPACK_GCC_ATOMIC_H + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef int _msgpack_atomic_counter_t; + +int _msgpack_sync_decr_and_fetch(volatile _msgpack_atomic_counter_t* ptr); +int _msgpack_sync_incr_and_fetch(volatile _msgpack_atomic_counter_t* ptr); + + +#if defined(__cplusplus) +} +#endif + + +#endif // MSGPACK_GCC_ATOMIC_H diff --git a/include/msgpack/object.h b/include/msgpack/object.h new file mode 100644 index 0000000..666f828 --- /dev/null +++ b/include/msgpack/object.h @@ -0,0 +1,111 @@ +/* + * MessagePack for C dynamic typing routine + * + * Copyright (C) 2008-2009 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_OBJECT_H +#define MSGPACK_OBJECT_H + +#include "zone.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @defgroup msgpack_object Dynamically typed object + * @ingroup msgpack + * @{ + */ + +typedef enum { + MSGPACK_OBJECT_NIL = 0x00, + MSGPACK_OBJECT_BOOLEAN = 0x01, + MSGPACK_OBJECT_POSITIVE_INTEGER = 0x02, + MSGPACK_OBJECT_NEGATIVE_INTEGER = 0x03, + MSGPACK_OBJECT_FLOAT = 0x04, +#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT) + MSGPACK_OBJECT_DOUBLE = MSGPACK_OBJECT_FLOAT, /* obsolete */ +#endif /* MSGPACK_USE_LEGACY_NAME_AS_FLOAT */ + MSGPACK_OBJECT_STR = 0x05, + MSGPACK_OBJECT_ARRAY = 0x06, + MSGPACK_OBJECT_MAP = 0x07, + MSGPACK_OBJECT_BIN = 0x08, + MSGPACK_OBJECT_EXT = 0x09 +} msgpack_object_type; + + +struct msgpack_object; +struct msgpack_object_kv; + +typedef struct { + uint32_t size; + struct msgpack_object* ptr; +} msgpack_object_array; + +typedef struct { + uint32_t size; + struct msgpack_object_kv* ptr; +} msgpack_object_map; + +typedef struct { + uint32_t size; + const char* ptr; +} msgpack_object_str; + +typedef struct { + uint32_t size; + const char* ptr; +} msgpack_object_bin; + +typedef struct { + int8_t type; + uint32_t size; + const char* ptr; +} msgpack_object_ext; + +typedef union { + bool boolean; + uint64_t u64; + int64_t i64; +#if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT) + double dec; /* obsolete*/ +#endif /* MSGPACK_USE_LEGACY_NAME_AS_FLOAT */ + double f64; + msgpack_object_array array; + msgpack_object_map map; + msgpack_object_str str; + msgpack_object_bin bin; + msgpack_object_ext ext; +} msgpack_object_union; + +typedef struct msgpack_object { + msgpack_object_type type; + msgpack_object_union via; +} msgpack_object; + +typedef struct msgpack_object_kv { + msgpack_object key; + msgpack_object val; +} msgpack_object_kv; + +MSGPACK_DLLEXPORT +void msgpack_object_print(FILE* out, msgpack_object o); + +MSGPACK_DLLEXPORT +bool msgpack_object_equal(const msgpack_object x, const msgpack_object y); + +/** @} */ + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/object.h */ diff --git a/include/msgpack/pack.h b/include/msgpack/pack.h new file mode 100644 index 0000000..2c7120f --- /dev/null +++ b/include/msgpack/pack.h @@ -0,0 +1,147 @@ +/* + * MessagePack for C packing routine + * + * Copyright (C) 2008-2009 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_PACK_H +#define MSGPACK_PACK_H + +#include "pack_define.h" +#include "object.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @defgroup msgpack_buffer Buffers + * @ingroup msgpack + * @{ + * @} + */ + +/** + * @defgroup msgpack_pack Serializer + * @ingroup msgpack + * @{ + */ + +typedef int (*msgpack_packer_write)(void* data, const char* buf, size_t len); + +typedef struct msgpack_packer { + void* data; + msgpack_packer_write callback; +} msgpack_packer; + +static void msgpack_packer_init(msgpack_packer* pk, void* data, msgpack_packer_write callback); + +static msgpack_packer* msgpack_packer_new(void* data, msgpack_packer_write callback); +static void msgpack_packer_free(msgpack_packer* pk); + +static int msgpack_pack_char(msgpack_packer* pk, char d); + +static int msgpack_pack_signed_char(msgpack_packer* pk, signed char d); +static int msgpack_pack_short(msgpack_packer* pk, short d); +static int msgpack_pack_int(msgpack_packer* pk, int d); +static int msgpack_pack_long(msgpack_packer* pk, long d); +static int msgpack_pack_long_long(msgpack_packer* pk, long long d); +static int msgpack_pack_unsigned_char(msgpack_packer* pk, unsigned char d); +static int msgpack_pack_unsigned_short(msgpack_packer* pk, unsigned short d); +static int msgpack_pack_unsigned_int(msgpack_packer* pk, unsigned int d); +static int msgpack_pack_unsigned_long(msgpack_packer* pk, unsigned long d); +static int msgpack_pack_unsigned_long_long(msgpack_packer* pk, unsigned long long d); + +static int msgpack_pack_uint8(msgpack_packer* pk, uint8_t d); +static int msgpack_pack_uint16(msgpack_packer* pk, uint16_t d); +static int msgpack_pack_uint32(msgpack_packer* pk, uint32_t d); +static int msgpack_pack_uint64(msgpack_packer* pk, uint64_t d); +static int msgpack_pack_int8(msgpack_packer* pk, int8_t d); +static int msgpack_pack_int16(msgpack_packer* pk, int16_t d); +static int msgpack_pack_int32(msgpack_packer* pk, int32_t d); +static int msgpack_pack_int64(msgpack_packer* pk, int64_t d); + +static int msgpack_pack_fix_uint8(msgpack_packer* pk, uint8_t d); +static int msgpack_pack_fix_uint16(msgpack_packer* pk, uint16_t d); +static int msgpack_pack_fix_uint32(msgpack_packer* pk, uint32_t d); +static int msgpack_pack_fix_uint64(msgpack_packer* pk, uint64_t d); +static int msgpack_pack_fix_int8(msgpack_packer* pk, int8_t d); +static int msgpack_pack_fix_int16(msgpack_packer* pk, int16_t d); +static int msgpack_pack_fix_int32(msgpack_packer* pk, int32_t d); +static int msgpack_pack_fix_int64(msgpack_packer* pk, int64_t d); + +static int msgpack_pack_float(msgpack_packer* pk, float d); +static int msgpack_pack_double(msgpack_packer* pk, double d); + +static int msgpack_pack_nil(msgpack_packer* pk); +static int msgpack_pack_true(msgpack_packer* pk); +static int msgpack_pack_false(msgpack_packer* pk); + +static int msgpack_pack_array(msgpack_packer* pk, size_t n); + +static int msgpack_pack_map(msgpack_packer* pk, size_t n); + +static int msgpack_pack_str(msgpack_packer* pk, size_t l); +static int msgpack_pack_str_body(msgpack_packer* pk, const void* b, size_t l); + +static int msgpack_pack_v4raw(msgpack_packer* pk, size_t l); +static int msgpack_pack_v4raw_body(msgpack_packer* pk, const void* b, size_t l); + +static int msgpack_pack_bin(msgpack_packer* pk, size_t l); +static int msgpack_pack_bin_body(msgpack_packer* pk, const void* b, size_t l); + +static int msgpack_pack_ext(msgpack_packer* pk, size_t l, int8_t type); +static int msgpack_pack_ext_body(msgpack_packer* pk, const void* b, size_t l); + +int msgpack_pack_object(msgpack_packer* pk, msgpack_object d); + + +/** @} */ + + +#define msgpack_pack_inline_func(name) \ + inline int msgpack_pack ## name + +#define msgpack_pack_inline_func_cint(name) \ + inline int msgpack_pack ## name + +#define msgpack_pack_inline_func_fixint(name) \ + inline int msgpack_pack_fix ## name + +#define msgpack_pack_user msgpack_packer* + +#define msgpack_pack_append_buffer(user, buf, len) \ + return (*(user)->callback)((user)->data, (const char*)buf, len) + +#include "pack_template.h" + +inline void msgpack_packer_init(msgpack_packer* pk, void* data, msgpack_packer_write callback) +{ + pk->data = data; + pk->callback = callback; +} + +inline msgpack_packer* msgpack_packer_new(void* data, msgpack_packer_write callback) +{ + msgpack_packer* pk = (msgpack_packer*)calloc(1, sizeof(msgpack_packer)); + if(!pk) { return NULL; } + msgpack_packer_init(pk, data, callback); + return pk; +} + +inline void msgpack_packer_free(msgpack_packer* pk) +{ + free(pk); +} + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/pack.h */ diff --git a/include/msgpack/pack_define.h b/include/msgpack/pack_define.h new file mode 100644 index 0000000..ce98b67 --- /dev/null +++ b/include/msgpack/pack_define.h @@ -0,0 +1,18 @@ +/* + * MessagePack unpacking routine template + * + * Copyright (C) 2008-2010 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_PACK_DEFINE_H +#define MSGPACK_PACK_DEFINE_H + +#include "msgpack/sysdep.h" +#include +#include + +#endif /* msgpack/pack_define.h */ + diff --git a/include/msgpack/pack_template.h b/include/msgpack/pack_template.h new file mode 100644 index 0000000..17abb52 --- /dev/null +++ b/include/msgpack/pack_template.h @@ -0,0 +1,909 @@ +/* + * MessagePack packing routine template + * + * Copyright (C) 2008-2010 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ + +#if MSGPACK_ENDIAN_LITTLE_BYTE +#define TAKE8_8(d) ((uint8_t*)&d)[0] +#define TAKE8_16(d) ((uint8_t*)&d)[0] +#define TAKE8_32(d) ((uint8_t*)&d)[0] +#define TAKE8_64(d) ((uint8_t*)&d)[0] +#elif MSGPACK_ENDIAN_BIG_BYTE +#define TAKE8_8(d) ((uint8_t*)&d)[0] +#define TAKE8_16(d) ((uint8_t*)&d)[1] +#define TAKE8_32(d) ((uint8_t*)&d)[3] +#define TAKE8_64(d) ((uint8_t*)&d)[7] +#else +#error msgpack-c supports only big endian and little endian +#endif + +#ifndef msgpack_pack_inline_func +#error msgpack_pack_inline_func template is not defined +#endif + +#ifndef msgpack_pack_user +#error msgpack_pack_user type is not defined +#endif + +#ifndef msgpack_pack_append_buffer +#error msgpack_pack_append_buffer callback is not defined +#endif + + +/* + * Integer + */ + +#define msgpack_pack_real_uint8(x, d) \ +do { \ + if(d < (1<<7)) { \ + /* fixnum */ \ + msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); \ + } else { \ + /* unsigned 8 */ \ + unsigned char buf[2] = {0xcc, TAKE8_8(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } \ +} while(0) + +#define msgpack_pack_real_uint16(x, d) \ +do { \ + if(d < (1<<7)) { \ + /* fixnum */ \ + msgpack_pack_append_buffer(x, &TAKE8_16(d), 1); \ + } else if(d < (1<<8)) { \ + /* unsigned 8 */ \ + unsigned char buf[2] = {0xcc, TAKE8_16(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } else { \ + /* unsigned 16 */ \ + unsigned char buf[3]; \ + buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \ + msgpack_pack_append_buffer(x, buf, 3); \ + } \ +} while(0) + +#define msgpack_pack_real_uint32(x, d) \ +do { \ + if(d < (1<<8)) { \ + if(d < (1<<7)) { \ + /* fixnum */ \ + msgpack_pack_append_buffer(x, &TAKE8_32(d), 1); \ + } else { \ + /* unsigned 8 */ \ + unsigned char buf[2] = {0xcc, TAKE8_32(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } \ + } else { \ + if(d < (1<<16)) { \ + /* unsigned 16 */ \ + unsigned char buf[3]; \ + buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \ + msgpack_pack_append_buffer(x, buf, 3); \ + } else { \ + /* unsigned 32 */ \ + unsigned char buf[5]; \ + buf[0] = 0xce; _msgpack_store32(&buf[1], (uint32_t)d); \ + msgpack_pack_append_buffer(x, buf, 5); \ + } \ + } \ +} while(0) + +#define msgpack_pack_real_uint64(x, d) \ +do { \ + if(d < (1ULL<<8)) { \ + if(d < (1ULL<<7)) { \ + /* fixnum */ \ + msgpack_pack_append_buffer(x, &TAKE8_64(d), 1); \ + } else { \ + /* unsigned 8 */ \ + unsigned char buf[2] = {0xcc, TAKE8_64(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } \ + } else { \ + if(d < (1ULL<<16)) { \ + /* unsigned 16 */ \ + unsigned char buf[3]; \ + buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \ + msgpack_pack_append_buffer(x, buf, 3); \ + } else if(d < (1ULL<<32)) { \ + /* unsigned 32 */ \ + unsigned char buf[5]; \ + buf[0] = 0xce; _msgpack_store32(&buf[1], (uint32_t)d); \ + msgpack_pack_append_buffer(x, buf, 5); \ + } else { \ + /* unsigned 64 */ \ + unsigned char buf[9]; \ + buf[0] = 0xcf; _msgpack_store64(&buf[1], d); \ + msgpack_pack_append_buffer(x, buf, 9); \ + } \ + } \ +} while(0) + +#define msgpack_pack_real_int8(x, d) \ +do { \ + if(d < -(1<<5)) { \ + /* signed 8 */ \ + unsigned char buf[2] = {0xd0, TAKE8_8(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } else { \ + /* fixnum */ \ + msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); \ + } \ +} while(0) + +#define msgpack_pack_real_int16(x, d) \ +do { \ + if(d < -(1<<5)) { \ + if(d < -(1<<7)) { \ + /* signed 16 */ \ + unsigned char buf[3]; \ + buf[0] = 0xd1; _msgpack_store16(&buf[1], (int16_t)d); \ + msgpack_pack_append_buffer(x, buf, 3); \ + } else { \ + /* signed 8 */ \ + unsigned char buf[2] = {0xd0, TAKE8_16(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } \ + } else if(d < (1<<7)) { \ + /* fixnum */ \ + msgpack_pack_append_buffer(x, &TAKE8_16(d), 1); \ + } else { \ + if(d < (1<<8)) { \ + /* unsigned 8 */ \ + unsigned char buf[2] = {0xcc, TAKE8_16(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } else { \ + /* unsigned 16 */ \ + unsigned char buf[3]; \ + buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \ + msgpack_pack_append_buffer(x, buf, 3); \ + } \ + } \ +} while(0) + +#define msgpack_pack_real_int32(x, d) \ +do { \ + if(d < -(1<<5)) { \ + if(d < -(1<<15)) { \ + /* signed 32 */ \ + unsigned char buf[5]; \ + buf[0] = 0xd2; _msgpack_store32(&buf[1], (int32_t)d); \ + msgpack_pack_append_buffer(x, buf, 5); \ + } else if(d < -(1<<7)) { \ + /* signed 16 */ \ + unsigned char buf[3]; \ + buf[0] = 0xd1; _msgpack_store16(&buf[1], (int16_t)d); \ + msgpack_pack_append_buffer(x, buf, 3); \ + } else { \ + /* signed 8 */ \ + unsigned char buf[2] = {0xd0, TAKE8_32(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } \ + } else if(d < (1<<7)) { \ + /* fixnum */ \ + msgpack_pack_append_buffer(x, &TAKE8_32(d), 1); \ + } else { \ + if(d < (1<<8)) { \ + /* unsigned 8 */ \ + unsigned char buf[2] = {0xcc, TAKE8_32(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } else if(d < (1<<16)) { \ + /* unsigned 16 */ \ + unsigned char buf[3]; \ + buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \ + msgpack_pack_append_buffer(x, buf, 3); \ + } else { \ + /* unsigned 32 */ \ + unsigned char buf[5]; \ + buf[0] = 0xce; _msgpack_store32(&buf[1], (uint32_t)d); \ + msgpack_pack_append_buffer(x, buf, 5); \ + } \ + } \ +} while(0) + +#define msgpack_pack_real_int64(x, d) \ +do { \ + if(d < -(1LL<<5)) { \ + if(d < -(1LL<<15)) { \ + if(d < -(1LL<<31)) { \ + /* signed 64 */ \ + unsigned char buf[9]; \ + buf[0] = 0xd3; _msgpack_store64(&buf[1], d); \ + msgpack_pack_append_buffer(x, buf, 9); \ + } else { \ + /* signed 32 */ \ + unsigned char buf[5]; \ + buf[0] = 0xd2; _msgpack_store32(&buf[1], (int32_t)d); \ + msgpack_pack_append_buffer(x, buf, 5); \ + } \ + } else { \ + if(d < -(1<<7)) { \ + /* signed 16 */ \ + unsigned char buf[3]; \ + buf[0] = 0xd1; _msgpack_store16(&buf[1], (int16_t)d); \ + msgpack_pack_append_buffer(x, buf, 3); \ + } else { \ + /* signed 8 */ \ + unsigned char buf[2] = {0xd0, TAKE8_64(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } \ + } \ + } else if(d < (1<<7)) { \ + /* fixnum */ \ + msgpack_pack_append_buffer(x, &TAKE8_64(d), 1); \ + } else { \ + if(d < (1LL<<16)) { \ + if(d < (1<<8)) { \ + /* unsigned 8 */ \ + unsigned char buf[2] = {0xcc, TAKE8_64(d)}; \ + msgpack_pack_append_buffer(x, buf, 2); \ + } else { \ + /* unsigned 16 */ \ + unsigned char buf[3]; \ + buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \ + msgpack_pack_append_buffer(x, buf, 3); \ + } \ + } else { \ + if(d < (1LL<<32)) { \ + /* unsigned 32 */ \ + unsigned char buf[5]; \ + buf[0] = 0xce; _msgpack_store32(&buf[1], (uint32_t)d); \ + msgpack_pack_append_buffer(x, buf, 5); \ + } else { \ + /* unsigned 64 */ \ + unsigned char buf[9]; \ + buf[0] = 0xcf; _msgpack_store64(&buf[1], d); \ + msgpack_pack_append_buffer(x, buf, 9); \ + } \ + } \ + } \ +} while(0) + + +#ifdef msgpack_pack_inline_func_fixint + +msgpack_pack_inline_func_fixint(_uint8)(msgpack_pack_user x, uint8_t d) +{ + unsigned char buf[2] = {0xcc, TAKE8_8(d)}; + msgpack_pack_append_buffer(x, buf, 2); +} + +msgpack_pack_inline_func_fixint(_uint16)(msgpack_pack_user x, uint16_t d) +{ + unsigned char buf[3]; + buf[0] = 0xcd; _msgpack_store16(&buf[1], d); + msgpack_pack_append_buffer(x, buf, 3); +} + +msgpack_pack_inline_func_fixint(_uint32)(msgpack_pack_user x, uint32_t d) +{ + unsigned char buf[5]; + buf[0] = 0xce; _msgpack_store32(&buf[1], d); + msgpack_pack_append_buffer(x, buf, 5); +} + +msgpack_pack_inline_func_fixint(_uint64)(msgpack_pack_user x, uint64_t d) +{ + unsigned char buf[9]; + buf[0] = 0xcf; _msgpack_store64(&buf[1], d); + msgpack_pack_append_buffer(x, buf, 9); +} + +msgpack_pack_inline_func_fixint(_int8)(msgpack_pack_user x, int8_t d) +{ + unsigned char buf[2] = {0xd0, TAKE8_8(d)}; + msgpack_pack_append_buffer(x, buf, 2); +} + +msgpack_pack_inline_func_fixint(_int16)(msgpack_pack_user x, int16_t d) +{ + unsigned char buf[3]; + buf[0] = 0xd1; _msgpack_store16(&buf[1], d); + msgpack_pack_append_buffer(x, buf, 3); +} + +msgpack_pack_inline_func_fixint(_int32)(msgpack_pack_user x, int32_t d) +{ + unsigned char buf[5]; + buf[0] = 0xd2; _msgpack_store32(&buf[1], d); + msgpack_pack_append_buffer(x, buf, 5); +} + +msgpack_pack_inline_func_fixint(_int64)(msgpack_pack_user x, int64_t d) +{ + unsigned char buf[9]; + buf[0] = 0xd3; _msgpack_store64(&buf[1], d); + msgpack_pack_append_buffer(x, buf, 9); +} + +#undef msgpack_pack_inline_func_fixint +#endif + + +msgpack_pack_inline_func(_uint8)(msgpack_pack_user x, uint8_t d) +{ + msgpack_pack_real_uint8(x, d); +} + +msgpack_pack_inline_func(_uint16)(msgpack_pack_user x, uint16_t d) +{ + msgpack_pack_real_uint16(x, d); +} + +msgpack_pack_inline_func(_uint32)(msgpack_pack_user x, uint32_t d) +{ + msgpack_pack_real_uint32(x, d); +} + +msgpack_pack_inline_func(_uint64)(msgpack_pack_user x, uint64_t d) +{ + msgpack_pack_real_uint64(x, d); +} + +msgpack_pack_inline_func(_int8)(msgpack_pack_user x, int8_t d) +{ + msgpack_pack_real_int8(x, d); +} + +msgpack_pack_inline_func(_int16)(msgpack_pack_user x, int16_t d) +{ + msgpack_pack_real_int16(x, d); +} + +msgpack_pack_inline_func(_int32)(msgpack_pack_user x, int32_t d) +{ + msgpack_pack_real_int32(x, d); +} + +msgpack_pack_inline_func(_int64)(msgpack_pack_user x, int64_t d) +{ + msgpack_pack_real_int64(x, d); +} + +msgpack_pack_inline_func(_char)(msgpack_pack_user x, char d) +{ +#if defined(CHAR_MIN) +#if CHAR_MIN < 0 + msgpack_pack_real_int8(x, d); +#else + msgpack_pack_real_uint8(x, d); +#endif +#else +#error CHAR_MIN is not defined +#endif +} + +msgpack_pack_inline_func(_signed_char)(msgpack_pack_user x, signed char d) +{ + msgpack_pack_real_int8(x, d); +} + +msgpack_pack_inline_func(_unsigned_char)(msgpack_pack_user x, unsigned char d) +{ + msgpack_pack_real_uint8(x, d); +} + +#ifdef msgpack_pack_inline_func_cint + +msgpack_pack_inline_func_cint(_short)(msgpack_pack_user x, short d) +{ +#if defined(SIZEOF_SHORT) +#if SIZEOF_SHORT == 2 + msgpack_pack_real_int16(x, d); +#elif SIZEOF_SHORT == 4 + msgpack_pack_real_int32(x, d); +#else + msgpack_pack_real_int64(x, d); +#endif + +#elif defined(SHRT_MAX) +#if SHRT_MAX == 0x7fff + msgpack_pack_real_int16(x, d); +#elif SHRT_MAX == 0x7fffffff + msgpack_pack_real_int32(x, d); +#else + msgpack_pack_real_int64(x, d); +#endif + +#else +if(sizeof(short) == 2) { + msgpack_pack_real_int16(x, d); +} else if(sizeof(short) == 4) { + msgpack_pack_real_int32(x, d); +} else { + msgpack_pack_real_int64(x, d); +} +#endif +} + +msgpack_pack_inline_func_cint(_int)(msgpack_pack_user x, int d) +{ +#if defined(SIZEOF_INT) +#if SIZEOF_INT == 2 + msgpack_pack_real_int16(x, d); +#elif SIZEOF_INT == 4 + msgpack_pack_real_int32(x, d); +#else + msgpack_pack_real_int64(x, d); +#endif + +#elif defined(INT_MAX) +#if INT_MAX == 0x7fff + msgpack_pack_real_int16(x, d); +#elif INT_MAX == 0x7fffffff + msgpack_pack_real_int32(x, d); +#else + msgpack_pack_real_int64(x, d); +#endif + +#else +if(sizeof(int) == 2) { + msgpack_pack_real_int16(x, d); +} else if(sizeof(int) == 4) { + msgpack_pack_real_int32(x, d); +} else { + msgpack_pack_real_int64(x, d); +} +#endif +} + +msgpack_pack_inline_func_cint(_long)(msgpack_pack_user x, long d) +{ +#if defined(SIZEOF_LONG) +#if SIZEOF_LONG == 2 + msgpack_pack_real_int16(x, d); +#elif SIZEOF_LONG == 4 + msgpack_pack_real_int32(x, d); +#else + msgpack_pack_real_int64(x, d); +#endif + +#elif defined(LONG_MAX) +#if LONG_MAX == 0x7fffL + msgpack_pack_real_int16(x, d); +#elif LONG_MAX == 0x7fffffffL + msgpack_pack_real_int32(x, d); +#else + msgpack_pack_real_int64(x, d); +#endif + +#else +if(sizeof(long) == 2) { + msgpack_pack_real_int16(x, d); +} else if(sizeof(long) == 4) { + msgpack_pack_real_int32(x, d); +} else { + msgpack_pack_real_int64(x, d); +} +#endif +} + +msgpack_pack_inline_func_cint(_long_long)(msgpack_pack_user x, long long d) +{ +#if defined(SIZEOF_LONG_LONG) +#if SIZEOF_LONG_LONG == 2 + msgpack_pack_real_int16(x, d); +#elif SIZEOF_LONG_LONG == 4 + msgpack_pack_real_int32(x, d); +#else + msgpack_pack_real_int64(x, d); +#endif + +#elif defined(LLONG_MAX) +#if LLONG_MAX == 0x7fffL + msgpack_pack_real_int16(x, d); +#elif LLONG_MAX == 0x7fffffffL + msgpack_pack_real_int32(x, d); +#else + msgpack_pack_real_int64(x, d); +#endif + +#else +if(sizeof(long long) == 2) { + msgpack_pack_real_int16(x, d); +} else if(sizeof(long long) == 4) { + msgpack_pack_real_int32(x, d); +} else { + msgpack_pack_real_int64(x, d); +} +#endif +} + +msgpack_pack_inline_func_cint(_unsigned_short)(msgpack_pack_user x, unsigned short d) +{ +#if defined(SIZEOF_SHORT) +#if SIZEOF_SHORT == 2 + msgpack_pack_real_uint16(x, d); +#elif SIZEOF_SHORT == 4 + msgpack_pack_real_uint32(x, d); +#else + msgpack_pack_real_uint64(x, d); +#endif + +#elif defined(USHRT_MAX) +#if USHRT_MAX == 0xffffU + msgpack_pack_real_uint16(x, d); +#elif USHRT_MAX == 0xffffffffU + msgpack_pack_real_uint32(x, d); +#else + msgpack_pack_real_uint64(x, d); +#endif + +#else +if(sizeof(unsigned short) == 2) { + msgpack_pack_real_uint16(x, d); +} else if(sizeof(unsigned short) == 4) { + msgpack_pack_real_uint32(x, d); +} else { + msgpack_pack_real_uint64(x, d); +} +#endif +} + +msgpack_pack_inline_func_cint(_unsigned_int)(msgpack_pack_user x, unsigned int d) +{ +#if defined(SIZEOF_INT) +#if SIZEOF_INT == 2 + msgpack_pack_real_uint16(x, d); +#elif SIZEOF_INT == 4 + msgpack_pack_real_uint32(x, d); +#else + msgpack_pack_real_uint64(x, d); +#endif + +#elif defined(UINT_MAX) +#if UINT_MAX == 0xffffU + msgpack_pack_real_uint16(x, d); +#elif UINT_MAX == 0xffffffffU + msgpack_pack_real_uint32(x, d); +#else + msgpack_pack_real_uint64(x, d); +#endif + +#else +if(sizeof(unsigned int) == 2) { + msgpack_pack_real_uint16(x, d); +} else if(sizeof(unsigned int) == 4) { + msgpack_pack_real_uint32(x, d); +} else { + msgpack_pack_real_uint64(x, d); +} +#endif +} + +msgpack_pack_inline_func_cint(_unsigned_long)(msgpack_pack_user x, unsigned long d) +{ +#if defined(SIZEOF_LONG) +#if SIZEOF_LONG == 2 + msgpack_pack_real_uint16(x, d); +#elif SIZEOF_LONG == 4 + msgpack_pack_real_uint32(x, d); +#else + msgpack_pack_real_uint64(x, d); +#endif + +#elif defined(ULONG_MAX) +#if ULONG_MAX == 0xffffUL + msgpack_pack_real_uint16(x, d); +#elif ULONG_MAX == 0xffffffffUL + msgpack_pack_real_uint32(x, d); +#else + msgpack_pack_real_uint64(x, d); +#endif + +#else +if(sizeof(unsigned long) == 2) { + msgpack_pack_real_uint16(x, d); +} else if(sizeof(unsigned long) == 4) { + msgpack_pack_real_uint32(x, d); +} else { + msgpack_pack_real_uint64(x, d); +} +#endif +} + +msgpack_pack_inline_func_cint(_unsigned_long_long)(msgpack_pack_user x, unsigned long long d) +{ +#if defined(SIZEOF_LONG_LONG) +#if SIZEOF_LONG_LONG == 2 + msgpack_pack_real_uint16(x, d); +#elif SIZEOF_LONG_LONG == 4 + msgpack_pack_real_uint32(x, d); +#else + msgpack_pack_real_uint64(x, d); +#endif + +#elif defined(ULLONG_MAX) +#if ULLONG_MAX == 0xffffUL + msgpack_pack_real_uint16(x, d); +#elif ULLONG_MAX == 0xffffffffUL + msgpack_pack_real_uint32(x, d); +#else + msgpack_pack_real_uint64(x, d); +#endif + +#else +if(sizeof(unsigned long long) == 2) { + msgpack_pack_real_uint16(x, d); +} else if(sizeof(unsigned long long) == 4) { + msgpack_pack_real_uint32(x, d); +} else { + msgpack_pack_real_uint64(x, d); +} +#endif +} + +#undef msgpack_pack_inline_func_cint +#endif + + + +/* + * Float + */ + +msgpack_pack_inline_func(_float)(msgpack_pack_user x, float d) +{ + unsigned char buf[5]; + union { float f; uint32_t i; } mem; + mem.f = d; + buf[0] = 0xca; _msgpack_store32(&buf[1], mem.i); + msgpack_pack_append_buffer(x, buf, 5); +} + +msgpack_pack_inline_func(_double)(msgpack_pack_user x, double d) +{ + unsigned char buf[9]; + union { double f; uint64_t i; } mem; + mem.f = d; + buf[0] = 0xcb; +#if defined(TARGET_OS_IPHONE) + // ok +#elif defined(__arm__) && !(__ARM_EABI__) // arm-oabi + // https://github.com/msgpack/msgpack-perl/pull/1 + mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL); +#endif + _msgpack_store64(&buf[1], mem.i); + msgpack_pack_append_buffer(x, buf, 9); +} + + +/* + * Nil + */ + +msgpack_pack_inline_func(_nil)(msgpack_pack_user x) +{ + static const unsigned char d = 0xc0; + msgpack_pack_append_buffer(x, &d, 1); +} + + +/* + * Boolean + */ + +msgpack_pack_inline_func(_true)(msgpack_pack_user x) +{ + static const unsigned char d = 0xc3; + msgpack_pack_append_buffer(x, &d, 1); +} + +msgpack_pack_inline_func(_false)(msgpack_pack_user x) +{ + static const unsigned char d = 0xc2; + msgpack_pack_append_buffer(x, &d, 1); +} + + +/* + * Array + */ + +msgpack_pack_inline_func(_array)(msgpack_pack_user x, size_t n) +{ + if(n < 16) { + unsigned char d = 0x90 | (uint8_t)n; + msgpack_pack_append_buffer(x, &d, 1); + } else if(n < 65536) { + unsigned char buf[3]; + buf[0] = 0xdc; _msgpack_store16(&buf[1], (uint16_t)n); + msgpack_pack_append_buffer(x, buf, 3); + } else { + unsigned char buf[5]; + buf[0] = 0xdd; _msgpack_store32(&buf[1], (uint32_t)n); + msgpack_pack_append_buffer(x, buf, 5); + } +} + + +/* + * Map + */ + +msgpack_pack_inline_func(_map)(msgpack_pack_user x, size_t n) +{ + if(n < 16) { + unsigned char d = 0x80 | (uint8_t)n; + msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); + } else if(n < 65536) { + unsigned char buf[3]; + buf[0] = 0xde; _msgpack_store16(&buf[1], (uint16_t)n); + msgpack_pack_append_buffer(x, buf, 3); + } else { + unsigned char buf[5]; + buf[0] = 0xdf; _msgpack_store32(&buf[1], (uint32_t)n); + msgpack_pack_append_buffer(x, buf, 5); + } +} + + +/* + * Str + */ + +msgpack_pack_inline_func(_str)(msgpack_pack_user x, size_t l) +{ + if(l < 32) { + unsigned char d = 0xa0 | (uint8_t)l; + msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); + } else if(l < 256) { + unsigned char buf[2]; + buf[0] = 0xd9; buf[1] = (uint8_t)l; + msgpack_pack_append_buffer(x, buf, 2); + } else if(l < 65536) { + unsigned char buf[3]; + buf[0] = 0xda; _msgpack_store16(&buf[1], (uint16_t)l); + msgpack_pack_append_buffer(x, buf, 3); + } else { + unsigned char buf[5]; + buf[0] = 0xdb; _msgpack_store32(&buf[1], (uint32_t)l); + msgpack_pack_append_buffer(x, buf, 5); + } +} + +msgpack_pack_inline_func(_str_body)(msgpack_pack_user x, const void* b, size_t l) +{ + msgpack_pack_append_buffer(x, (const unsigned char*)b, l); +} + +/* + * Raw (V4) + */ + +msgpack_pack_inline_func(_v4raw)(msgpack_pack_user x, size_t l) +{ + if(l < 32) { + unsigned char d = 0xa0 | (uint8_t)l; + msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); + } else if(l < 65536) { + unsigned char buf[3]; + buf[0] = 0xda; _msgpack_store16(&buf[1], (uint16_t)l); + msgpack_pack_append_buffer(x, buf, 3); + } else { + unsigned char buf[5]; + buf[0] = 0xdb; _msgpack_store32(&buf[1], (uint32_t)l); + msgpack_pack_append_buffer(x, buf, 5); + } +} + +msgpack_pack_inline_func(_v4raw_body)(msgpack_pack_user x, const void* b, size_t l) +{ + msgpack_pack_append_buffer(x, (const unsigned char*)b, l); +} + +/* + * Bin + */ + +msgpack_pack_inline_func(_bin)(msgpack_pack_user x, size_t l) +{ + if(l < 256) { + unsigned char buf[2]; + buf[0] = 0xc4; buf[1] = (uint8_t)l; + msgpack_pack_append_buffer(x, buf, 2); + } else if(l < 65536) { + unsigned char buf[3]; + buf[0] = 0xc5; _msgpack_store16(&buf[1], (uint16_t)l); + msgpack_pack_append_buffer(x, buf, 3); + } else { + unsigned char buf[5]; + buf[0] = 0xc6; _msgpack_store32(&buf[1], (uint32_t)l); + msgpack_pack_append_buffer(x, buf, 5); + } +} + +msgpack_pack_inline_func(_bin_body)(msgpack_pack_user x, const void* b, size_t l) +{ + msgpack_pack_append_buffer(x, (const unsigned char*)b, l); +} + +/* + * Ext + */ + +msgpack_pack_inline_func(_ext)(msgpack_pack_user x, size_t l, int8_t type) +{ + switch(l) { + case 1: { + unsigned char buf[2]; + buf[0] = 0xd4; + buf[1] = type; + msgpack_pack_append_buffer(x, buf, 2); + } break; + case 2: { + unsigned char buf[2]; + buf[0] = 0xd5; + buf[1] = type; + msgpack_pack_append_buffer(x, buf, 2); + } break; + case 4: { + unsigned char buf[2]; + buf[0] = 0xd6; + buf[1] = type; + msgpack_pack_append_buffer(x, buf, 2); + } break; + case 8: { + unsigned char buf[2]; + buf[0] = 0xd7; + buf[1] = type; + msgpack_pack_append_buffer(x, buf, 2); + } break; + case 16: { + unsigned char buf[2]; + buf[0] = 0xd8; + buf[1] = type; + msgpack_pack_append_buffer(x, buf, 2); + } break; + default: + if(l < 256) { + unsigned char buf[3]; + buf[0] = 0xc7; + buf[1] = (unsigned char)l; + buf[2] = type; + msgpack_pack_append_buffer(x, buf, 3); + } else if(l < 65536) { + unsigned char buf[4]; + buf[0] = 0xc8; + _msgpack_store16(&buf[1], l); + buf[3] = type; + msgpack_pack_append_buffer(x, buf, 4); + } else { + unsigned char buf[6]; + buf[0] = 0xc9; + _msgpack_store32(&buf[1], l); + buf[5] = type; + msgpack_pack_append_buffer(x, buf, 6); + } + break; + } +} + +msgpack_pack_inline_func(_ext_body)(msgpack_pack_user x, const void* b, size_t l) +{ + msgpack_pack_append_buffer(x, (const unsigned char*)b, l); +} + +#undef msgpack_pack_inline_func +#undef msgpack_pack_user +#undef msgpack_pack_append_buffer + +#undef TAKE8_8 +#undef TAKE8_16 +#undef TAKE8_32 +#undef TAKE8_64 + +#undef msgpack_pack_real_uint8 +#undef msgpack_pack_real_uint16 +#undef msgpack_pack_real_uint32 +#undef msgpack_pack_real_uint64 +#undef msgpack_pack_real_int8 +#undef msgpack_pack_real_int16 +#undef msgpack_pack_real_int32 +#undef msgpack_pack_real_int64 diff --git a/include/msgpack/predef.h b/include/msgpack/predef.h new file mode 100644 index 0000000..e53ceac --- /dev/null +++ b/include/msgpack/predef.h @@ -0,0 +1,19 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_H +#define MSGPACK_PREDEF_H + +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/include/msgpack/predef/architecture.h b/include/msgpack/predef/architecture.h new file mode 100644 index 0000000..dc9a5a5 --- /dev/null +++ b/include/msgpack/predef/architecture.h @@ -0,0 +1,30 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_H +#define MSGPACK_PREDEF_ARCHITECTURE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +/*#include */ + +#endif diff --git a/include/msgpack/predef/architecture/alpha.h b/include/msgpack/predef/architecture/alpha.h new file mode 100644 index 0000000..9fe469c --- /dev/null +++ b/include/msgpack/predef/architecture/alpha.h @@ -0,0 +1,60 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_ALPHA_H +#define MSGPACK_PREDEF_ARCHITECTURE_ALPHA_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_ALPHA`] + +[@http://en.wikipedia.org/wiki/DEC_Alpha DEC Alpha] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + [[`__alpha__`] [__predef_detection__]] + [[`__alpha`] [__predef_detection__]] + [[`_M_ALPHA`] [__predef_detection__]] + + [[`__alpha_ev4__`] [4.0.0]] + [[`__alpha_ev5__`] [5.0.0]] + [[`__alpha_ev6__`] [6.0.0]] + ] + */ + +#define MSGPACK_ARCH_ALPHA MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__alpha__) || defined(__alpha) || \ + defined(_M_ALPHA) +# undef MSGPACK_ARCH_ALPHA +# if !defined(MSGPACK_ARCH_ALPHA) && defined(__alpha_ev4__) +# define MSGPACK_ARCH_ALPHA MSGPACK_VERSION_NUMBER(4,0,0) +# endif +# if !defined(MSGPACK_ARCH_ALPHA) && defined(__alpha_ev5__) +# define MSGPACK_ARCH_ALPHA MSGPACK_VERSION_NUMBER(5,0,0) +# endif +# if !defined(MSGPACK_ARCH_ALPHA) && defined(__alpha_ev6__) +# define MSGPACK_ARCH_ALPHA MSGPACK_VERSION_NUMBER(6,0,0) +# endif +# if !defined(MSGPACK_ARCH_ALPHA) +# define MSGPACK_ARCH_ALPHA MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_ALPHA +# define MSGPACK_ARCH_ALPHA_AVAILABLE +#endif + +#define MSGPACK_ARCH_ALPHA_NAME "DEC Alpha" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_ALPHA,MSGPACK_ARCH_ALPHA_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/arm.h b/include/msgpack/predef/architecture/arm.h new file mode 100644 index 0000000..ccb175e --- /dev/null +++ b/include/msgpack/predef/architecture/arm.h @@ -0,0 +1,71 @@ +/* +Copyright Rene Rivera 2008-2013 +Copyright Franz Detro 2014 +Copyright (c) Microsoft Corporation 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_ARM_H +#define MSGPACK_PREDEF_ARCHITECTURE_ARM_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_ARM`] + +[@http://en.wikipedia.org/wiki/ARM_architecture ARM] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__arm__`] [__predef_detection__]] + [[`__arm64`] [__predef_detection__]] + [[`__thumb__`] [__predef_detection__]] + [[`__TARGET_ARCH_ARM`] [__predef_detection__]] + [[`__TARGET_ARCH_THUMB`] [__predef_detection__]] + [[`_M_ARM`] [__predef_detection__]] + + [[`__arm64`] [8.0.0]] + [[`__TARGET_ARCH_ARM`] [V.0.0]] + [[`__TARGET_ARCH_THUMB`] [V.0.0]] + [[`_M_ARM`] [V.0.0]] + ] + */ + +#define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__arm__) || defined(__arm64) || defined(__thumb__) || \ + defined(__TARGET_ARCH_ARM) || defined(__TARGET_ARCH_THUMB) || \ + defined(_M_ARM) +# undef MSGPACK_ARCH_ARM +# if !defined(MSGPACK_ARCH_ARM) && defined(__arm64) +# define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER(8,0,0) +# endif +# if !defined(MSGPACK_ARCH_ARM) && defined(__TARGET_ARCH_ARM) +# define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER(__TARGET_ARCH_ARM,0,0) +# endif +# if !defined(MSGPACK_ARCH_ARM) && defined(__TARGET_ARCH_THUMB) +# define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER(__TARGET_ARCH_THUMB,0,0) +# endif +# if !defined(MSGPACK_ARCH_ARM) && defined(_M_ARM) +# define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER(_M_ARM,0,0) +# endif +# if !defined(MSGPACK_ARCH_ARM) +# define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_ARM +# define MSGPACK_ARCH_ARM_AVAILABLE +#endif + +#define MSGPACK_ARCH_ARM_NAME "ARM" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_ARM,MSGPACK_ARCH_ARM_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/blackfin.h b/include/msgpack/predef/architecture/blackfin.h new file mode 100644 index 0000000..688feaa --- /dev/null +++ b/include/msgpack/predef/architecture/blackfin.h @@ -0,0 +1,47 @@ +/* +Copyright Rene Rivera 2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_BLACKFIN_H +#define MSGPACK_PREDEF_ARCHITECTURE_BLACKFIN_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_BLACKFIN`] + +Blackfin Processors from Analog Devices. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__bfin__`] [__predef_detection__]] + [[`__BFIN__`] [__predef_detection__]] + [[`bfin`] [__predef_detection__]] + [[`BFIN`] [__predef_detection__]] + ] + */ + +#define MSGPACK_ARCH_BLACKFIN MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__bfin__) || defined(__BFIN__) || \ + defined(bfin) || defined(BFIN) +# undef MSGPACK_ARCH_BLACKFIN +# define MSGPACK_ARCH_BLACKFIN MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_ARCH_BLACKFIN +# define MSGPACK_ARCH_BLACKFIN_AVAILABLE +#endif + +#define MSGPACK_ARCH_BLACKFIN_NAME "Blackfin" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_BLACKFIN,MSGPACK_ARCH_BLACKFIN_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/convex.h b/include/msgpack/predef/architecture/convex.h new file mode 100644 index 0000000..f209dcc --- /dev/null +++ b/include/msgpack/predef/architecture/convex.h @@ -0,0 +1,67 @@ +/* +Copyright Rene Rivera 2011-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_CONVEX_H +#define MSGPACK_PREDEF_ARCHITECTURE_CONVEX_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_CONVEX`] + +[@http://en.wikipedia.org/wiki/Convex_Computer Convex Computer] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__convex__`] [__predef_detection__]] + + [[`__convex_c1__`] [1.0.0]] + [[`__convex_c2__`] [2.0.0]] + [[`__convex_c32__`] [3.2.0]] + [[`__convex_c34__`] [3.4.0]] + [[`__convex_c38__`] [3.8.0]] + ] + */ + +#define MSGPACK_ARCH_CONVEX MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__convex__) +# undef MSGPACK_ARCH_CONVEX +# if !defined(MSGPACK_ARCH_CONVEX) && defined(__convex_c1__) +# define MSGPACK_ARCH_CONVEX MSGPACK_VERSION_NUMBER(1,0,0) +# endif +# if !defined(MSGPACK_ARCH_CONVEX) && defined(__convex_c2__) +# define MSGPACK_ARCH_CONVEX MSGPACK_VERSION_NUMBER(2,0,0) +# endif +# if !defined(MSGPACK_ARCH_CONVEX) && defined(__convex_c32__) +# define MSGPACK_ARCH_CONVEX MSGPACK_VERSION_NUMBER(3,2,0) +# endif +# if !defined(MSGPACK_ARCH_CONVEX) && defined(__convex_c34__) +# define MSGPACK_ARCH_CONVEX MSGPACK_VERSION_NUMBER(3,4,0) +# endif +# if !defined(MSGPACK_ARCH_CONVEX) && defined(__convex_c38__) +# define MSGPACK_ARCH_CONVEX MSGPACK_VERSION_NUMBER(3,8,0) +# endif +# if !defined(MSGPACK_ARCH_CONVEX) +# define MSGPACK_ARCH_CONVEX MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_CONVEX +# define MSGPACK_ARCH_CONVEX_AVAILABLE +#endif + +#define MSGPACK_ARCH_CONVEX_NAME "Convex Computer" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_CONVEX,MSGPACK_ARCH_CONVEX_NAME) + + + +#endif diff --git a/include/msgpack/predef/architecture/ia64.h b/include/msgpack/predef/architecture/ia64.h new file mode 100644 index 0000000..a33f1e9 --- /dev/null +++ b/include/msgpack/predef/architecture/ia64.h @@ -0,0 +1,49 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_IA64_H +#define MSGPACK_PREDEF_ARCHITECTURE_IA64_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_IA64`] + +[@http://en.wikipedia.org/wiki/Ia64 Intel Itanium 64] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__ia64__`] [__predef_detection__]] + [[`_IA64`] [__predef_detection__]] + [[`__IA64__`] [__predef_detection__]] + [[`__ia64`] [__predef_detection__]] + [[`_M_IA64`] [__predef_detection__]] + [[`__itanium__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_ARCH_IA64 MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__ia64__) || defined(_IA64) || \ + defined(__IA64__) || defined(__ia64) || \ + defined(_M_IA64) || defined(__itanium__) +# undef MSGPACK_ARCH_IA64 +# define MSGPACK_ARCH_IA64 MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_ARCH_IA64 +# define MSGPACK_ARCH_IA64_AVAILABLE +#endif + +#define MSGPACK_ARCH_IA64_NAME "Intel Itanium 64" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_IA64,MSGPACK_ARCH_IA64_NAME) + +#endif diff --git a/include/msgpack/predef/architecture/m68k.h b/include/msgpack/predef/architecture/m68k.h new file mode 100644 index 0000000..5c530d5 --- /dev/null +++ b/include/msgpack/predef/architecture/m68k.h @@ -0,0 +1,83 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_M68K_H +#define MSGPACK_PREDEF_ARCHITECTURE_M68K_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_M68K`] + +[@http://en.wikipedia.org/wiki/M68k Motorola 68k] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__m68k__`] [__predef_detection__]] + [[`M68000`] [__predef_detection__]] + + [[`__mc68060__`] [6.0.0]] + [[`mc68060`] [6.0.0]] + [[`__mc68060`] [6.0.0]] + [[`__mc68040__`] [4.0.0]] + [[`mc68040`] [4.0.0]] + [[`__mc68040`] [4.0.0]] + [[`__mc68030__`] [3.0.0]] + [[`mc68030`] [3.0.0]] + [[`__mc68030`] [3.0.0]] + [[`__mc68020__`] [2.0.0]] + [[`mc68020`] [2.0.0]] + [[`__mc68020`] [2.0.0]] + [[`__mc68010__`] [1.0.0]] + [[`mc68010`] [1.0.0]] + [[`__mc68010`] [1.0.0]] + [[`__mc68000__`] [0.0.1]] + [[`mc68000`] [0.0.1]] + [[`__mc68000`] [0.0.1]] + ] + */ + +#define MSGPACK_ARCH_M68K MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__m68k__) || defined(M68000) +# undef MSGPACK_ARCH_M68K +# if !defined(MSGPACK_ARCH_M68K) && (defined(__mc68060__) || defined(mc68060) || defined(__mc68060)) +# define MSGPACK_ARCH_M68K MSGPACK_VERSION_NUMBER(6,0,0) +# endif +# if !defined(MSGPACK_ARCH_M68K) && (defined(__mc68040__) || defined(mc68040) || defined(__mc68040)) +# define MSGPACK_ARCH_M68K MSGPACK_VERSION_NUMBER(4,0,0) +# endif +# if !defined(MSGPACK_ARCH_M68K) && (defined(__mc68030__) || defined(mc68030) || defined(__mc68030)) +# define MSGPACK_ARCH_M68K MSGPACK_VERSION_NUMBER(3,0,0) +# endif +# if !defined(MSGPACK_ARCH_M68K) && (defined(__mc68020__) || defined(mc68020) || defined(__mc68020)) +# define MSGPACK_ARCH_M68K MSGPACK_VERSION_NUMBER(2,0,0) +# endif +# if !defined(MSGPACK_ARCH_M68K) && (defined(__mc68010__) || defined(mc68010) || defined(__mc68010)) +# define MSGPACK_ARCH_M68K MSGPACK_VERSION_NUMBER(1,0,0) +# endif +# if !defined(MSGPACK_ARCH_M68K) && (defined(__mc68000__) || defined(mc68000) || defined(__mc68000)) +# define MSGPACK_ARCH_M68K MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# if !defined(MSGPACK_ARCH_M68K) +# define MSGPACK_ARCH_M68K MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_M68K +# define MSGPACK_ARCH_M68K_AVAILABLE +#endif + +#define MSGPACK_ARCH_M68K_NAME "Motorola 68k" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_M68K,MSGPACK_ARCH_M68K_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/mips.h b/include/msgpack/predef/architecture/mips.h new file mode 100644 index 0000000..2559e71 --- /dev/null +++ b/include/msgpack/predef/architecture/mips.h @@ -0,0 +1,74 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_MIPS_H +#define MSGPACK_PREDEF_ARCHITECTURE_MIPS_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_MIPS`] + +[@http://en.wikipedia.org/wiki/MIPS_architecture MIPS] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__mips__`] [__predef_detection__]] + [[`__mips`] [__predef_detection__]] + [[`__MIPS__`] [__predef_detection__]] + + [[`__mips`] [V.0.0]] + [[`_MIPS_ISA_MIPS1`] [1.0.0]] + [[`_R3000`] [1.0.0]] + [[`_MIPS_ISA_MIPS2`] [2.0.0]] + [[`__MIPS_ISA2__`] [2.0.0]] + [[`_R4000`] [2.0.0]] + [[`_MIPS_ISA_MIPS3`] [3.0.0]] + [[`__MIPS_ISA3__`] [3.0.0]] + [[`_MIPS_ISA_MIPS4`] [4.0.0]] + [[`__MIPS_ISA4__`] [4.0.0]] + ] + */ + +#define MSGPACK_ARCH_MIPS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__mips__) || defined(__mips) || \ + defined(__MIPS__) +# undef MSGPACK_ARCH_MIPS +# if !defined(MSGPACK_ARCH_MIPS) && (defined(__mips)) +# define MSGPACK_ARCH_MIPS MSGPACK_VERSION_NUMBER(__mips,0,0) +# endif +# if !defined(MSGPACK_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS1) || defined(_R3000)) +# define MSGPACK_ARCH_MIPS MSGPACK_VERSION_NUMBER(1,0,0) +# endif +# if !defined(MSGPACK_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS2) || defined(__MIPS_ISA2__) || defined(_R4000)) +# define MSGPACK_ARCH_MIPS MSGPACK_VERSION_NUMBER(2,0,0) +# endif +# if !defined(MSGPACK_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS3) || defined(__MIPS_ISA3__)) +# define MSGPACK_ARCH_MIPS MSGPACK_VERSION_NUMBER(3,0,0) +# endif +# if !defined(MSGPACK_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS4) || defined(__MIPS_ISA4__)) +# define MSGPACK_ARCH_MIPS MSGPACK_VERSION_NUMBER(4,0,0) +# endif +# if !defined(MSGPACK_ARCH_MIPS) +# define MSGPACK_ARCH_MIPS MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_MIPS +# define MSGPACK_ARCH_MIPS_AVAILABLE +#endif + +#define MSGPACK_ARCH_MIPS_NAME "MIPS" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_MIPS,MSGPACK_ARCH_MIPS_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/parisc.h b/include/msgpack/predef/architecture/parisc.h new file mode 100644 index 0000000..f6b575b --- /dev/null +++ b/include/msgpack/predef/architecture/parisc.h @@ -0,0 +1,65 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_PARISC_H +#define MSGPACK_PREDEF_ARCHITECTURE_PARISC_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_PARISK`] + +[@http://en.wikipedia.org/wiki/PA-RISC_family HP/PA RISC] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__hppa__`] [__predef_detection__]] + [[`__hppa`] [__predef_detection__]] + [[`__HPPA__`] [__predef_detection__]] + + [[`_PA_RISC1_0`] [1.0.0]] + [[`_PA_RISC1_1`] [1.1.0]] + [[`__HPPA11__`] [1.1.0]] + [[`__PA7100__`] [1.1.0]] + [[`_PA_RISC2_0`] [2.0.0]] + [[`__RISC2_0__`] [2.0.0]] + [[`__HPPA20__`] [2.0.0]] + [[`__PA8000__`] [2.0.0]] + ] + */ + +#define MSGPACK_ARCH_PARISC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__hppa__) || defined(__hppa) || defined(__HPPA__) +# undef MSGPACK_ARCH_PARISC +# if !defined(MSGPACK_ARCH_PARISC) && (defined(_PA_RISC1_0)) +# define MSGPACK_ARCH_PARISC MSGPACK_VERSION_NUMBER(1,0,0) +# endif +# if !defined(MSGPACK_ARCH_PARISC) && (defined(_PA_RISC1_1) || defined(__HPPA11__) || defined(__PA7100__)) +# define MSGPACK_ARCH_PARISC MSGPACK_VERSION_NUMBER(1,1,0) +# endif +# if !defined(MSGPACK_ARCH_PARISC) && (defined(_PA_RISC2_0) || defined(__RISC2_0__) || defined(__HPPA20__) || defined(__PA8000__)) +# define MSGPACK_ARCH_PARISC MSGPACK_VERSION_NUMBER(2,0,0) +# endif +# if !defined(MSGPACK_ARCH_PARISC) +# define MSGPACK_ARCH_PARISC MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_PARISC +# define MSGPACK_ARCH_PARISC_AVAILABLE +#endif + +#define MSGPACK_ARCH_PARISC_NAME "HP/PA RISC" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_PARISC,MSGPACK_ARCH_PARISC_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/ppc.h b/include/msgpack/predef/architecture/ppc.h new file mode 100644 index 0000000..a62d604 --- /dev/null +++ b/include/msgpack/predef/architecture/ppc.h @@ -0,0 +1,73 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_PPC_H +#define MSGPACK_PREDEF_ARCHITECTURE_PPC_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_PPC`] + +[@http://en.wikipedia.org/wiki/PowerPC PowerPC] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__powerpc`] [__predef_detection__]] + [[`__powerpc__`] [__predef_detection__]] + [[`__POWERPC__`] [__predef_detection__]] + [[`__ppc__`] [__predef_detection__]] + [[`_M_PPC`] [__predef_detection__]] + [[`_ARCH_PPC`] [__predef_detection__]] + [[`__PPCGECKO__`] [__predef_detection__]] + [[`__PPCBROADWAY__`] [__predef_detection__]] + [[`_XENON`] [__predef_detection__]] + + [[`__ppc601__`] [6.1.0]] + [[`_ARCH_601`] [6.1.0]] + [[`__ppc603__`] [6.3.0]] + [[`_ARCH_603`] [6.3.0]] + [[`__ppc604__`] [6.4.0]] + [[`__ppc604__`] [6.4.0]] + ] + */ + +#define MSGPACK_ARCH_PPC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__powerpc) || defined(__powerpc__) || \ + defined(__POWERPC__) || defined(__ppc__) || \ + defined(_M_PPC) || defined(_ARCH_PPC) || \ + defined(__PPCGECKO__) || defined(__PPCBROADWAY__) || \ + defined(_XENON) +# undef MSGPACK_ARCH_PPC +# if !defined (MSGPACK_ARCH_PPC) && (defined(__ppc601__) || defined(_ARCH_601)) +# define MSGPACK_ARCH_PPC MSGPACK_VERSION_NUMBER(6,1,0) +# endif +# if !defined (MSGPACK_ARCH_PPC) && (defined(__ppc603__) || defined(_ARCH_603)) +# define MSGPACK_ARCH_PPC MSGPACK_VERSION_NUMBER(6,3,0) +# endif +# if !defined (MSGPACK_ARCH_PPC) && (defined(__ppc604__) || defined(__ppc604__)) +# define MSGPACK_ARCH_PPC MSGPACK_VERSION_NUMBER(6,4,0) +# endif +# if !defined (MSGPACK_ARCH_PPC) +# define MSGPACK_ARCH_PPC MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_PPC +# define MSGPACK_ARCH_PPC_AVAILABLE +#endif + +#define MSGPACK_ARCH_PPC_NAME "PowerPC" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_PPC,MSGPACK_ARCH_PPC_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/pyramid.h b/include/msgpack/predef/architecture/pyramid.h new file mode 100644 index 0000000..b61323b --- /dev/null +++ b/include/msgpack/predef/architecture/pyramid.h @@ -0,0 +1,43 @@ +/* +Copyright Rene Rivera 2011-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_PYRAMID_H +#define MSGPACK_PREDEF_ARCHITECTURE_PYRAMID_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_PYRAMID`] + +Pyramid 9810 architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`pyr`] [__predef_detection__]] + ] + */ + +#define MSGPACK_ARCH_PYRAMID MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(pyr) +# undef MSGPACK_ARCH_PYRAMID +# define MSGPACK_ARCH_PYRAMID MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_ARCH_PYRAMID +# define MSGPACK_ARCH_PYRAMID_AVAILABLE +#endif + +#define MSGPACK_ARCH_PYRAMID_NAME "Pyramid 9810" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_PYRAMID,MSGPACK_ARCH_PYRAMID_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/rs6k.h b/include/msgpack/predef/architecture/rs6k.h new file mode 100644 index 0000000..78b87b5 --- /dev/null +++ b/include/msgpack/predef/architecture/rs6k.h @@ -0,0 +1,56 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_RS6K_H +#define MSGPACK_PREDEF_ARCHITECTURE_RS6K_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_RS6000`] + +[@http://en.wikipedia.org/wiki/RS/6000 RS/6000] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__THW_RS6000`] [__predef_detection__]] + [[`_IBMR2`] [__predef_detection__]] + [[`_POWER`] [__predef_detection__]] + [[`_ARCH_PWR`] [__predef_detection__]] + [[`_ARCH_PWR2`] [__predef_detection__]] + ] + */ + +#define MSGPACK_ARCH_RS6000 MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__THW_RS6000) || defined(_IBMR2) || \ + defined(_POWER) || defined(_ARCH_PWR) || \ + defined(_ARCH_PWR2) +# undef MSGPACK_ARCH_RS6000 +# define MSGPACK_ARCH_RS6000 MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_ARCH_RS6000 +# define MSGPACK_ARCH_RS6000_AVAILABLE +#endif + +#define MSGPACK_ARCH_RS6000_NAME "RS/6000" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_RS6000,MSGPACK_ARCH_RS6000_NAME) + +#define MSGPACK_ARCH_PWR MSGPACK_ARCH_RS6000 + +#if MSGPACK_ARCH_PWR +# define MSGPACK_ARCH_PWR_AVAILABLE +#endif + +#define MSGPACK_ARCH_PWR_NAME MSGPACK_ARCH_RS6000_NAME + +#endif diff --git a/include/msgpack/predef/architecture/sparc.h b/include/msgpack/predef/architecture/sparc.h new file mode 100644 index 0000000..5b52db1 --- /dev/null +++ b/include/msgpack/predef/architecture/sparc.h @@ -0,0 +1,55 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_SPARC_H +#define MSGPACK_PREDEF_ARCHITECTURE_SPARC_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_SPARC`] + +[@http://en.wikipedia.org/wiki/SPARC SPARC] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__sparc__`] [__predef_detection__]] + [[`__sparc`] [__predef_detection__]] + + [[`__sparcv9`] [9.0.0]] + [[`__sparcv8`] [8.0.0]] + ] + */ + +#define MSGPACK_ARCH_SPARC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__sparc__) || defined(__sparc) +# undef MSGPACK_ARCH_SPARC +# if !defined(MSGPACK_ARCH_SPARC) && defined(__sparcv9) +# define MSGPACK_ARCH_SPARC MSGPACK_VERSION_NUMBER(9,0,0) +# endif +# if !defined(MSGPACK_ARCH_SPARC) && defined(__sparcv8) +# define MSGPACK_ARCH_SPARC MSGPACK_VERSION_NUMBER(8,0,0) +# endif +# if !defined(MSGPACK_ARCH_SPARC) +# define MSGPACK_ARCH_SPARC MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_SPARC +# define MSGPACK_ARCH_SPARC_AVAILABLE +#endif + +#define MSGPACK_ARCH_SPARC_NAME "SPARC" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_SPARC,MSGPACK_ARCH_SPARC_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/superh.h b/include/msgpack/predef/architecture/superh.h new file mode 100644 index 0000000..bba6a2f --- /dev/null +++ b/include/msgpack/predef/architecture/superh.h @@ -0,0 +1,68 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_SUPERH_H +#define MSGPACK_PREDEF_ARCHITECTURE_SUPERH_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_SH`] + +[@http://en.wikipedia.org/wiki/SuperH SuperH] architecture: +If available versions \[1-5\] are specifically detected. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__sh__`] [__predef_detection__]] + + [[`__SH5__`] [5.0.0]] + [[`__SH4__`] [4.0.0]] + [[`__sh3__`] [3.0.0]] + [[`__SH3__`] [3.0.0]] + [[`__sh2__`] [2.0.0]] + [[`__sh1__`] [1.0.0]] + ] + */ + +#define MSGPACK_ARCH_SH MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__sh__) +# undef MSGPACK_ARCH_SH +# if !defined(MSGPACK_ARCH_SH) && (defined(__SH5__)) +# define MSGPACK_ARCH_SH MSGPACK_VERSION_NUMBER(5,0,0) +# endif +# if !defined(MSGPACK_ARCH_SH) && (defined(__SH4__)) +# define MSGPACK_ARCH_SH MSGPACK_VERSION_NUMBER(4,0,0) +# endif +# if !defined(MSGPACK_ARCH_SH) && (defined(__sh3__) || defined(__SH3__)) +# define MSGPACK_ARCH_SH MSGPACK_VERSION_NUMBER(3,0,0) +# endif +# if !defined(MSGPACK_ARCH_SH) && (defined(__sh2__)) +# define MSGPACK_ARCH_SH MSGPACK_VERSION_NUMBER(2,0,0) +# endif +# if !defined(MSGPACK_ARCH_SH) && (defined(__sh1__)) +# define MSGPACK_ARCH_SH MSGPACK_VERSION_NUMBER(1,0,0) +# endif +# if !defined(MSGPACK_ARCH_SH) +# define MSGPACK_ARCH_SH MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_SH +# define MSGPACK_ARCH_SH_AVAILABLE +#endif + +#define MSGPACK_ARCH_SH_NAME "SuperH" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_SH,MSGPACK_ARCH_SH_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/sys370.h b/include/msgpack/predef/architecture/sys370.h new file mode 100644 index 0000000..ddb7f04 --- /dev/null +++ b/include/msgpack/predef/architecture/sys370.h @@ -0,0 +1,44 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_SYS370_H +#define MSGPACK_PREDEF_ARCHITECTURE_SYS370_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_SYS370`] + +[@http://en.wikipedia.org/wiki/System/370 System/370] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__370__`] [__predef_detection__]] + [[`__THW_370__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_ARCH_SYS370 MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__370__) || defined(__THW_370__) +# undef MSGPACK_ARCH_SYS370 +# define MSGPACK_ARCH_SYS370 MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_ARCH_SYS370 +# define MSGPACK_ARCH_SYS370_AVAILABLE +#endif + +#define MSGPACK_ARCH_SYS370_NAME "System/370" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_SYS370,MSGPACK_ARCH_SYS370_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/sys390.h b/include/msgpack/predef/architecture/sys390.h new file mode 100644 index 0000000..029214f --- /dev/null +++ b/include/msgpack/predef/architecture/sys390.h @@ -0,0 +1,44 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_SYS390_H +#define MSGPACK_PREDEF_ARCHITECTURE_SYS390_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_SYS390`] + +[@http://en.wikipedia.org/wiki/System/390 System/390] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__s390__`] [__predef_detection__]] + [[`__s390x__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_ARCH_SYS390 MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__s390__) || defined(__s390x__) +# undef MSGPACK_ARCH_SYS390 +# define MSGPACK_ARCH_SYS390 MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_ARCH_SYS390 +# define MSGPACK_ARCH_SYS390_AVAILABLE +#endif + +#define MSGPACK_ARCH_SYS390_NAME "System/390" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_SYS390,MSGPACK_ARCH_SYS390_NAME) + + +#endif diff --git a/include/msgpack/predef/architecture/x86.h b/include/msgpack/predef/architecture/x86.h new file mode 100644 index 0000000..109d9d9 --- /dev/null +++ b/include/msgpack/predef/architecture/x86.h @@ -0,0 +1,38 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_X86_H +#define MSGPACK_PREDEF_ARCHITECTURE_X86_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_X86`] + +[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture. This is +a category to indicate that either `MSGPACK_ARCH_X86_32` or +`MSGPACK_ARCH_X86_64` is detected. + */ + +#define MSGPACK_ARCH_X86 MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if MSGPACK_ARCH_X86_32 || MSGPACK_ARCH_X86_64 +# undef MSGPACK_ARCH_X86 +# define MSGPACK_ARCH_X86 MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_ARCH_X86 +# define MSGPACK_ARCH_X86_AVAILABLE +#endif + +#define MSGPACK_ARCH_X86_NAME "Intel x86" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_X86,MSGPACK_ARCH_X86_NAME) + +#endif diff --git a/include/msgpack/predef/architecture/x86/32.h b/include/msgpack/predef/architecture/x86/32.h new file mode 100644 index 0000000..ce6639d --- /dev/null +++ b/include/msgpack/predef/architecture/x86/32.h @@ -0,0 +1,87 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_X86_32_H +#define MSGPACK_PREDEF_ARCHITECTURE_X86_32_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_X86_32`] + +[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture: +If available versions \[3-6\] are specifically detected. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`i386`] [__predef_detection__]] + [[`__i386__`] [__predef_detection__]] + [[`__i486__`] [__predef_detection__]] + [[`__i586__`] [__predef_detection__]] + [[`__i686__`] [__predef_detection__]] + [[`__i386`] [__predef_detection__]] + [[`_M_IX86`] [__predef_detection__]] + [[`_X86_`] [__predef_detection__]] + [[`__THW_INTEL__`] [__predef_detection__]] + [[`__I86__`] [__predef_detection__]] + [[`__INTEL__`] [__predef_detection__]] + + [[`__I86__`] [V.0.0]] + [[`_M_IX86`] [V.0.0]] + [[`__i686__`] [6.0.0]] + [[`__i586__`] [5.0.0]] + [[`__i486__`] [4.0.0]] + [[`__i386__`] [3.0.0]] + ] + */ + +#define MSGPACK_ARCH_X86_32 MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(i386) || defined(__i386__) || \ + defined(__i486__) || defined(__i586__) || \ + defined(__i686__) || defined(__i386) || \ + defined(_M_IX86) || defined(_X86_) || \ + defined(__THW_INTEL__) || defined(__I86__) || \ + defined(__INTEL__) +# undef MSGPACK_ARCH_X86_32 +# if !defined(MSGPACK_ARCH_X86_32) && defined(__I86__) +# define MSGPACK_ARCH_X86_32 MSGPACK_VERSION_NUMBER(__I86__,0,0) +# endif +# if !defined(MSGPACK_ARCH_X86_32) && defined(_M_IX86) +# define MSGPACK_ARCH_X86_32 MSGPACK_PREDEF_MAKE_10_VV00(_M_IX86) +# endif +# if !defined(MSGPACK_ARCH_X86_32) && defined(__i686__) +# define MSGPACK_ARCH_X86_32 MSGPACK_VERSION_NUMBER(6,0,0) +# endif +# if !defined(MSGPACK_ARCH_X86_32) && defined(__i586__) +# define MSGPACK_ARCH_X86_32 MSGPACK_VERSION_NUMBER(5,0,0) +# endif +# if !defined(MSGPACK_ARCH_X86_32) && defined(__i486__) +# define MSGPACK_ARCH_X86_32 MSGPACK_VERSION_NUMBER(4,0,0) +# endif +# if !defined(MSGPACK_ARCH_X86_32) && defined(__i386__) +# define MSGPACK_ARCH_X86_32 MSGPACK_VERSION_NUMBER(3,0,0) +# endif +# if !defined(MSGPACK_ARCH_X86_32) +# define MSGPACK_ARCH_X86_32 MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_ARCH_X86_32 +# define MSGPACK_ARCH_X86_32_AVAILABLE +#endif + +#define MSGPACK_ARCH_X86_32_NAME "Intel x86-32" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_X86_32,MSGPACK_ARCH_X86_32_NAME) + +#include + +#endif diff --git a/include/msgpack/predef/architecture/x86/64.h b/include/msgpack/predef/architecture/x86/64.h new file mode 100644 index 0000000..d6d65ef --- /dev/null +++ b/include/msgpack/predef/architecture/x86/64.h @@ -0,0 +1,50 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_X86_64_H +#define MSGPACK_PREDEF_ARCHITECTURE_X86_64_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_X86_64`] + +[@http://en.wikipedia.org/wiki/Ia64 Intel IA-64] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__x86_64`] [__predef_detection__]] + [[`__x86_64__`] [__predef_detection__]] + [[`__amd64__`] [__predef_detection__]] + [[`__amd64`] [__predef_detection__]] + [[`_M_X64`] [__predef_detection__]] + ] + */ + +#define MSGPACK_ARCH_X86_64 MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__x86_64) || defined(__x86_64__) || \ + defined(__amd64__) || defined(__amd64) || \ + defined(_M_X64) +# undef MSGPACK_ARCH_X86_64 +# define MSGPACK_ARCH_X86_64 MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_ARCH_X86_64 +# define MSGPACK_ARCH_X86_64_AVAILABLE +#endif + +#define MSGPACK_ARCH_X86_64_NAME "Intel x86-64" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_X86_64,MSGPACK_ARCH_X86_64_NAME) + +#include + +#endif diff --git a/include/msgpack/predef/architecture/z.h b/include/msgpack/predef/architecture/z.h new file mode 100644 index 0000000..f8479f2 --- /dev/null +++ b/include/msgpack/predef/architecture/z.h @@ -0,0 +1,43 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ARCHITECTURE_Z_H +#define MSGPACK_PREDEF_ARCHITECTURE_Z_H + +#include +#include + +/*` +[heading `MSGPACK_ARCH_Z`] + +[@http://en.wikipedia.org/wiki/Z/Architecture z/Architecture] architecture. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__SYSC_ZARCH__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_ARCH_Z MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__SYSC_ZARCH__) +# undef MSGPACK_ARCH_Z +# define MSGPACK_ARCH_Z MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_ARCH_Z +# define MSGPACK_ARCH_Z_AVAILABLE +#endif + +#define MSGPACK_ARCH_Z_NAME "z/Architecture" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_Z,MSGPACK_ARCH_Z_NAME) + + +#endif diff --git a/include/msgpack/predef/compiler.h b/include/msgpack/predef/compiler.h new file mode 100644 index 0000000..08dec96 --- /dev/null +++ b/include/msgpack/predef/compiler.h @@ -0,0 +1,41 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_H +#define MSGPACK_PREDEF_COMPILER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/include/msgpack/predef/compiler/borland.h b/include/msgpack/predef/compiler/borland.h new file mode 100644 index 0000000..724a8e7 --- /dev/null +++ b/include/msgpack/predef/compiler/borland.h @@ -0,0 +1,64 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_BORLAND_H +#define MSGPACK_PREDEF_COMPILER_BORLAND_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_BORLAND`] + +[@http://en.wikipedia.org/wiki/C_plus_plus_builder Borland C++] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__BORLANDC__`] [__predef_detection__]] + [[`__CODEGEARC__`] [__predef_detection__]] + + [[`__BORLANDC__`] [V.R.P]] + [[`__CODEGEARC__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_BORLAND MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__BORLANDC__) || defined(__CODEGEARC__) +# if !defined(MSGPACK_COMP_BORLAND_DETECTION) && (defined(__CODEGEARC__)) +# define MSGPACK_COMP_BORLAND_DETECTION MSGPACK_PREDEF_MAKE_0X_VVRP(__CODEGEARC__) +# endif +# if !defined(MSGPACK_COMP_BORLAND_DETECTION) +# define MSGPACK_COMP_BORLAND_DETECTION MSGPACK_PREDEF_MAKE_0X_VVRP(__BORLANDC__) +# endif +#endif + +#ifdef MSGPACK_COMP_BORLAND_DETECTION +# define MSGPACK_COMP_BORLAND_AVAILABLE +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_BORLAND_EMULATED MSGPACK_COMP_BORLAND_DETECTION +# else +# undef MSGPACK_COMP_BORLAND +# define MSGPACK_COMP_BORLAND MSGPACK_COMP_BORLAND_DETECTION +# endif +# include +#endif + +#define MSGPACK_COMP_BORLAND_NAME "Borland C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_BORLAND,MSGPACK_COMP_BORLAND_NAME) + +#ifdef MSGPACK_COMP_BORLAND_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_BORLAND_EMULATED,MSGPACK_COMP_BORLAND_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/clang.h b/include/msgpack/predef/compiler/clang.h new file mode 100644 index 0000000..ded61ce --- /dev/null +++ b/include/msgpack/predef/compiler/clang.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_CLANG_H +#define MSGPACK_PREDEF_COMPILER_CLANG_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_CLANG`] + +[@http://en.wikipedia.org/wiki/Clang Clang] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__clang__`] [__predef_detection__]] + + [[`__clang_major__`, `__clang_minor__`, `__clang_patchlevel__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_CLANG MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__clang__) +# define MSGPACK_COMP_CLANG_DETECTION MSGPACK_VERSION_NUMBER(__clang_major__,__clang_minor__,__clang_patchlevel__) +#endif + +#ifdef MSGPACK_COMP_CLANG_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_CLANG_EMULATED MSGPACK_COMP_CLANG_DETECTION +# else +# undef MSGPACK_COMP_CLANG +# define MSGPACK_COMP_CLANG MSGPACK_COMP_CLANG_DETECTION +# endif +# define MSGPACK_COMP_CLANG_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_CLANG_NAME "Clang" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_CLANG,MSGPACK_COMP_CLANG_NAME) + +#ifdef MSGPACK_COMP_CLANG_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_CLANG_EMULATED,MSGPACK_COMP_CLANG_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/comeau.h b/include/msgpack/predef/compiler/comeau.h new file mode 100644 index 0000000..305517d --- /dev/null +++ b/include/msgpack/predef/compiler/comeau.h @@ -0,0 +1,62 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_COMEAU_H +#define MSGPACK_PREDEF_COMPILER_COMEAU_H + +#include +#include + +#define MSGPACK_COMP_COMO MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +/*` +[heading `MSGPACK_COMP_COMO`] + +[@http://en.wikipedia.org/wiki/Comeau_C/C%2B%2B Comeau C++] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__COMO__`] [__predef_detection__]] + + [[`__COMO_VERSION__`] [V.R.P]] + ] + */ + +#if defined(__COMO__) +# if !defined(MSGPACK_COMP_COMO_DETECTION) && defined(__CONO_VERSION__) +# define MSGPACK_COMP_COMO_DETECTION MSGPACK_PREDEF_MAKE_0X_VRP(__COMO_VERSION__) +# endif +# if !defined(MSGPACK_COMP_COMO_DETECTION) +# define MSGPACK_COMP_COMO_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_COMO_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_COMO_EMULATED MSGPACK_COMP_COMO_DETECTION +# else +# undef MSGPACK_COMP_COMO +# define MSGPACK_COMP_COMO MSGPACK_COMP_COMO_DETECTION +# endif +# define MSGPACK_COMP_COMO_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_COMO_NAME "Comeau C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_COMO,MSGPACK_COMP_COMO_NAME) + +#ifdef MSGPACK_COMP_COMO_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_COMO_EMULATED,MSGPACK_COMP_COMO_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/compaq.h b/include/msgpack/predef/compiler/compaq.h new file mode 100644 index 0000000..6755961 --- /dev/null +++ b/include/msgpack/predef/compiler/compaq.h @@ -0,0 +1,67 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_COMPAQ_H +#define MSGPACK_PREDEF_COMPILER_COMPAQ_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_DEC`] + +[@http://www.openvms.compaq.com/openvms/brochures/deccplus/ Compaq C/C++] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__DECCXX`] [__predef_detection__]] + [[`__DECC`] [__predef_detection__]] + + [[`__DECCXX_VER`] [V.R.P]] + [[`__DECC_VER`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_DEC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__DECC) || defined(__DECCXX) +# if !defined(MSGPACK_COMP_DEC_DETECTION) && defined(__DECCXX_VER) +# define MSGPACK_COMP_DEC_DETECTION MSGPACK_PREDEF_MAKE_10_VVRR0PP00(__DECCXX_VER) +# endif +# if !defined(MSGPACK_COMP_DEC_DETECTION) && defined(__DECC_VER) +# define MSGPACK_COMP_DEC_DETECTION MSGPACK_PREDEF_MAKE_10_VVRR0PP00(__DECC_VER) +# endif +# if !defined(MSGPACK_COMP_DEC_DETECTION) +# define MSGPACK_COM_DEC_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_DEC_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_DEC_EMULATED MSGPACK_COMP_DEC_DETECTION +# else +# undef MSGPACK_COMP_DEC +# define MSGPACK_COMP_DEC MSGPACK_COMP_DEC_DETECTION +# endif +# define MSGPACK_COMP_DEC_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_DEC_NAME "Compaq C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_DEC,MSGPACK_COMP_DEC_NAME) + +#ifdef MSGPACK_COMP_DEC_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_DEC_EMULATED,MSGPACK_COMP_DEC_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/diab.h b/include/msgpack/predef/compiler/diab.h new file mode 100644 index 0000000..8b2b584 --- /dev/null +++ b/include/msgpack/predef/compiler/diab.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_DIAB_H +#define MSGPACK_PREDEF_COMPILER_DIAB_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_DIAB`] + +[@http://www.windriver.com/products/development_suite/wind_river_compiler/ Diab C/C++] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__DCC__`] [__predef_detection__]] + + [[`__VERSION_NUMBER__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_DIAB MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__DCC__) +# define MSGPACK_COMP_DIAB_DETECTION MSGPACK_PREDEF_MAKE_10_VRPP(__VERSION_NUMBER__) +#endif + +#ifdef MSGPACK_COMP_DIAB_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_DIAB_EMULATED MSGPACK_COMP_DIAB_DETECTION +# else +# undef MSGPACK_COMP_DIAB +# define MSGPACK_COMP_DIAB MSGPACK_COMP_DIAB_DETECTION +# endif +# define MSGPACK_COMP_DIAB_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_DIAB_NAME "Diab C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_DIAB,MSGPACK_COMP_DIAB_NAME) + +#ifdef MSGPACK_COMP_DIAB_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_DIAB_EMULATED,MSGPACK_COMP_DIAB_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/digitalmars.h b/include/msgpack/predef/compiler/digitalmars.h new file mode 100644 index 0000000..c50d4fd --- /dev/null +++ b/include/msgpack/predef/compiler/digitalmars.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_DIGITALMARS_H +#define MSGPACK_PREDEF_COMPILER_DIGITALMARS_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_DMC`] + +[@http://en.wikipedia.org/wiki/Digital_Mars Digital Mars] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__DMC__`] [__predef_detection__]] + + [[`__DMC__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_DMC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__DMC__) +# define MSGPACK_COMP_DMC_DETECTION MSGPACK_PREDEF_MAKE_0X_VRP(__DMC__) +#endif + +#ifdef MSGPACK_COMP_DMC_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_DMC_EMULATED MSGPACK_COMP_DMC_DETECTION +# else +# undef MSGPACK_COMP_DMC +# define MSGPACK_COMP_DMC MSGPACK_COMP_DMC_DETECTION +# endif +# define MSGPACK_COMP_DMC_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_DMC_NAME "Digital Mars" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_DMC,MSGPACK_COMP_DMC_NAME) + +#ifdef MSGPACK_COMP_DMC_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_DMC_EMULATED,MSGPACK_COMP_DMC_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/dignus.h b/include/msgpack/predef/compiler/dignus.h new file mode 100644 index 0000000..f5161cc --- /dev/null +++ b/include/msgpack/predef/compiler/dignus.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_DIGNUS_H +#define MSGPACK_PREDEF_COMPILER_DIGNUS_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_SYSC`] + +[@http://www.dignus.com/dcxx/ Dignus Systems/C++] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__SYSC__`] [__predef_detection__]] + + [[`__SYSC_VER__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_SYSC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__SYSC__) +# define MSGPACK_COMP_SYSC_DETECTION MSGPACK_PREDEF_MAKE_10_VRRPP(__SYSC_VER__) +#endif + +#ifdef MSGPACK_COMP_SYSC_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_SYSC_EMULATED MSGPACK_COMP_SYSC_DETECTION +# else +# undef MSGPACK_COMP_SYSC +# define MSGPACK_COMP_SYSC MSGPACK_COMP_SYSC_DETECTION +# endif +# define MSGPACK_COMP_SYSC_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_SYSC_NAME "Dignus Systems/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_SYSC,MSGPACK_COMP_SYSC_NAME) + +#ifdef MSGPACK_COMP_SYSC_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_SYSC_EMULATED,MSGPACK_COMP_SYSC_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/edg.h b/include/msgpack/predef/compiler/edg.h new file mode 100644 index 0000000..5284243 --- /dev/null +++ b/include/msgpack/predef/compiler/edg.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_EDG_H +#define MSGPACK_PREDEF_COMPILER_EDG_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_EDG`] + +[@http://en.wikipedia.org/wiki/Edison_Design_Group EDG C++ Frontend] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__EDG__`] [__predef_detection__]] + + [[`__EDG_VERSION__`] [V.R.0]] + ] + */ + +#define MSGPACK_COMP_EDG MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__EDG__) +# define MSGPACK_COMP_EDG_DETECTION MSGPACK_PREDEF_MAKE_10_VRR(__EDG_VERSION__) +#endif + +#ifdef MSGPACK_COMP_EDG_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_EDG_EMULATED MSGPACK_COMP_EDG_DETECTION +# else +# undef MSGPACK_COMP_EDG +# define MSGPACK_COMP_EDG MSGPACK_COMP_EDG_DETECTION +# endif +# define MSGPACK_COMP_EDG_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_EDG_NAME "EDG C++ Frontend" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_EDG,MSGPACK_COMP_EDG_NAME) + +#ifdef MSGPACK_COMP_EDG_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_EDG_EMULATED,MSGPACK_COMP_EDG_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/ekopath.h b/include/msgpack/predef/compiler/ekopath.h new file mode 100644 index 0000000..2385966 --- /dev/null +++ b/include/msgpack/predef/compiler/ekopath.h @@ -0,0 +1,58 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_EKOPATH_H +#define MSGPACK_PREDEF_COMPILER_EKOPATH_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_PATH`] + +[@http://en.wikipedia.org/wiki/PathScale EKOpath] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__PATHCC__`] [__predef_detection__]] + + [[`__PATHCC__`, `__PATHCC_MINOR__`, `__PATHCC_PATCHLEVEL__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_PATH MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__PATHCC__) +# define MSGPACK_COMP_PATH_DETECTION \ + MSGPACK_VERSION_NUMBER(__PATHCC__,__PATHCC_MINOR__,__PATHCC_PATCHLEVEL__) +#endif + +#ifdef MSGPACK_COMP_PATH_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_PATH_EMULATED MSGPACK_COMP_PATH_DETECTION +# else +# undef MSGPACK_COMP_PATH +# define MSGPACK_COMP_PATH MSGPACK_COMP_PATH_DETECTION +# endif +# define MSGPACK_COMP_PATH_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_PATH_NAME "EKOpath" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_PATH,MSGPACK_COMP_PATH_NAME) + +#ifdef MSGPACK_COMP_PATH_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_PATH_EMULATED,MSGPACK_COMP_PATH_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/gcc.h b/include/msgpack/predef/compiler/gcc.h new file mode 100644 index 0000000..95f5729 --- /dev/null +++ b/include/msgpack/predef/compiler/gcc.h @@ -0,0 +1,69 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_GCC_H +#define MSGPACK_PREDEF_COMPILER_GCC_H + +/* Other compilers that emulate this one need to be detected first. */ + +#include + +#include +#include + +/*` +[heading `MSGPACK_COMP_GNUC`] + +[@http://en.wikipedia.org/wiki/GNU_Compiler_Collection Gnu GCC C/C++] compiler. +Version number available as major, minor, and patch (if available). + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__GNUC__`] [__predef_detection__]] + + [[`__GNUC__`, `__GNUC_MINOR__`, `__GNUC_PATCHLEVEL__`] [V.R.P]] + [[`__GNUC__`, `__GNUC_MINOR__`] [V.R.0]] + ] + */ + +#define MSGPACK_COMP_GNUC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__GNUC__) +# if !defined(MSGPACK_COMP_GNUC_DETECTION) && defined(__GNUC_PATCHLEVEL__) +# define MSGPACK_COMP_GNUC_DETECTION \ + MSGPACK_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__) +# endif +# if !defined(MSGPACK_COMP_GNUC_DETECTION) +# define MSGPACK_COMP_GNUC_DETECTION \ + MSGPACK_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,0) +# endif +#endif + +#ifdef MSGPACK_COMP_GNUC_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_GNUC_EMULATED MSGPACK_COMP_GNUC_DETECTION +# else +# undef MSGPACK_COMP_GNUC +# define MSGPACK_COMP_GNUC MSGPACK_COMP_GNUC_DETECTION +# endif +# define MSGPACK_COMP_GNUC_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_GNUC_NAME "Gnu GCC C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_GNUC,MSGPACK_COMP_GNUC_NAME) + +#ifdef MSGPACK_COMP_GNUC_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_GNUC_EMULATED,MSGPACK_COMP_GNUC_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/gcc_xml.h b/include/msgpack/predef/compiler/gcc_xml.h new file mode 100644 index 0000000..8dd4ff7 --- /dev/null +++ b/include/msgpack/predef/compiler/gcc_xml.h @@ -0,0 +1,53 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_GCC_XML_H +#define MSGPACK_PREDEF_COMPILER_GCC_XML_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_GCCXML`] + +[@http://www.gccxml.org/ GCC XML] compiler. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__GCCXML__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_COMP_GCCXML MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__GCCXML__) +# define MSGPACK_COMP_GCCXML_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#ifdef MSGPACK_COMP_GCCXML_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_GCCXML_EMULATED MSGPACK_COMP_GCCXML_DETECTION +# else +# undef MSGPACK_COMP_GCCXML +# define MSGPACK_COMP_GCCXML MSGPACK_COMP_GCCXML_DETECTION +# endif +# define MSGPACK_COMP_GCCXML_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_GCCXML_NAME "GCC XML" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_GCCXML,MSGPACK_COMP_GCCXML_NAME) + +#ifdef MSGPACK_COMP_GCCXML_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_GCCXML_EMULATED,MSGPACK_COMP_GCCXML_NAME) +#endif + +#endif diff --git a/include/msgpack/predef/compiler/greenhills.h b/include/msgpack/predef/compiler/greenhills.h new file mode 100644 index 0000000..7ccab8b --- /dev/null +++ b/include/msgpack/predef/compiler/greenhills.h @@ -0,0 +1,67 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_GREENHILLS_H +#define MSGPACK_PREDEF_COMPILER_GREENHILLS_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_GHS`] + +[@http://en.wikipedia.org/wiki/Green_Hills_Software Green Hills C/C++] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__ghs`] [__predef_detection__]] + [[`__ghs__`] [__predef_detection__]] + + [[`__GHS_VERSION_NUMBER__`] [V.R.P]] + [[`__ghs`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_GHS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__ghs) || defined(__ghs__) +# if !defined(MSGPACK_COMP_GHS_DETECTION) && defined(__GHS_VERSION_NUMBER__) +# define MSGPACK_COMP_GHS_DETECTION MSGPACK_PREDEF_MAKE_10_VRP(__GHS_VERSION_NUMBER__) +# endif +# if !defined(MSGPACK_COMP_GHS_DETECTION) && defined(__ghs) +# define MSGPACK_COMP_GHS_DETECTION MSGPACK_PREDEF_MAKE_10_VRP(__ghs) +# endif +# if !defined(MSGPACK_COMP_GHS_DETECTION) +# define MSGPACK_COMP_GHS_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_GHS_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_GHS_EMULATED MSGPACK_COMP_GHS_DETECTION +# else +# undef MSGPACK_COMP_GHS +# define MSGPACK_COMP_GHS MSGPACK_COMP_GHS_DETECTION +# endif +# define MSGPACK_COMP_GHS_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_GHS_NAME "Green Hills C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_GHS,MSGPACK_COMP_GHS_NAME) + +#ifdef MSGPACK_COMP_GHS_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_GHS_EMULATED,MSGPACK_COMP_GHS_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/hp_acc.h b/include/msgpack/predef/compiler/hp_acc.h new file mode 100644 index 0000000..c31e6fa --- /dev/null +++ b/include/msgpack/predef/compiler/hp_acc.h @@ -0,0 +1,62 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_HP_ACC_H +#define MSGPACK_PREDEF_COMPILER_HP_ACC_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_HPACC`] + +HP aC++ compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__HP_aCC`] [__predef_detection__]] + + [[`__HP_aCC`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_HPACC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__HP_aCC) +# if !defined(MSGPACK_COMP_HPACC_DETECTION) && (__HP_aCC > 1) +# define MSGPACK_COMP_HPACC_DETECTION MSGPACK_PREDEF_MAKE_10_VVRRPP(__HP_aCC) +# endif +# if !defined(MSGPACK_COMP_HPACC_DETECTION) +# define MSGPACK_COMP_HPACC_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_HPACC_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_HPACC_EMULATED MSGPACK_COMP_HPACC_DETECTION +# else +# undef MSGPACK_COMP_HPACC +# define MSGPACK_COMP_HPACC MSGPACK_COMP_HPACC_DETECTION +# endif +# define MSGPACK_COMP_HPACC_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_HPACC_NAME "HP aC++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_HPACC,MSGPACK_COMP_HPACC_NAME) + +#ifdef MSGPACK_COMP_HPACC_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_HPACC_EMULATED,MSGPACK_COMP_HPACC_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/iar.h b/include/msgpack/predef/compiler/iar.h new file mode 100644 index 0000000..65614bb --- /dev/null +++ b/include/msgpack/predef/compiler/iar.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_IAR_H +#define MSGPACK_PREDEF_COMPILER_IAR_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_IAR`] + +IAR C/C++ compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__IAR_SYSTEMS_ICC__`] [__predef_detection__]] + + [[`__VER__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_IAR MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__IAR_SYSTEMS_ICC__) +# define MSGPACK_COMP_IAR_DETECTION MSGPACK_PREDEF_MAKE_10_VVRR(__VER__) +#endif + +#ifdef MSGPACK_COMP_IAR_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_IAR_EMULATED MSGPACK_COMP_IAR_DETECTION +# else +# undef MSGPACK_COMP_IAR +# define MSGPACK_COMP_IAR MSGPACK_COMP_IAR_DETECTION +# endif +# define MSGPACK_COMP_IAR_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_IAR_NAME "IAR C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_IAR,MSGPACK_COMP_IAR_NAME) + +#ifdef MSGPACK_COMP_IAR_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_IAR_EMULATED,MSGPACK_COMP_IAR_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/ibm.h b/include/msgpack/predef/compiler/ibm.h new file mode 100644 index 0000000..346db81 --- /dev/null +++ b/include/msgpack/predef/compiler/ibm.h @@ -0,0 +1,73 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_IBM_H +#define MSGPACK_PREDEF_COMPILER_IBM_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_IBM`] + +[@http://en.wikipedia.org/wiki/VisualAge IBM XL C/C++] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__IBMCPP__`] [__predef_detection__]] + [[`__xlC__`] [__predef_detection__]] + [[`__xlc__`] [__predef_detection__]] + + [[`__COMPILER_VER__`] [V.R.P]] + [[`__xlC__`] [V.R.P]] + [[`__xlc__`] [V.R.P]] + [[`__IBMCPP__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_IBM MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__IBMCPP__) || defined(__xlC__) || defined(__xlc__) +# if !defined(MSGPACK_COMP_IBM_DETECTION) && defined(__COMPILER_VER__) +# define MSGPACK_COMP_IBM_DETECTION MSGPACK_PREDEF_MAKE_0X_VRRPPPP(__COMPILER_VER__) +# endif +# if !defined(MSGPACK_COMP_IBM_DETECTION) && defined(__xlC__) +# define MSGPACK_COMP_IBM_DETECTION MSGPACK_PREDEF_MAKE_0X_VVRR(__xlC__) +# endif +# if !defined(MSGPACK_COMP_IBM_DETECTION) && defined(__xlc__) +# define MSGPACK_COMP_IBM_DETECTION MSGPACK_PREDEF_MAKE_0X_VVRR(__xlc__) +# endif +# if !defined(MSGPACK_COMP_IBM_DETECTION) +# define MSGPACK_COMP_IBM_DETECTION MSGPACK_PREDEF_MAKE_10_VRP(__IBMCPP__) +# endif +#endif + +#ifdef MSGPACK_COMP_IBM_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_IBM_EMULATED MSGPACK_COMP_IBM_DETECTION +# else +# undef MSGPACK_COMP_IBM +# define MSGPACK_COMP_IBM MSGPACK_COMP_IBM_DETECTION +# endif +# define MSGPACK_COMP_IBM_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_IBM_NAME "IBM XL C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_IBM,MSGPACK_COMP_IBM_NAME) + +#ifdef MSGPACK_COMP_IBM_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_IBM_EMULATED,MSGPACK_COMP_IBM_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/intel.h b/include/msgpack/predef/compiler/intel.h new file mode 100644 index 0000000..ed3e4bc --- /dev/null +++ b/include/msgpack/predef/compiler/intel.h @@ -0,0 +1,66 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_INTEL_H +#define MSGPACK_PREDEF_COMPILER_INTEL_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_INTEL`] + +[@http://en.wikipedia.org/wiki/Intel_C%2B%2B Intel C/C++] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__INTEL_COMPILER`] [__predef_detection__]] + [[`__ICL`] [__predef_detection__]] + [[`__ICC`] [__predef_detection__]] + [[`__ECC`] [__predef_detection__]] + + [[`__INTEL_COMPILER`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_INTEL MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \ + defined(__ECC) +# if !defined(MSGPACK_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) +# define MSGPACK_COMP_INTEL_DETECTION MSGPACK_PREDEF_MAKE_10_VRP(__INTEL_COMPILER) +# endif +# if !defined(MSGPACK_COMP_INTEL_DETECTION) +# define MSGPACK_COMP_INTEL_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_INTEL_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_INTEL_EMULATED MSGPACK_COMP_INTEL_DETECTION +# else +# undef MSGPACK_COMP_INTEL +# define MSGPACK_COMP_INTEL MSGPACK_COMP_INTEL_DETECTION +# endif +# define MSGPACK_COMP_INTEL_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_INTEL_NAME "Intel C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_INTEL,MSGPACK_COMP_INTEL_NAME) + +#ifdef MSGPACK_COMP_INTEL_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_INTEL_EMULATED,MSGPACK_COMP_INTEL_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/kai.h b/include/msgpack/predef/compiler/kai.h new file mode 100644 index 0000000..b7b701d --- /dev/null +++ b/include/msgpack/predef/compiler/kai.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_KAI_H +#define MSGPACK_PREDEF_COMPILER_KAI_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_KCC`] + +Kai C++ compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__KCC`] [__predef_detection__]] + + [[`__KCC_VERSION`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_KCC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__KCC) +# define MSGPACK_COMP_KCC_DETECTION MSGPACK_PREDEF_MAKE_0X_VRPP(__KCC_VERSION) +#endif + +#ifdef MSGPACK_COMP_KCC_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_KCC_EMULATED MSGPACK_COMP_KCC_DETECTION +# else +# undef MSGPACK_COMP_KCC +# define MSGPACK_COMP_KCC MSGPACK_COMP_KCC_DETECTION +# endif +# define MSGPACK_COMP_KCC_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_KCC_NAME "Kai C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_KCC,MSGPACK_COMP_KCC_NAME) + +#ifdef MSGPACK_COMP_KCC_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_KCC_EMULATED,MSGPACK_COMP_KCC_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/llvm.h b/include/msgpack/predef/compiler/llvm.h new file mode 100644 index 0000000..cc2b834 --- /dev/null +++ b/include/msgpack/predef/compiler/llvm.h @@ -0,0 +1,58 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_LLVM_H +#define MSGPACK_PREDEF_COMPILER_LLVM_H + +/* Other compilers that emulate this one need to be detected first. */ + +#include + +#include +#include + +/*` +[heading `MSGPACK_COMP_LLVM`] + +[@http://en.wikipedia.org/wiki/LLVM LLVM] compiler. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__llvm__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_COMP_LLVM MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__llvm__) +# define MSGPACK_COMP_LLVM_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#ifdef MSGPACK_COMP_LLVM_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_LLVM_EMULATED MSGPACK_COMP_LLVM_DETECTION +# else +# undef MSGPACK_COMP_LLVM +# define MSGPACK_COMP_LLVM MSGPACK_COMP_LLVM_DETECTION +# endif +# define MSGPACK_COMP_LLVM_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_LLVM_NAME "LLVM" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_LLVM,MSGPACK_COMP_LLVM_NAME) + +#ifdef MSGPACK_COMP_LLVM_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_LLVM_EMULATED,MSGPACK_COMP_LLVM_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/metaware.h b/include/msgpack/predef/compiler/metaware.h new file mode 100644 index 0000000..0d9d04b --- /dev/null +++ b/include/msgpack/predef/compiler/metaware.h @@ -0,0 +1,54 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_METAWARE_H +#define MSGPACK_PREDEF_COMPILER_METAWARE_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_HIGHC`] + +MetaWare High C/C++ compiler. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__HIGHC__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_COMP_HIGHC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__HIGHC__) +# define MSGPACK_COMP_HIGHC_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#ifdef MSGPACK_COMP_HIGHC_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_HIGHC_EMULATED MSGPACK_COMP_HIGHC_DETECTION +# else +# undef MSGPACK_COMP_HIGHC +# define MSGPACK_COMP_HIGHC MSGPACK_COMP_HIGHC_DETECTION +# endif +# define MSGPACK_COMP_HIGHC_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_HIGHC_NAME "MetaWare High C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_HIGHC,MSGPACK_COMP_HIGHC_NAME) + +#ifdef MSGPACK_COMP_HIGHC_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_HIGHC_EMULATED,MSGPACK_COMP_HIGHC_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/metrowerks.h b/include/msgpack/predef/compiler/metrowerks.h new file mode 100644 index 0000000..7162cc7 --- /dev/null +++ b/include/msgpack/predef/compiler/metrowerks.h @@ -0,0 +1,78 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_METROWERKS_H +#define MSGPACK_PREDEF_COMPILER_METROWERKS_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_MWERKS`] + +[@http://en.wikipedia.org/wiki/CodeWarrior Metrowerks CodeWarrior] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__MWERKS__`] [__predef_detection__]] + [[`__CWCC__`] [__predef_detection__]] + + [[`__CWCC__`] [V.R.P]] + [[`__MWERKS__`] [V.R.P >= 4.2.0]] + [[`__MWERKS__`] [9.R.0]] + [[`__MWERKS__`] [8.R.0]] + ] + */ + +#define MSGPACK_COMP_MWERKS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__MWERKS__) || defined(__CWCC__) +# if !defined(MSGPACK_COMP_MWERKS_DETECTION) && defined(__CWCC__) +# define MSGPACK_COMP_MWERKS_DETECTION MSGPACK_PREDEF_MAKE_0X_VRPP(__CWCC__) +# endif +# if !defined(MSGPACK_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x4200) +# define MSGPACK_COMP_MWERKS_DETECTION MSGPACK_PREDEF_MAKE_0X_VRPP(__MWERKS__) +# endif +# if !defined(MSGPACK_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3204) // note the "skip": 04->9.3 +# define MSGPACK_COMP_MWERKS_DETECTION MSGPACK_VERSION_NUMBER(9,(__MWERKS__)%100-1,0) +# endif +# if !defined(MSGPACK_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3200) +# define MSGPACK_COMP_MWERKS_DETECTION MSGPACK_VERSION_NUMBER(9,(__MWERKS__)%100,0) +# endif +# if !defined(MSGPACK_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3000) +# define MSGPACK_COMP_MWERKS_DETECTION MSGPACK_VERSION_NUMBER(8,(__MWERKS__)%100,0) +# endif +# if !defined(MSGPACK_COMP_MWERKS_DETECTION) +# define MSGPACK_COMP_MWERKS_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_MWERKS_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_MWERKS_EMULATED MSGPACK_COMP_MWERKS_DETECTION +# else +# undef MSGPACK_COMP_MWERKS +# define MSGPACK_COMP_MWERKS MSGPACK_COMP_MWERKS_DETECTION +# endif +# define MSGPACK_COMP_MWERKS_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_MWERKS_NAME "Metrowerks CodeWarrior" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MWERKS,MSGPACK_COMP_MWERKS_NAME) + +#ifdef MSGPACK_COMP_MWERKS_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MWERKS_EMULATED,MSGPACK_COMP_MWERKS_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/microtec.h b/include/msgpack/predef/compiler/microtec.h new file mode 100644 index 0000000..f6942f2 --- /dev/null +++ b/include/msgpack/predef/compiler/microtec.h @@ -0,0 +1,54 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_MICROTEC_H +#define MSGPACK_PREDEF_COMPILER_MICROTEC_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_MRI`] + +[@http://www.mentor.com/microtec/ Microtec C/C++] compiler. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`_MRI`] [__predef_detection__]] + ] + */ + +#define MSGPACK_COMP_MRI MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(_MRI) +# define MSGPACK_COMP_MRI_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#ifdef MSGPACK_COMP_MRI_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_MRI_EMULATED MSGPACK_COMP_MRI_DETECTION +# else +# undef MSGPACK_COMP_MRI +# define MSGPACK_COMP_MRI MSGPACK_COMP_MRI_DETECTION +# endif +# define MSGPACK_COMP_MRI_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_MRI_NAME "Microtec C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MRI,MSGPACK_COMP_MRI_NAME) + +#ifdef MSGPACK_COMP_MRI_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MRI_EMULATED,MSGPACK_COMP_MRI_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/mpw.h b/include/msgpack/predef/compiler/mpw.h new file mode 100644 index 0000000..cef0ace --- /dev/null +++ b/include/msgpack/predef/compiler/mpw.h @@ -0,0 +1,64 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_MPW_H +#define MSGPACK_PREDEF_COMPILER_MPW_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_MPW`] + +[@http://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop MPW C++] compiler. +Version number available as major, and minor. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__MRC__`] [__predef_detection__]] + [[`MPW_C`] [__predef_detection__]] + [[`MPW_CPLUS`] [__predef_detection__]] + + [[`__MRC__`] [V.R.0]] + ] + */ + +#define MSGPACK_COMP_MPW MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__MRC__) || defined(MPW_C) || defined(MPW_CPLUS) +# if !defined(MSGPACK_COMP_MPW_DETECTION) && defined(__MRC__) +# define MSGPACK_COMP_MPW_DETECTION MSGPACK_PREDEF_MAKE_0X_VVRR(__MRC__) +# endif +# if !defined(MSGPACK_COMP_MPW_DETECTION) +# define MSGPACK_COMP_MPW_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_MPW_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_MPW_EMULATED MSGPACK_COMP_MPW_DETECTION +# else +# undef MSGPACK_COMP_MPW +# define MSGPACK_COMP_MPW MSGPACK_COMP_MPW_DETECTION +# endif +# define MSGPACK_COMP_MPW_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_MPW_NAME "MPW C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MPW,MSGPACK_COMP_MPW_NAME) + +#ifdef MSGPACK_COMP_MPW_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MPW_EMULATED,MSGPACK_COMP_MPW_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/palm.h b/include/msgpack/predef/compiler/palm.h new file mode 100644 index 0000000..d3a960e --- /dev/null +++ b/include/msgpack/predef/compiler/palm.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_PALM_H +#define MSGPACK_PREDEF_COMPILER_PALM_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_PALM`] + +Palm C/C++ compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`_PACC_VER`] [__predef_detection__]] + + [[`_PACC_VER`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_PALM MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(_PACC_VER) +# define MSGPACK_COMP_PALM_DETECTION MSGPACK_PREDEF_MAKE_0X_VRRPP000(_PACC_VER) +#endif + +#ifdef MSGPACK_COMP_PALM_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_PALM_EMULATED MSGPACK_COMP_PALM_DETECTION +# else +# undef MSGPACK_COMP_PALM +# define MSGPACK_COMP_PALM MSGPACK_COMP_PALM_DETECTION +# endif +# define MSGPACK_COMP_PALM_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_PALM_NAME "Palm C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_PALM,MSGPACK_COMP_PALM_NAME) + +#ifdef MSGPACK_COMP_PALM_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_PALM_EMULATED,MSGPACK_COMP_PALM_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/pgi.h b/include/msgpack/predef/compiler/pgi.h new file mode 100644 index 0000000..8bf5086 --- /dev/null +++ b/include/msgpack/predef/compiler/pgi.h @@ -0,0 +1,61 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_PGI_H +#define MSGPACK_PREDEF_COMPILER_PGI_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_PGI`] + +[@http://en.wikipedia.org/wiki/The_Portland_Group Portland Group C/C++] compiler. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__PGI`] [__predef_detection__]] + + [[`__PGIC__`, `__PGIC_MINOR__`, `__PGIC_PATCHLEVEL__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_PGI MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__PGI) +# if !defined(MSGPACK_COMP_PGI_DETECTION) && (defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)) +# define MSGPACK_COMP_PGI_DETECTION MSGPACK_VERSION_NUMBER(__PGIC__,__PGIC_MINOR__,__PGIC_PATCHLEVEL__) +# endif +# if !defined(MSGPACK_COMP_PGI_DETECTION) +# define MSGPACK_COMP_PGI_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_PGI_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_PGI_EMULATED MSGPACK_COMP_PGI_DETECTION +# else +# undef MSGPACK_COMP_PGI +# define MSGPACK_COMP_PGI MSGPACK_COMP_PGI_DETECTION +# endif +# define MSGPACK_COMP_PGI_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_PGI_NAME "Portland Group C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_PGI,MSGPACK_COMP_PGI_NAME) + +#ifdef MSGPACK_COMP_PGI_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_PGI_EMULATED,MSGPACK_COMP_PGI_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/sgi_mipspro.h b/include/msgpack/predef/compiler/sgi_mipspro.h new file mode 100644 index 0000000..4e1b00b --- /dev/null +++ b/include/msgpack/predef/compiler/sgi_mipspro.h @@ -0,0 +1,67 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_SGI_MIPSPRO_H +#define MSGPACK_PREDEF_COMPILER_SGI_MIPSPRO_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_SGI`] + +[@http://en.wikipedia.org/wiki/MIPSpro SGI MIPSpro] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__sgi`] [__predef_detection__]] + [[`sgi`] [__predef_detection__]] + + [[`_SGI_COMPILER_VERSION`] [V.R.P]] + [[`_COMPILER_VERSION`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_SGI MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__sgi) || defined(sgi) +# if !defined(MSGPACK_COMP_SGI_DETECTION) && defined(_SGI_COMPILER_VERSION) +# define MSGPACK_COMP_SGI_DETECTION MSGPACK_PREDEF_MAKE_10_VRP(_SGI_COMPILER_VERSION) +# endif +# if !defined(MSGPACK_COMP_SGI_DETECTION) && defined(_COMPILER_VERSION) +# define MSGPACK_COMP_SGI_DETECTION MSGPACK_PREDEF_MAKE_10_VRP(_COMPILER_VERSION) +# endif +# if !defined(MSGPACK_COMP_SGI_DETECTION) +# define MSGPACK_COMP_SGI_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_SGI_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_SGI_EMULATED MSGPACK_COMP_SGI_DETECTION +# else +# undef MSGPACK_COMP_SGI +# define MSGPACK_COMP_SGI MSGPACK_COMP_SGI_DETECTION +# endif +# define MSGPACK_COMP_SGI_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_SGI_NAME "SGI MIPSpro" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_SGI,MSGPACK_COMP_SGI_NAME) + +#ifdef MSGPACK_COMP_SGI_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_SGI_EMULATED,MSGPACK_COMP_SGI_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/sunpro.h b/include/msgpack/predef/compiler/sunpro.h new file mode 100644 index 0000000..26e9513 --- /dev/null +++ b/include/msgpack/predef/compiler/sunpro.h @@ -0,0 +1,67 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_SUNPRO_H +#define MSGPACK_PREDEF_COMPILER_SUNPRO_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_SUNPRO`] + +[@http://en.wikipedia.org/wiki/Sun_Studio_%28software%29 Sun Studio] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__SUNPRO_CC`] [__predef_detection__]] + [[`__SUNPRO_C`] [__predef_detection__]] + + [[`__SUNPRO_CC`] [V.R.P]] + [[`__SUNPRO_C`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_SUNPRO MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__SUNPRO_CC) || defined(__SUNPRO_C) +# if !defined(MSGPACK_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_CC) +# define MSGPACK_COMP_SUNPRO_DETECTION MSGPACK_PREDEF_MAKE_0X_VRP(__SUNPRO_CC) +# endif +# if !defined(MSGPACK_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_C) +# define MSGPACK_COMP_SUNPRO_DETECTION MSGPACK_PREDEF_MAKE_0X_VRP(__SUNPRO_C) +# endif +# if !defined(MSGPACK_COMP_SUNPRO_DETECTION) +# define MSGPACK_COMP_SUNPRO_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_COMP_SUNPRO_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_SUNPRO_EMULATED MSGPACK_COMP_SUNPRO_DETECTION +# else +# undef MSGPACK_COMP_SUNPRO +# define MSGPACK_COMP_SUNPRO MSGPACK_COMP_SUNPRO_DETECTION +# endif +# define MSGPACK_COMP_SUNPRO_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_SUNPRO_NAME "Sun Studio" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_SUNPRO,MSGPACK_COMP_SUNPRO_NAME) + +#ifdef MSGPACK_COMP_SUNPRO_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_SUNPRO_EMULATED,MSGPACK_COMP_SUNPRO_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/tendra.h b/include/msgpack/predef/compiler/tendra.h new file mode 100644 index 0000000..7eaa3c9 --- /dev/null +++ b/include/msgpack/predef/compiler/tendra.h @@ -0,0 +1,54 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_TENDRA_H +#define MSGPACK_PREDEF_COMPILER_TENDRA_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_TENDRA`] + +[@http://en.wikipedia.org/wiki/TenDRA_Compiler TenDRA C/C++] compiler. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__TenDRA__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_COMP_TENDRA MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__TenDRA__) +# define MSGPACK_COMP_TENDRA_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#ifdef MSGPACK_COMP_TENDRA_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_TENDRA_EMULATED MSGPACK_COMP_TENDRA_DETECTION +# else +# undef MSGPACK_COMP_TENDRA +# define MSGPACK_COMP_TENDRA MSGPACK_COMP_TENDRA_DETECTION +# endif +# define MSGPACK_COMP_TENDRA_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_TENDRA_NAME "TenDRA C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_TENDRA,MSGPACK_COMP_TENDRA_NAME) + +#ifdef MSGPACK_COMP_TENDRA_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_TENDRA_EMULATED,MSGPACK_COMP_TENDRA_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/visualc.h b/include/msgpack/predef/compiler/visualc.h new file mode 100644 index 0000000..943dd00 --- /dev/null +++ b/include/msgpack/predef/compiler/visualc.h @@ -0,0 +1,92 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_VISUALC_H +#define MSGPACK_PREDEF_COMPILER_VISUALC_H + +/* Other compilers that emulate this one need to be detected first. */ + +#include + +#include +#include + +/*` +[heading `MSGPACK_COMP_MSVC`] + +[@http://en.wikipedia.org/wiki/Visual_studio Microsoft Visual C/C++] compiler. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`_MSC_VER`] [__predef_detection__]] + + [[`_MSC_FULL_VER`] [V.R.P]] + [[`_MSC_VER`] [V.R.0]] + ] + */ + +#define MSGPACK_COMP_MSVC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(_MSC_VER) +# if !defined (_MSC_FULL_VER) +# define MSGPACK_COMP_MSVC_BUILD 0 +# else + /* how many digits does the build number have? */ +# if _MSC_FULL_VER / 10000 == _MSC_VER + /* four digits */ +# define MSGPACK_COMP_MSVC_BUILD (_MSC_FULL_VER % 10000) +# elif _MSC_FULL_VER / 100000 == _MSC_VER + /* five digits */ +# define MSGPACK_COMP_MSVC_BUILD (_MSC_FULL_VER % 100000) +# else +# error "Cannot determine build number from _MSC_FULL_VER" +# endif +# endif + /* + VS2014 was skipped in the release sequence for MS. Which + means that the compiler and VS product versions are no longer + in sync. Hence we need to use different formulas for + mapping from MSC version to VS product version. + */ +# if (_MSC_VER >= 1900) +# define MSGPACK_COMP_MSVC_DETECTION MSGPACK_VERSION_NUMBER(\ + _MSC_VER/100-5,\ + _MSC_VER%100,\ + MSGPACK_COMP_MSVC_BUILD) +# else +# define MSGPACK_COMP_MSVC_DETECTION MSGPACK_VERSION_NUMBER(\ + _MSC_VER/100-6,\ + _MSC_VER%100,\ + MSGPACK_COMP_MSVC_BUILD) +# endif +#endif + +#ifdef MSGPACK_COMP_MSVC_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_MSVC_EMULATED MSGPACK_COMP_MSVC_DETECTION +# else +# undef MSGPACK_COMP_MSVC +# define MSGPACK_COMP_MSVC MSGPACK_COMP_MSVC_DETECTION +# endif +# define MSGPACK_COMP_MSVC_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_MSVC_NAME "Microsoft Visual C/C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MSVC,MSGPACK_COMP_MSVC_NAME) + +#ifdef MSGPACK_COMP_MSVC_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MSVC_EMULATED,MSGPACK_COMP_MSVC_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/compiler/watcom.h b/include/msgpack/predef/compiler/watcom.h new file mode 100644 index 0000000..705d041 --- /dev/null +++ b/include/msgpack/predef/compiler/watcom.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_WATCOM_H +#define MSGPACK_PREDEF_COMPILER_WATCOM_H + +#include +#include + +/*` +[heading `MSGPACK_COMP_WATCOM`] + +[@http://en.wikipedia.org/wiki/Watcom Watcom C++] compiler. +Version number available as major, and minor. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__WATCOMC__`] [__predef_detection__]] + + [[`__WATCOMC__`] [V.R.P]] + ] + */ + +#define MSGPACK_COMP_WATCOM MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__WATCOMC__) +# define MSGPACK_COMP_WATCOM_DETECTION MSGPACK_PREDEF_MAKE_10_VVRR(__WATCOMC__) +#endif + +#ifdef MSGPACK_COMP_WATCOM_DETECTION +# if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) +# define MSGPACK_COMP_WATCOM_EMULATED MSGPACK_COMP_WATCOM_DETECTION +# else +# undef MSGPACK_COMP_WATCOM +# define MSGPACK_COMP_WATCOM MSGPACK_COMP_WATCOM_DETECTION +# endif +# define MSGPACK_COMP_WATCOM_AVAILABLE +# include +#endif + +#define MSGPACK_COMP_WATCOM_NAME "Watcom C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_WATCOM,MSGPACK_COMP_WATCOM_NAME) + +#ifdef MSGPACK_COMP_WATCOM_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_WATCOM_EMULATED,MSGPACK_COMP_WATCOM_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/detail/_cassert.h b/include/msgpack/predef/detail/_cassert.h new file mode 100644 index 0000000..b1cb6bc --- /dev/null +++ b/include/msgpack/predef/detail/_cassert.h @@ -0,0 +1,17 @@ +/* +Copyright Rene Rivera 2011-2012 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_DETAIL__CASSERT_H +#define MSGPACK_PREDEF_DETAIL__CASSERT_H + +#if defined(__cpluplus) +#include +#else +#include +#endif + +#endif diff --git a/include/msgpack/predef/detail/_exception.h b/include/msgpack/predef/detail/_exception.h new file mode 100644 index 0000000..963f37b --- /dev/null +++ b/include/msgpack/predef/detail/_exception.h @@ -0,0 +1,15 @@ +/* +Copyright Rene Rivera 2011-2012 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_DETAIL__EXCEPTION_H +#define MSGPACK_PREDEF_DETAIL__EXCEPTION_H + +#if defined(__cpluplus) +#include +#endif + +#endif diff --git a/include/msgpack/predef/detail/comp_detected.h b/include/msgpack/predef/detail/comp_detected.h new file mode 100644 index 0000000..3996fd3 --- /dev/null +++ b/include/msgpack/predef/detail/comp_detected.h @@ -0,0 +1,10 @@ +/* +Copyright Rene Rivera 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_DETAIL_COMP_DETECTED +#define MSGPACK_PREDEF_DETAIL_COMP_DETECTED 1 +#endif diff --git a/include/msgpack/predef/detail/endian_compat.h b/include/msgpack/predef/detail/endian_compat.h new file mode 100644 index 0000000..1b4a665 --- /dev/null +++ b/include/msgpack/predef/detail/endian_compat.h @@ -0,0 +1,26 @@ +/* +Copyright Rene Rivera 2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_DETAIL_ENDIAN_COMPAT_H +#define MSGPACK_PREDEF_DETAIL_ENDIAN_COMPAT_H + +#include + +#if MSGPACK_ENDIAN_BIG_BYTE +# define MSGPACK_BIG_ENDIAN +# define MSGPACK_BYTE_ORDER 4321 +#endif +#if MSGPACK_ENDIAN_LITTLE_BYTE +# define MSGPACK_LITTLE_ENDIAN +# define MSGPACK_BYTE_ORDER 1234 +#endif +#if MSGPACK_ENDIAN_LITTLE_WORD +# define MSGPACK_PDP_ENDIAN +# define MSGPACK_BYTE_ORDER 2134 +#endif + +#endif diff --git a/include/msgpack/predef/detail/os_detected.h b/include/msgpack/predef/detail/os_detected.h new file mode 100644 index 0000000..f9f23b7 --- /dev/null +++ b/include/msgpack/predef/detail/os_detected.h @@ -0,0 +1,10 @@ +/* +Copyright Rene Rivera 2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_DETAIL_OS_DETECTED +#define MSGPACK_PREDEF_DETAIL_OS_DETECTED 1 +#endif diff --git a/include/msgpack/predef/detail/platform_detected.h b/include/msgpack/predef/detail/platform_detected.h new file mode 100644 index 0000000..782b3a2 --- /dev/null +++ b/include/msgpack/predef/detail/platform_detected.h @@ -0,0 +1,10 @@ +/* +Copyright Rene Rivera 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_DETAIL_PLAT_DETECTED +#define MSGPACK_PREDEF_DETAIL_PLAT_DETECTED 1 +#endif diff --git a/include/msgpack/predef/detail/test.h b/include/msgpack/predef/detail/test.h new file mode 100644 index 0000000..1414060 --- /dev/null +++ b/include/msgpack/predef/detail/test.h @@ -0,0 +1,17 @@ +/* +Copyright Rene Rivera 2011-2012 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_DETAIL_TEST_H +#define MSGPACK_PREDEF_DETAIL_TEST_H + +#if !defined(MSGPACK_PREDEF_INTERNAL_GENERATE_TESTS) + +#define MSGPACK_PREDEF_DECLARE_TEST(x,s) + +#endif + +#endif diff --git a/include/msgpack/predef/language.h b/include/msgpack/predef/language.h new file mode 100644 index 0000000..8520187 --- /dev/null +++ b/include/msgpack/predef/language.h @@ -0,0 +1,15 @@ +/* +Copyright Rene Rivera 2011-2012 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LANGUAGE_H +#define MSGPACK_PREDEF_LANGUAGE_H + +#include +#include +#include + +#endif diff --git a/include/msgpack/predef/language/objc.h b/include/msgpack/predef/language/objc.h new file mode 100644 index 0000000..0b0cb41 --- /dev/null +++ b/include/msgpack/predef/language/objc.h @@ -0,0 +1,43 @@ +/* +Copyright Rene Rivera 2011-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LANGUAGE_OBJC_H +#define MSGPACK_PREDEF_LANGUAGE_OBJC_H + +#include +#include + +/*` +[heading `MSGPACK_LANG_OBJC`] + +[@http://en.wikipedia.org/wiki/Objective-C Objective-C] language. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__OBJC__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_LANG_OBJC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__OBJC__) +# undef MSGPACK_LANG_OBJC +# define MSGPACK_LANG_OBJC MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_LANG_OBJC +# define MSGPACK_LANG_OBJC_AVAILABLE +#endif + +#define MSGPACK_LANG_OBJC_NAME "Objective-C" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LANG_OBJC,MSGPACK_LANG_OBJC_NAME) + + +#endif diff --git a/include/msgpack/predef/language/stdc.h b/include/msgpack/predef/language/stdc.h new file mode 100644 index 0000000..a913c32 --- /dev/null +++ b/include/msgpack/predef/language/stdc.h @@ -0,0 +1,54 @@ +/* +Copyright Rene Rivera 2011-2012 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LANGUAGE_STDC_H +#define MSGPACK_PREDEF_LANGUAGE_STDC_H + +#include +#include + +/*` +[heading `MSGPACK_LANG_STDC`] + +[@http://en.wikipedia.org/wiki/C_(programming_language) Standard C] language. +If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__STDC__`] [__predef_detection__]] + + [[`__STDC_VERSION__`] [V.R.P]] + ] + */ + +#define MSGPACK_LANG_STDC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__STDC__) +# undef MSGPACK_LANG_STDC +# if defined(__STDC_VERSION__) +# if (__STDC_VERSION__ > 100) +# define MSGPACK_LANG_STDC MSGPACK_PREDEF_MAKE_YYYYMM(__STDC_VERSION__) +# else +# define MSGPACK_LANG_STDC MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# else +# define MSGPACK_LANG_STDC MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_LANG_STDC +# define MSGPACK_LANG_STDC_AVAILABLE +#endif + +#define MSGPACK_LANG_STDC_NAME "Standard C" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LANG_STDC,MSGPACK_LANG_STDC_NAME) + + +#endif diff --git a/include/msgpack/predef/language/stdcpp.h b/include/msgpack/predef/language/stdcpp.h new file mode 100644 index 0000000..5915489 --- /dev/null +++ b/include/msgpack/predef/language/stdcpp.h @@ -0,0 +1,124 @@ +/* +Copyright Rene Rivera 2011-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LANGUAGE_STDCPP_H +#define MSGPACK_PREDEF_LANGUAGE_STDCPP_H + +#include +#include + +/*` +[heading `MSGPACK_LANG_STDCPP`] + +[@http://en.wikipedia.org/wiki/C%2B%2B Standard C++] language. +If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date. +Because of the way the C++ standardization process works the +defined version year will not be the commonly known year of the standard. +Specifically the defined versions are: + +[table Detected Version Number vs. C++ Standard Year + [[Detected Version Number] [Standard Year] [C++ Standard]] + [[27.11.1] [1998] [ISO/IEC 14882:1998]] + [[41.12.1] [2011] [ISO/IEC 14882:2011]] +] + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__cplusplus`] [__predef_detection__]] + + [[`__cplusplus`] [YYYY.MM.1]] + ] + */ + +#define MSGPACK_LANG_STDCPP MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__cplusplus) +# undef MSGPACK_LANG_STDCPP +# if (__cplusplus > 100) +# define MSGPACK_LANG_STDCPP MSGPACK_PREDEF_MAKE_YYYYMM(__cplusplus) +# else +# define MSGPACK_LANG_STDCPP MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_LANG_STDCPP +# define MSGPACK_LANG_STDCPP_AVAILABLE +#endif + +#define MSGPACK_LANG_STDCPP_NAME "Standard C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LANG_STDCPP,MSGPACK_LANG_STDCPP_NAME) + + +/*` +[heading `MSGPACK_LANG_STDCPPCLI`] + +[@http://en.wikipedia.org/wiki/C%2B%2B/CLI Standard C++/CLI] language. +If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__cplusplus_cli`] [__predef_detection__]] + + [[`__cplusplus_cli`] [YYYY.MM.1]] + ] + */ + +#define MSGPACK_LANG_STDCPPCLI MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__cplusplus_cli) +# undef MSGPACK_LANG_STDCPPCLI +# if (__cplusplus_cli > 100) +# define MSGPACK_LANG_STDCPPCLI MSGPACK_PREDEF_MAKE_YYYYMM(__cplusplus_cli) +# else +# define MSGPACK_LANG_STDCPPCLI MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_LANG_STDCPPCLI +# define MSGPACK_LANG_STDCPPCLI_AVAILABLE +#endif + +#define MSGPACK_LANG_STDCPPCLI_NAME "Standard C++/CLI" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LANG_STDCPPCLI,MSGPACK_LANG_STDCPPCLI_NAME) + + +/*` +[heading `MSGPACK_LANG_STDECPP`] + +[@http://en.wikipedia.org/wiki/Embedded_C%2B%2B Standard Embedded C++] language. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__embedded_cplusplus`] [__predef_detection__]] + ] + */ + +#define MSGPACK_LANG_STDECPP MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__embedded_cplusplus) +# undef MSGPACK_LANG_STDECPP +# define MSGPACK_LANG_STDECPP MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_LANG_STDECPP +# define MSGPACK_LANG_STDECPP_AVAILABLE +#endif + +#define MSGPACK_LANG_STDECPP_NAME "Standard Embedded C++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LANG_STDECPP,MSGPACK_LANG_STDECPP_NAME) + + +#endif diff --git a/include/msgpack/predef/library.h b/include/msgpack/predef/library.h new file mode 100644 index 0000000..20ecc56 --- /dev/null +++ b/include/msgpack/predef/library.h @@ -0,0 +1,14 @@ +/* +Copyright Rene Rivera 2008-2012 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_H +#define MSGPACK_PREDEF_LIBRARY_H + +#include +#include + +#endif diff --git a/include/msgpack/predef/library/c.h b/include/msgpack/predef/library/c.h new file mode 100644 index 0000000..4794a8d --- /dev/null +++ b/include/msgpack/predef/library/c.h @@ -0,0 +1,18 @@ +/* +Copyright Rene Rivera 2008-2012 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_C_H +#define MSGPACK_PREDEF_LIBRARY_C_H + +#include + +#include +#include +#include +#include + +#endif diff --git a/include/msgpack/predef/library/c/_prefix.h b/include/msgpack/predef/library/c/_prefix.h new file mode 100644 index 0000000..d16c373 --- /dev/null +++ b/include/msgpack/predef/library/c/_prefix.h @@ -0,0 +1,13 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_C__PREFIX_H +#define MSGPACK_PREDEF_LIBRARY_C__PREFIX_H + +#include + +#endif diff --git a/include/msgpack/predef/library/c/gnu.h b/include/msgpack/predef/library/c/gnu.h new file mode 100644 index 0000000..9e8f5d6 --- /dev/null +++ b/include/msgpack/predef/library/c/gnu.h @@ -0,0 +1,62 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_C_GNU_H +#define MSGPACK_PREDEF_LIBRARY_C_GNU_H + +#include +#include + +#include + +#if defined(__STDC__) +#include +#elif defined(__cplusplus) +#include +#endif + +/*` +[heading `MSGPACK_LIB_C_GNU`] + +[@http://en.wikipedia.org/wiki/Glibc GNU glibc] Standard C library. +Version number available as major, and minor. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__GLIBC__`] [__predef_detection__]] + [[`__GNU_LIBRARY__`] [__predef_detection__]] + + [[`__GLIBC__`, `__GLIBC_MINOR__`] [V.R.0]] + [[`__GNU_LIBRARY__`, `__GNU_LIBRARY_MINOR__`] [V.R.0]] + ] + */ + +#define MSGPACK_LIB_C_GNU MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__GLIBC__) || defined(__GNU_LIBRARY__) +# undef MSGPACK_LIB_C_GNU +# if defined(__GLIBC__) +# define MSGPACK_LIB_C_GNU \ + MSGPACK_VERSION_NUMBER(__GLIBC__,__GLIBC_MINOR__,0) +# else +# define MSGPACK_LIB_C_GNU \ + MSGPACK_VERSION_NUMBER(__GNU_LIBRARY__,__GNU_LIBRARY_MINOR__,0) +# endif +#endif + +#if MSGPACK_LIB_C_GNU +# define MSGPACK_LIB_C_GNU_AVAILABLE +#endif + +#define MSGPACK_LIB_C_GNU_NAME "GNU" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_C_GNU,MSGPACK_LIB_C_GNU_NAME) + + +#endif diff --git a/include/msgpack/predef/library/c/uc.h b/include/msgpack/predef/library/c/uc.h new file mode 100644 index 0000000..7dbd838 --- /dev/null +++ b/include/msgpack/predef/library/c/uc.h @@ -0,0 +1,48 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_C_UC_H +#define MSGPACK_PREDEF_LIBRARY_C_UC_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_C_UC`] + +[@http://en.wikipedia.org/wiki/Uclibc uClibc] Standard C library. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__UCLIBC__`] [__predef_detection__]] + + [[`__UCLIBC_MAJOR__`, `__UCLIBC_MINOR__`, `__UCLIBC_SUBLEVEL__`] [V.R.P]] + ] + */ + +#define MSGPACK_LIB_C_UC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__UCLIBC__) +# undef MSGPACK_LIB_C_UC +# define MSGPACK_LIB_C_UC MSGPACK_VERSION_NUMBER(\ + __UCLIBC_MAJOR__,__UCLIBC_MINOR__,__UCLIBC_SUBLEVEL__) +#endif + +#if MSGPACK_LIB_C_UC +# define MSGPACK_LIB_C_UC_AVAILABLE +#endif + +#define MSGPACK_LIB_C_UC_NAME "uClibc" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_C_UC,MSGPACK_LIB_C_UC_NAME) + + +#endif diff --git a/include/msgpack/predef/library/c/vms.h b/include/msgpack/predef/library/c/vms.h new file mode 100644 index 0000000..c2ef4d3 --- /dev/null +++ b/include/msgpack/predef/library/c/vms.h @@ -0,0 +1,48 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_C_VMS_H +#define MSGPACK_PREDEF_LIBRARY_C_VMS_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_C_VMS`] + +VMS libc Standard C library. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__CRTL_VER`] [__predef_detection__]] + + [[`__CRTL_VER`] [V.R.P]] + ] + */ + +#define MSGPACK_LIB_C_VMS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__CRTL_VER) +# undef MSGPACK_LIB_C_VMS +# define MSGPACK_LIB_C_VMS MSGPACK_PREDEF_MAKE_10_VVRR0PP00(__CRTL_VER) +#endif + +#if MSGPACK_LIB_C_VMS +# define MSGPACK_LIB_C_VMS_AVAILABLE +#endif + +#define MSGPACK_LIB_C_VMS_NAME "VMS" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_C_VMS,MSGPACK_LIB_C_VMS_NAME) + + +#endif diff --git a/include/msgpack/predef/library/c/zos.h b/include/msgpack/predef/library/c/zos.h new file mode 100644 index 0000000..67cb504 --- /dev/null +++ b/include/msgpack/predef/library/c/zos.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_C_ZOS_H +#define MSGPACK_PREDEF_LIBRARY_C_ZOS_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_C_ZOS`] + +z/OS libc Standard C library. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__LIBREL__`] [__predef_detection__]] + + [[`__LIBREL__`] [V.R.P]] + [[`__TARGET_LIB__`] [V.R.P]] + ] + */ + +#define MSGPACK_LIB_C_ZOS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__LIBREL__) +# undef MSGPACK_LIB_C_ZOS +# if !defined(MSGPACK_LIB_C_ZOS) && defined(__LIBREL__) +# define MSGPACK_LIB_C_ZOS MSGPACK_PREDEF_MAKE_0X_VRRPPPP(__LIBREL__) +# endif +# if !defined(MSGPACK_LIB_C_ZOS) && defined(__TARGET_LIB__) +# define MSGPACK_LIB_C_ZOS MSGPACK_PREDEF_MAKE_0X_VRRPPPP(__TARGET_LIB__) +# endif +# if !defined(MSGPACK_LIB_C_ZOS) +# define MSGPACK_LIB_C_ZOS MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_LIB_C_ZOS +# define MSGPACK_LIB_C_ZOS_AVAILABLE +#endif + +#define MSGPACK_LIB_C_ZOS_NAME "z/OS" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_C_ZOS,MSGPACK_LIB_C_ZOS_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std.h b/include/msgpack/predef/library/std.h new file mode 100644 index 0000000..7e5b208 --- /dev/null +++ b/include/msgpack/predef/library/std.h @@ -0,0 +1,23 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ +#ifndef MSGPACK_PREDEF_LIBRARY_STD_H +#define MSGPACK_PREDEF_LIBRARY_STD_H + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/include/msgpack/predef/library/std/_prefix.h b/include/msgpack/predef/library/std/_prefix.h new file mode 100644 index 0000000..6f9f566 --- /dev/null +++ b/include/msgpack/predef/library/std/_prefix.h @@ -0,0 +1,23 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ +#ifndef MSGPACK_PREDEF_LIBRARY_STD__PREFIX_H +#define MSGPACK_PREDEF_LIBRARY_STD__PREFIX_H + +/* +We need to include an STD header to gives us the context +of which library we are using. The "smallest" code-wise header +seems to be . Boost uses but as far +as I can tell (RR) it's not a stand-alone header in most +implementations. Using also has the benefit of +being available in EC++, so we get a chance to make this work +for embedded users. And since it's not a header impacted by TR1 +there's no magic needed for inclusion in the face of the +Boost.TR1 library. +*/ +#include + +#endif diff --git a/include/msgpack/predef/library/std/cxx.h b/include/msgpack/predef/library/std/cxx.h new file mode 100644 index 0000000..16d2a70 --- /dev/null +++ b/include/msgpack/predef/library/std/cxx.h @@ -0,0 +1,47 @@ +/* +Copyright Rene Rivera 2011-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_CXX_H +#define MSGPACK_PREDEF_LIBRARY_STD_CXX_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_CXX`] + +[@http://libcxx.llvm.org/ libc++] C++ Standard Library. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`_LIBCPP_VERSION`] [__predef_detection__]] + + [[`_LIBCPP_VERSION`] [V.0.P]] + ] + */ + +#define MSGPACK_LIB_STD_CXX MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(_LIBCPP_VERSION) +# undef MSGPACK_LIB_STD_CXX +# define MSGPACK_LIB_STD_CXX MSGPACK_PREDEF_MAKE_10_VPPP(_LIBCPP_VERSION) +#endif + +#if MSGPACK_LIB_STD_CXX +# define MSGPACK_LIB_STD_CXX_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_CXX_NAME "libc++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_CXX,MSGPACK_LIB_STD_CXX_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std/dinkumware.h b/include/msgpack/predef/library/std/dinkumware.h new file mode 100644 index 0000000..2bda26f --- /dev/null +++ b/include/msgpack/predef/library/std/dinkumware.h @@ -0,0 +1,53 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_DINKUMWARE_H +#define MSGPACK_PREDEF_LIBRARY_STD_DINKUMWARE_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_DINKUMWARE`] + +[@http://en.wikipedia.org/wiki/Dinkumware Dinkumware] Standard C++ Library. +If available version number as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`_YVALS`, `__IBMCPP__`] [__predef_detection__]] + [[`_CPPLIB_VER`] [__predef_detection__]] + + [[`_CPPLIB_VER`] [V.R.0]] + ] + */ + +#define MSGPACK_LIB_STD_DINKUMWARE MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) +# undef MSGPACK_LIB_STD_DINKUMWARE +# if defined(_CPPLIB_VER) +# define MSGPACK_LIB_STD_DINKUMWARE MSGPACK_PREDEF_MAKE_10_VVRR(_CPPLIB_VER) +# else +# define MSGPACK_LIB_STD_DINKUMWARE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_LIB_STD_DINKUMWARE +# define MSGPACK_LIB_STD_DINKUMWARE_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_DINKUMWARE_NAME "Dinkumware" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_DINKUMWARE,MSGPACK_LIB_STD_DINKUMWARE_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std/libcomo.h b/include/msgpack/predef/library/std/libcomo.h new file mode 100644 index 0000000..590f865 --- /dev/null +++ b/include/msgpack/predef/library/std/libcomo.h @@ -0,0 +1,48 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_LIBCOMO_H +#define MSGPACK_PREDEF_LIBRARY_STD_LIBCOMO_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_COMO`] + +[@http://www.comeaucomputing.com/libcomo/ Comeau Computing] Standard C++ Library. +Version number available as major. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__LIBCOMO__`] [__predef_detection__]] + + [[`__LIBCOMO_VERSION__`] [V.0.0]] + ] + */ + +#define MSGPACK_LIB_STD_COMO MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__LIBCOMO__) +# undef MSGPACK_LIB_STD_COMO +# define MSGPACK_LIB_STD_COMO MSGPACK_VERSION_NUMBER(__LIBCOMO_VERSION__,0,0) +#endif + +#if MSGPACK_LIB_STD_COMO +# define MSGPACK_LIB_STD_COMO_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_COMO_NAME "Comeau Computing" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_COMO,MSGPACK_LIB_STD_COMO_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std/modena.h b/include/msgpack/predef/library/std/modena.h new file mode 100644 index 0000000..ff0582a --- /dev/null +++ b/include/msgpack/predef/library/std/modena.h @@ -0,0 +1,46 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_MODENA_H +#define MSGPACK_PREDEF_LIBRARY_STD_MODENA_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_MSIPL`] + +[@http://modena.us/ Modena Software Lib++] Standard C++ Library. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`MSIPL_COMPILE_H`] [__predef_detection__]] + [[`__MSIPL_COMPILE_H`] [__predef_detection__]] + ] + */ + +#define MSGPACK_LIB_STD_MSIPL MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(MSIPL_COMPILE_H) || defined(__MSIPL_COMPILE_H) +# undef MSGPACK_LIB_STD_MSIPL +# define MSGPACK_LIB_STD_MSIPL MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_LIB_STD_MSIPL +# define MSGPACK_LIB_STD_MSIPL_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_MSIPL_NAME "Modena Software Lib++" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_MSIPL,MSGPACK_LIB_STD_MSIPL_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std/msl.h b/include/msgpack/predef/library/std/msl.h new file mode 100644 index 0000000..aa4cc2a --- /dev/null +++ b/include/msgpack/predef/library/std/msl.h @@ -0,0 +1,54 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_MSL_H +#define MSGPACK_PREDEF_LIBRARY_STD_MSL_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_MSL`] + +[@http://www.freescale.com/ Metrowerks] Standard C++ Library. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__MSL_CPP__`] [__predef_detection__]] + [[`__MSL__`] [__predef_detection__]] + + [[`__MSL_CPP__`] [V.R.P]] + [[`__MSL__`] [V.R.P]] + ] + */ + +#define MSGPACK_LIB_STD_MSL MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__MSL_CPP__) || defined(__MSL__) +# undef MSGPACK_LIB_STD_MSL +# if defined(__MSL_CPP__) +# define MSGPACK_LIB_STD_MSL MSGPACK_PREDEF_MAKE_0X_VRPP(__MSL_CPP__) +# else +# define MSGPACK_LIB_STD_MSL MSGPACK_PREDEF_MAKE_0X_VRPP(__MSL__) +# endif +#endif + +#if MSGPACK_LIB_STD_MSL +# define MSGPACK_LIB_STD_MSL_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_MSL_NAME "Metrowerks" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_MSL,MSGPACK_LIB_STD_MSL_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std/roguewave.h b/include/msgpack/predef/library/std/roguewave.h new file mode 100644 index 0000000..2990496 --- /dev/null +++ b/include/msgpack/predef/library/std/roguewave.h @@ -0,0 +1,57 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_ROGUEWAVE_H +#define MSGPACK_PREDEF_LIBRARY_STD_ROGUEWAVE_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_RW`] + +[@http://stdcxx.apache.org/ Roguewave] Standard C++ library. +If available version number as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__STD_RWCOMPILER_H__`] [__predef_detection__]] + [[`_RWSTD_VER`] [__predef_detection__]] + + [[`_RWSTD_VER`] [V.R.P]] + ] + */ + +#define MSGPACK_LIB_STD_RW MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) +# undef MSGPACK_LIB_STD_RW +# if defined(_RWSTD_VER) +# if _RWSTD_VER < 0x010000 +# define MSGPACK_LIB_STD_RW MSGPACK_PREDEF_MAKE_0X_VVRRP(_RWSTD_VER) +# else +# define MSGPACK_LIB_STD_RW MSGPACK_PREDEF_MAKE_0X_VVRRPP(_RWSTD_VER) +# endif +# else +# define MSGPACK_LIB_STD_RW MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_LIB_STD_RW +# define MSGPACK_LIB_STD_RW_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_RW_NAME "Roguewave" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_RW,MSGPACK_LIB_STD_RW_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std/sgi.h b/include/msgpack/predef/library/std/sgi.h new file mode 100644 index 0000000..ea081bb --- /dev/null +++ b/include/msgpack/predef/library/std/sgi.h @@ -0,0 +1,52 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_SGI_H +#define MSGPACK_PREDEF_LIBRARY_STD_SGI_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_SGI`] + +[@http://www.sgi.com/tech/stl/ SGI] Standard C++ library. +If available version number as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__STL_CONFIG_H`] [__predef_detection__]] + + [[`__SGI_STL`] [V.R.P]] + ] + */ + +#define MSGPACK_LIB_STD_SGI MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__STL_CONFIG_H) +# undef MSGPACK_LIB_STD_SGI +# if defined(__SGI_STL) +# define MSGPACK_LIB_STD_SGI MSGPACK_PREDEF_MAKE_0X_VRP(__SGI_STL) +# else +# define MSGPACK_LIB_STD_SGI MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_LIB_STD_SGI +# define MSGPACK_LIB_STD_SGI_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_SGI_NAME "SGI" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_SGI,MSGPACK_LIB_STD_SGI_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std/stdcpp3.h b/include/msgpack/predef/library/std/stdcpp3.h new file mode 100644 index 0000000..2758f70 --- /dev/null +++ b/include/msgpack/predef/library/std/stdcpp3.h @@ -0,0 +1,54 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_STDCPP3_H +#define MSGPACK_PREDEF_LIBRARY_STD_STDCPP3_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_GNU`] + +[@http://gcc.gnu.org/libstdc++/ GNU libstdc++] Standard C++ library. +Version number available as year (from 1970), month, and day. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__GLIBCXX__`] [__predef_detection__]] + [[`__GLIBCPP__`] [__predef_detection__]] + + [[`__GLIBCXX__`] [V.R.P]] + [[`__GLIBCPP__`] [V.R.P]] + ] + */ + +#define MSGPACK_LIB_STD_GNU MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__GLIBCPP__) || defined(__GLIBCXX__) +# undef MSGPACK_LIB_STD_GNU +# if defined(__GLIBCXX__) +# define MSGPACK_LIB_STD_GNU MSGPACK_PREDEF_MAKE_YYYYMMDD(__GLIBCXX__) +# else +# define MSGPACK_LIB_STD_GNU MSGPACK_PREDEF_MAKE_YYYYMMDD(__GLIBCPP__) +# endif +#endif + +#if MSGPACK_LIB_STD_GNU +# define MSGPACK_LIB_STD_GNU_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_GNU_NAME "GNU" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_GNU,MSGPACK_LIB_STD_GNU_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std/stlport.h b/include/msgpack/predef/library/std/stlport.h new file mode 100644 index 0000000..5b9eccc --- /dev/null +++ b/include/msgpack/predef/library/std/stlport.h @@ -0,0 +1,60 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_STLPORT_H +#define MSGPACK_PREDEF_LIBRARY_STD_STLPORT_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_STLPORT`] + +[@http://sourceforge.net/projects/stlport/ STLport Standard C++] library. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__SGI_STL_PORT`] [__predef_detection__]] + [[`_STLPORT_VERSION`] [__predef_detection__]] + + [[`_STLPORT_MAJOR`, `_STLPORT_MINOR`, `_STLPORT_PATCHLEVEL`] [V.R.P]] + [[`_STLPORT_VERSION`] [V.R.P]] + [[`__SGI_STL_PORT`] [V.R.P]] + ] + */ + +#define MSGPACK_LIB_STD_STLPORT MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) +# undef MSGPACK_LIB_STD_STLPORT +# if !defined(MSGPACK_LIB_STD_STLPORT) && defined(_STLPORT_MAJOR) +# define MSGPACK_LIB_STD_STLPORT \ + MSGPACK_VERSION_NUMBER(_STLPORT_MAJOR,_STLPORT_MINOR,_STLPORT_PATCHLEVEL) +# endif +# if !defined(MSGPACK_LIB_STD_STLPORT) && defined(_STLPORT_VERSION) +# define MSGPACK_LIB_STD_STLPORT MSGPACK_PREDEF_MAKE_0X_VRP(_STLPORT_VERSION) +# endif +# if !defined(MSGPACK_LIB_STD_STLPORT) +# define MSGPACK_LIB_STD_STLPORT MSGPACK_PREDEF_MAKE_0X_VRP(__SGI_STL_PORT) +# endif +#endif + +#if MSGPACK_LIB_STD_STLPORT +# define MSGPACK_LIB_STD_STLPORT_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_STLPORT_NAME "STLport" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_STLPORT,MSGPACK_LIB_STD_STLPORT_NAME) + + +#endif diff --git a/include/msgpack/predef/library/std/vacpp.h b/include/msgpack/predef/library/std/vacpp.h new file mode 100644 index 0000000..488a186 --- /dev/null +++ b/include/msgpack/predef/library/std/vacpp.h @@ -0,0 +1,45 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_LIBRARY_STD_VACPP_H +#define MSGPACK_PREDEF_LIBRARY_STD_VACPP_H + +#include + +#include +#include + +/*` +[heading `MSGPACK_LIB_STD_IBM`] + +[@http://www.ibm.com/software/awdtools/xlcpp/ IBM VACPP Standard C++] library. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__IBMCPP__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_LIB_STD_IBM MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__IBMCPP__) +# undef MSGPACK_LIB_STD_IBM +# define MSGPACK_LIB_STD_IBM MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_LIB_STD_IBM +# define MSGPACK_LIB_STD_IBM_AVAILABLE +#endif + +#define MSGPACK_LIB_STD_IBM_NAME "IBM VACPP" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_LIB_STD_IBM,MSGPACK_LIB_STD_IBM_NAME) + + +#endif diff --git a/include/msgpack/predef/make.h b/include/msgpack/predef/make.h new file mode 100644 index 0000000..6a572b5 --- /dev/null +++ b/include/msgpack/predef/make.h @@ -0,0 +1,89 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ +#include + +#ifndef MSGPACK_PREDEF_MAKE_H +#define MSGPACK_PREDEF_MAKE_H + +/* +Shorthands for the common version number formats used by vendors... +*/ + +/*` +[heading `MSGPACK_PREDEF_MAKE_..` macros] + +These set of macros decompose common vendor version number +macros which are composed version, revision, and patch digits. +The naming convention indicates: + +* The base of the specified version number. "`MSGPACK_PREDEF_MAKE_0X`" for + hexadecimal digits, and "`MSGPACK_PREDEF_MAKE_10`" for decimal digits. +* The format of the vendor version number. Where "`V`" indicates the version digits, + "`R`" indicates the revision digits, "`P`" indicates the patch digits, and "`0`" + indicates an ignored digit. + +Macros are: +*/ +/*` `MSGPACK_PREDEF_MAKE_0X_VRP(V)` */ +#define MSGPACK_PREDEF_MAKE_0X_VRP(V) MSGPACK_VERSION_NUMBER((V&0xF00)>>8,(V&0xF0)>>4,(V&0xF)) +/*` `MSGPACK_PREDEF_MAKE_0X_VVRP(V)` */ +#define MSGPACK_PREDEF_MAKE_0X_VVRP(V) MSGPACK_VERSION_NUMBER((V&0xFF00)>>8,(V&0xF0)>>4,(V&0xF)) +/*` `MSGPACK_PREDEF_MAKE_0X_VRPP(V)` */ +#define MSGPACK_PREDEF_MAKE_0X_VRPP(V) MSGPACK_VERSION_NUMBER((V&0xF000)>>12,(V&0xF00)>>8,(V&0xFF)) +/*` `MSGPACK_PREDEF_MAKE_0X_VVRR(V)` */ +#define MSGPACK_PREDEF_MAKE_0X_VVRR(V) MSGPACK_VERSION_NUMBER((V&0xFF00)>>8,(V&0xFF),0) +/*` `MSGPACK_PREDEF_MAKE_0X_VRRPPPP(V)` */ +#define MSGPACK_PREDEF_MAKE_0X_VRRPPPP(V) MSGPACK_VERSION_NUMBER((V&0xF000000)>>24,(V&0xFF0000)>>16,(V&0xFFFF)) +/*` `MSGPACK_PREDEF_MAKE_0X_VVRRP(V)` */ +#define MSGPACK_PREDEF_MAKE_0X_VVRRP(V) MSGPACK_VERSION_NUMBER((V&0xFF000)>>12,(V&0xFF0)>>4,(V&0xF)) +/*` `MSGPACK_PREDEF_MAKE_0X_VRRPP000(V)` */ +#define MSGPACK_PREDEF_MAKE_0X_VRRPP000(V) MSGPACK_VERSION_NUMBER((V&0xF0000000)>>28,(V&0xFF00000)>>20,(V&0xFF000)>>12) +/*` `MSGPACK_PREDEF_MAKE_0X_VVRRPP(V)` */ +#define MSGPACK_PREDEF_MAKE_0X_VVRRPP(V) MSGPACK_VERSION_NUMBER((V&0xFF0000)>>16,(V&0xFF00)>>8,(V&0xFF)) +/*` `MSGPACK_PREDEF_MAKE_10_VPPP(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VPPP(V) MSGPACK_VERSION_NUMBER(((V)/1000)%10,0,(V)%1000) +/*` `MSGPACK_PREDEF_MAKE_10_VRP(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VRP(V) MSGPACK_VERSION_NUMBER(((V)/100)%10,((V)/10)%10,(V)%10) +/*` `MSGPACK_PREDEF_MAKE_10_VRP000(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VRP000(V) MSGPACK_VERSION_NUMBER(((V)/100000)%10,((V)/10000)%10,((V)/1000)%10) +/*` `MSGPACK_PREDEF_MAKE_10_VRPP(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VRPP(V) MSGPACK_VERSION_NUMBER(((V)/1000)%10,((V)/100)%10,(V)%100) +/*` `MSGPACK_PREDEF_MAKE_10_VRR(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VRR(V) MSGPACK_VERSION_NUMBER(((V)/100)%10,(V)%100,0) +/*` `MSGPACK_PREDEF_MAKE_10_VRRPP(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VRRPP(V) MSGPACK_VERSION_NUMBER(((V)/10000)%10,((V)/100)%100,(V)%100) +/*` `MSGPACK_PREDEF_MAKE_10_VRR000(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VRR000(V) MSGPACK_VERSION_NUMBER(((V)/100000)%10,((V)/1000)%100,0) +/*` `MSGPACK_PREDEF_MAKE_10_VV00(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VV00(V) MSGPACK_VERSION_NUMBER(((V)/100)%100,0,0) +/*` `MSGPACK_PREDEF_MAKE_10_VVRR(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VVRR(V) MSGPACK_VERSION_NUMBER(((V)/100)%100,(V)%100,0) +/*` `MSGPACK_PREDEF_MAKE_10_VVRRPP(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VVRRPP(V) MSGPACK_VERSION_NUMBER(((V)/10000)%100,((V)/100)%100,(V)%100) +/*` `MSGPACK_PREDEF_MAKE_10_VVRR0PP00(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VVRR0PP00(V) MSGPACK_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,((V)/100)%100) +/*` `MSGPACK_PREDEF_MAKE_10_VVRR0PPPP(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VVRR0PPPP(V) MSGPACK_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,(V)%10000) +/*` `MSGPACK_PREDEF_MAKE_10_VVRR00PP00(V)` */ +#define MSGPACK_PREDEF_MAKE_10_VVRR00PP00(V) MSGPACK_VERSION_NUMBER(((V)/100000000)%100,((V)/1000000)%100,((V)/100)%100) +/*` +[heading `MSGPACK_PREDEF_MAKE_*..` date macros] + +Date decomposition macros return a date in the relative to the 1970 +Epoch date. If the month is not available, January 1st is used as the month and day. +If the day is not available, but the month is, the 1st of the month is used as the day. +*/ +/*` `MSGPACK_PREDEF_MAKE_DATE(Y,M,D)` */ +#define MSGPACK_PREDEF_MAKE_DATE(Y,M,D) MSGPACK_VERSION_NUMBER((Y)%10000-1970,(M)%100,(D)%100) +/*` `MSGPACK_PREDEF_MAKE_YYYYMMDD(V)` */ +#define MSGPACK_PREDEF_MAKE_YYYYMMDD(V) MSGPACK_PREDEF_MAKE_DATE(((V)/10000)%10000,((V)/100)%100,(V)%100) +/*` `MSGPACK_PREDEF_MAKE_YYYY(V)` */ +#define MSGPACK_PREDEF_MAKE_YYYY(V) MSGPACK_PREDEF_MAKE_DATE(V,1,1) +/*` `MSGPACK_PREDEF_MAKE_YYYYMM(V)` */ +#define MSGPACK_PREDEF_MAKE_YYYYMM(V) MSGPACK_PREDEF_MAKE_DATE((V)/100,(V),1) + +#endif diff --git a/include/msgpack/predef/os.h b/include/msgpack/predef/os.h new file mode 100644 index 0000000..c8b3f40 --- /dev/null +++ b/include/msgpack/predef/os.h @@ -0,0 +1,31 @@ +/* +Copyright Rene Rivera 2008-2012 +Copyright Franz Detro 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_H +#define MSGPACK_PREDEF_OS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/include/msgpack/predef/os/aix.h b/include/msgpack/predef/os/aix.h new file mode 100644 index 0000000..c7afc6e --- /dev/null +++ b/include/msgpack/predef/os/aix.h @@ -0,0 +1,67 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_AIX_H +#define MSGPACK_PREDEF_OS_AIX_H + +#include +#include + +/*` +[heading `MSGPACK_OS_AIX`] + +[@http://en.wikipedia.org/wiki/AIX_operating_system IBM AIX] operating system. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`_AIX`] [__predef_detection__]] + [[`__TOS_AIX__`] [__predef_detection__]] + + [[`_AIX43`] [4.3.0]] + [[`_AIX41`] [4.1.0]] + [[`_AIX32`] [3.2.0]] + [[`_AIX3`] [3.0.0]] + ] + */ + +#define MSGPACK_OS_AIX MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(_AIX) || defined(__TOS_AIX__) \ + ) +# undef MSGPACK_OS_AIX +# if !defined(MSGPACK_OS_AIX) && defined(_AIX43) +# define MSGPACK_OS_AIX MSGPACK_VERSION_NUMBER(4,3,0) +# endif +# if !defined(MSGPACK_OS_AIX) && defined(_AIX41) +# define MSGPACK_OS_AIX MSGPACK_VERSION_NUMBER(4,1,0) +# endif +# if !defined(MSGPACK_OS_AIX) && defined(_AIX32) +# define MSGPACK_OS_AIX MSGPACK_VERSION_NUMBER(3,2,0) +# endif +# if !defined(MSGPACK_OS_AIX) && defined(_AIX3) +# define MSGPACK_OS_AIX MSGPACK_VERSION_NUMBER(3,0,0) +# endif +# if !defined(MSGPACK_OS_AIX) +# define MSGPACK_OS_AIX MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_OS_AIX +# define MSGPACK_OS_AIX_AVAILABLE +# include +#endif + +#define MSGPACK_OS_AIX_NAME "IBM AIX" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_AIX,MSGPACK_OS_AIX_NAME) + + +#endif diff --git a/include/msgpack/predef/os/amigaos.h b/include/msgpack/predef/os/amigaos.h new file mode 100644 index 0000000..9afcd4d --- /dev/null +++ b/include/msgpack/predef/os/amigaos.h @@ -0,0 +1,47 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_AMIGAOS_H +#define MSGPACK_PREDEF_OS_AMIGAOS_H + +#include +#include + +/*` +[heading `MSGPACK_OS_AMIGAOS`] + +[@http://en.wikipedia.org/wiki/AmigaOS AmigaOS] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`AMIGA`] [__predef_detection__]] + [[`__amigaos__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_AMIGAOS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(AMIGA) || defined(__amigaos__) \ + ) +# undef MSGPACK_OS_AMIGAOS +# define MSGPACK_OS_AMIGAOS MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_AMIGAOS +# define MSGPACK_OS_AMIGAOS_AVAILABLE +# include +#endif + +#define MSGPACK_OS_AMIGAOS_NAME "AmigaOS" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_AMIGAOS,MSGPACK_OS_AMIGAOS_NAME) + + +#endif diff --git a/include/msgpack/predef/os/android.h b/include/msgpack/predef/os/android.h new file mode 100644 index 0000000..d0ba537 --- /dev/null +++ b/include/msgpack/predef/os/android.h @@ -0,0 +1,46 @@ +/* +Copyright Rene Rivera 2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_ADROID_H +#define MSGPACK_PREDEF_OS_ADROID_H + +#include +#include + +/*` +[heading `MSGPACK_OS_ANDROID`] + +[@http://en.wikipedia.org/wiki/Android_%28operating_system%29 Android] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__ANDROID__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_ANDROID MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__ANDROID__) \ + ) +# undef MSGPACK_OS_ANDROID +# define MSGPACK_OS_ANDROID MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_ANDROID +# define MSGPACK_OS_ANDROID_AVAILABLE +# include +#endif + +#define MSGPACK_OS_ANDROID_NAME "Android" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_ANDROID,MSGPACK_OS_ANDROID_NAME) + + +#endif diff --git a/include/msgpack/predef/os/beos.h b/include/msgpack/predef/os/beos.h new file mode 100644 index 0000000..7817f59 --- /dev/null +++ b/include/msgpack/predef/os/beos.h @@ -0,0 +1,46 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_BEOS_H +#define MSGPACK_PREDEF_OS_BEOS_H + +#include +#include + +/*` +[heading `MSGPACK_OS_BEOS`] + +[@http://en.wikipedia.org/wiki/BeOS BeOS] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__BEOS__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_BEOS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__BEOS__) \ + ) +# undef MSGPACK_OS_BEOS +# define MSGPACK_OS_BEOS MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_BEOS +# define MSGPACK_OS_BEOS_AVAILABLE +# include +#endif + +#define MSGPACK_OS_BEOS_NAME "BeOS" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_BEOS,MSGPACK_OS_BEOS_NAME) + + +#endif diff --git a/include/msgpack/predef/os/bsd.h b/include/msgpack/predef/os/bsd.h new file mode 100644 index 0000000..6a4b63f --- /dev/null +++ b/include/msgpack/predef/os/bsd.h @@ -0,0 +1,95 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_BSD_H +#define MSGPACK_PREDEF_OS_BSD_H + +/* Special case: OSX will define BSD predefs if the sys/param.h + * header is included. We can guard against that, but only if we + * detect OSX first. Hence we will force include OSX detection + * before doing any BSD detection. + */ +#include + +#include +#include + +/*` +[heading `MSGPACK_OS_BSD`] + +[@http://en.wikipedia.org/wiki/Berkeley_Software_Distribution BSD] operating system. + +BSD has various branch operating systems possible and each detected +individually. This detects the following variations and sets a specific +version number macro to match: + +* `MSGPACK_OS_BSD_DRAGONFLY` [@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD] +* `MSGPACK_OS_BSD_FREE` [@http://en.wikipedia.org/wiki/Freebsd FreeBSD] +* `MSGPACK_OS_BSD_BSDI` [@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS] +* `MSGPACK_OS_BSD_NET` [@http://en.wikipedia.org/wiki/Netbsd NetBSD] +* `MSGPACK_OS_BSD_OPEN` [@http://en.wikipedia.org/wiki/Openbsd OpenBSD] + +[note The general `MSGPACK_OS_BSD` is set in all cases to indicate some form +of BSD. If the above variants is detected the corresponding macro is also set.] + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`BSD`] [__predef_detection__]] + [[`_SYSTYPE_BSD`] [__predef_detection__]] + + [[`BSD4_2`] [4.2.0]] + [[`BSD4_3`] [4.3.0]] + [[`BSD4_4`] [4.4.0]] + [[`BSD`] [V.R.0]] + ] + */ + +#include +#include +#include +#include +#include + +#ifndef MSGPACK_OS_BSD +#define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER_NOT_AVAILABLE +#endif + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(BSD) || \ + defined(_SYSTYPE_BSD) \ + ) +# undef MSGPACK_OS_BSD +# include +# if !defined(MSGPACK_OS_BSD) && defined(BSD4_4) +# define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER(4,4,0) +# endif +# if !defined(MSGPACK_OS_BSD) && defined(BSD4_3) +# define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER(4,3,0) +# endif +# if !defined(MSGPACK_OS_BSD) && defined(BSD4_2) +# define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER(4,2,0) +# endif +# if !defined(MSGPACK_OS_BSD) && defined(BSD) +# define MSGPACK_OS_BSD MSGPACK_PREDEF_MAKE_10_VVRR(BSD) +# endif +# if !defined(MSGPACK_OS_BSD) +# define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_OS_BSD +# define MSGPACK_OS_BSD_AVAILABLE +# include +#endif + +#define MSGPACK_OS_BSD_NAME "BSD" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_BSD,MSGPACK_OS_BSD_NAME) + +#endif diff --git a/include/msgpack/predef/os/bsd/bsdi.h b/include/msgpack/predef/os/bsd/bsdi.h new file mode 100644 index 0000000..9061066 --- /dev/null +++ b/include/msgpack/predef/os/bsd/bsdi.h @@ -0,0 +1,48 @@ +/* +Copyright Rene Rivera 2012-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_BSD_BSDI_H +#define MSGPACK_PREDEF_OS_BSD_BSDI_H + +#include + +/*` +[heading `MSGPACK_OS_BSD_BSDI`] + +[@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__bsdi__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_BSD_BSDI MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__bsdi__) \ + ) +# ifndef MSGPACK_OS_BSD_AVAILABLE +# define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER_AVAILABLE +# define MSGPACK_OS_BSD_AVAILABLE +# endif +# undef MSGPACK_OS_BSD_BSDI +# define MSGPACK_OS_BSD_BSDI MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_BSD_BSDI +# define MSGPACK_OS_BSD_BSDI_AVAILABLE +# include +#endif + +#define MSGPACK_OS_BSD_BSDI_NAME "BSDi BSD/OS" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_BSD_BSDI,MSGPACK_OS_BSD_BSDI_NAME) + +#endif diff --git a/include/msgpack/predef/os/bsd/dragonfly.h b/include/msgpack/predef/os/bsd/dragonfly.h new file mode 100644 index 0000000..bdf3e99 --- /dev/null +++ b/include/msgpack/predef/os/bsd/dragonfly.h @@ -0,0 +1,50 @@ +/* +Copyright Rene Rivera 2012-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_BSD_DRAGONFLY_H +#define MSGPACK_PREDEF_OS_BSD_DRAGONFLY_H + +#include + +/*` +[heading `MSGPACK_OS_BSD_DRAGONFLY`] + +[@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__DragonFly__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_BSD_DRAGONFLY MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__DragonFly__) \ + ) +# ifndef MSGPACK_OS_BSD_AVAILABLE +# define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER_AVAILABLE +# define MSGPACK_OS_BSD_AVAILABLE +# endif +# undef MSGPACK_OS_BSD_DRAGONFLY +# if defined(__DragonFly__) +# define MSGPACK_OS_DRAGONFLY_BSD MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_OS_BSD_DRAGONFLY +# define MSGPACK_OS_BSD_DRAGONFLY_AVAILABLE +# include +#endif + +#define MSGPACK_OS_BSD_DRAGONFLY_NAME "DragonFly BSD" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_BSD_DRAGONFLY,MSGPACK_OS_BSD_DRAGONFLY_NAME) + +#endif diff --git a/include/msgpack/predef/os/bsd/free.h b/include/msgpack/predef/os/bsd/free.h new file mode 100644 index 0000000..33d2494 --- /dev/null +++ b/include/msgpack/predef/os/bsd/free.h @@ -0,0 +1,60 @@ +/* +Copyright Rene Rivera 2012-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_BSD_FREE_H +#define MSGPACK_PREDEF_OS_BSD_FREE_H + +#include + +/*` +[heading `MSGPACK_OS_BSD_FREE`] + +[@http://en.wikipedia.org/wiki/Freebsd FreeBSD] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__FreeBSD__`] [__predef_detection__]] + + [[`__FreeBSD_version`] [V.R.P]] + ] + */ + +#define MSGPACK_OS_BSD_FREE MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__FreeBSD__) \ + ) +# ifndef MSGPACK_OS_BSD_AVAILABLE +# define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER_AVAILABLE +# define MSGPACK_OS_BSD_AVAILABLE +# endif +# undef MSGPACK_OS_BSD_FREE +# if defined(__FreeBSD_version) +# if __FreeBSD_version < 500000 +# define MSGPACK_OS_BSD_FREE \ + MSGPACK_PREDEF_MAKE_10_VRP000(__FreeBSD_version) +# else +# define MSGPACK_OS_BSD_FREE \ + MSGPACK_PREDEF_MAKE_10_VRR000(__FreeBSD_version) +# endif +# else +# define MSGPACK_OS_BSD_FREE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_OS_BSD_FREE +# define MSGPACK_OS_BSD_FREE_AVAILABLE +# include +#endif + +#define MSGPACK_OS_BSD_FREE_NAME "Free BSD" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_BSD_FREE,MSGPACK_OS_BSD_FREE_NAME) + +#endif diff --git a/include/msgpack/predef/os/bsd/net.h b/include/msgpack/predef/os/bsd/net.h new file mode 100644 index 0000000..8953e07 --- /dev/null +++ b/include/msgpack/predef/os/bsd/net.h @@ -0,0 +1,84 @@ +/* +Copyright Rene Rivera 2012-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_BSD_NET_H +#define MSGPACK_PREDEF_OS_BSD_NET_H + +#include + +/*` +[heading `MSGPACK_OS_BSD_NET`] + +[@http://en.wikipedia.org/wiki/Netbsd NetBSD] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__NETBSD__`] [__predef_detection__]] + [[`__NetBSD__`] [__predef_detection__]] + + [[`__NETBSD_version`] [V.R.P]] + [[`NetBSD0_8`] [0.8.0]] + [[`NetBSD0_9`] [0.9.0]] + [[`NetBSD1_0`] [1.0.0]] + [[`__NetBSD_Version`] [V.R.P]] + ] + */ + +#define MSGPACK_OS_BSD_NET MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__NETBSD__) || defined(__NetBSD__) \ + ) +# ifndef MSGPACK_OS_BSD_AVAILABLE +# define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER_AVAILABLE +# define MSGPACK_OS_BSD_AVAILABLE +# endif +# undef MSGPACK_OS_BSD_NET +# if defined(__NETBSD__) +# if defined(__NETBSD_version) +# if __NETBSD_version < 500000 +# define MSGPACK_OS_BSD_NET \ + MSGPACK_PREDEF_MAKE_10_VRP000(__NETBSD_version) +# else +# define MSGPACK_OS_BSD_NET \ + MSGPACK_PREDEF_MAKE_10_VRR000(__NETBSD_version) +# endif +# else +# define MSGPACK_OS_BSD_NET MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# elif defined(__NetBSD__) +# if !defined(MSGPACK_OS_BSD_NET) && defined(NetBSD0_8) +# define MSGPACK_OS_BSD_NET MSGPACK_VERSION_NUMBER(0,8,0) +# endif +# if !defined(MSGPACK_OS_BSD_NET) && defined(NetBSD0_9) +# define MSGPACK_OS_BSD_NET MSGPACK_VERSION_NUMBER(0,9,0) +# endif +# if !defined(MSGPACK_OS_BSD_NET) && defined(NetBSD1_0) +# define MSGPACK_OS_BSD_NET MSGPACK_VERSION_NUMBER(1,0,0) +# endif +# if !defined(MSGPACK_OS_BSD_NET) && defined(__NetBSD_Version) +# define MSGPACK_OS_BSD_NET \ + MSGPACK_PREDEF_MAKE_10_VVRR00PP00(__NetBSD_Version) +# endif +# if !defined(MSGPACK_OS_BSD_NET) +# define MSGPACK_OS_BSD_NET MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# endif +#endif + +#if MSGPACK_OS_BSD_NET +# define MSGPACK_OS_BSD_NET_AVAILABLE +# include +#endif + +#define MSGPACK_OS_BSD_NET_NAME "DragonFly BSD" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_BSD_NET,MSGPACK_OS_BSD_NET_NAME) + +#endif diff --git a/include/msgpack/predef/os/bsd/open.h b/include/msgpack/predef/os/bsd/open.h new file mode 100644 index 0000000..9b83d86 --- /dev/null +++ b/include/msgpack/predef/os/bsd/open.h @@ -0,0 +1,171 @@ +/* +Copyright Rene Rivera 2012-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_BSD_OPEN_H +#define MSGPACK_PREDEF_OS_BSD_OPEN_H + +#include + +/*` +[heading `MSGPACK_OS_BSD_OPEN`] + +[@http://en.wikipedia.org/wiki/Openbsd OpenBSD] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__OpenBSD__`] [__predef_detection__]] + + [[`OpenBSD2_0`] [2.0.0]] + [[`OpenBSD2_1`] [2.1.0]] + [[`OpenBSD2_2`] [2.2.0]] + [[`OpenBSD2_3`] [2.3.0]] + [[`OpenBSD2_4`] [2.4.0]] + [[`OpenBSD2_5`] [2.5.0]] + [[`OpenBSD2_6`] [2.6.0]] + [[`OpenBSD2_7`] [2.7.0]] + [[`OpenBSD2_8`] [2.8.0]] + [[`OpenBSD2_9`] [2.9.0]] + [[`OpenBSD3_0`] [3.0.0]] + [[`OpenBSD3_1`] [3.1.0]] + [[`OpenBSD3_2`] [3.2.0]] + [[`OpenBSD3_3`] [3.3.0]] + [[`OpenBSD3_4`] [3.4.0]] + [[`OpenBSD3_5`] [3.5.0]] + [[`OpenBSD3_6`] [3.6.0]] + [[`OpenBSD3_7`] [3.7.0]] + [[`OpenBSD3_8`] [3.8.0]] + [[`OpenBSD3_9`] [3.9.0]] + [[`OpenBSD4_0`] [4.0.0]] + [[`OpenBSD4_1`] [4.1.0]] + [[`OpenBSD4_2`] [4.2.0]] + [[`OpenBSD4_3`] [4.3.0]] + [[`OpenBSD4_4`] [4.4.0]] + [[`OpenBSD4_5`] [4.5.0]] + [[`OpenBSD4_6`] [4.6.0]] + [[`OpenBSD4_7`] [4.7.0]] + [[`OpenBSD4_8`] [4.8.0]] + [[`OpenBSD4_9`] [4.9.0]] + ] + */ + +#define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__OpenBSD__) \ + ) +# ifndef MSGPACK_OS_BSD_AVAILABLE +# define MSGPACK_OS_BSD MSGPACK_VERSION_NUMBER_AVAILABLE +# define MSGPACK_OS_BSD_AVAILABLE +# endif +# undef MSGPACK_OS_BSD_OPEN +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_0) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,0,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_1) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,1,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_2) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,2,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_3) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,3,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_4) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,4,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_5) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,5,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_6) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,6,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_7) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,7,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_8) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,8,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD2_9) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(2,9,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_0) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,0,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_1) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,1,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_2) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,2,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_3) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,3,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_4) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,4,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_5) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,5,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_6) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,6,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_7) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,7,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_8) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,8,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD3_9) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(3,9,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_0) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,0,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_1) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,1,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_2) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,2,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_3) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,3,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_4) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,4,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_5) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,5,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_6) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,6,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_7) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,7,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_8) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,8,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) && defined(OpenBSD4_9) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER(4,9,0) +# endif +# if !defined(MSGPACK_OS_BSD_OPEN) +# define MSGPACK_OS_BSD_OPEN MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_OS_BSD_OPEN +# define MSGPACK_OS_BSD_OPEN_AVAILABLE +# include +#endif + +#define MSGPACK_OS_BSD_OPEN_NAME "OpenBSD" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_BSD_OPEN,MSGPACK_OS_BSD_OPEN_NAME) + +#endif diff --git a/include/msgpack/predef/os/cygwin.h b/include/msgpack/predef/os/cygwin.h new file mode 100644 index 0000000..dc595a4 --- /dev/null +++ b/include/msgpack/predef/os/cygwin.h @@ -0,0 +1,46 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_CYGWIN_H +#define MSGPACK_PREDEF_OS_CYGWIN_H + +#include +#include + +/*` +[heading `MSGPACK_OS_CYGWIN`] + +[@http://en.wikipedia.org/wiki/Cygwin Cygwin] evironment. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__CYGWIN__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_CYGWIN MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__CYGWIN__) \ + ) +# undef MSGPACK_OS_CYGWIN +# define MSGPACK_OS_CGYWIN MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_CYGWIN +# define MSGPACK_OS_CYGWIN_AVAILABLE +# include +#endif + +#define MSGPACK_OS_CYGWIN_NAME "Cygwin" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_CYGWIN,MSGPACK_OS_CYGWIN_NAME) + + +#endif diff --git a/include/msgpack/predef/os/haiku.h b/include/msgpack/predef/os/haiku.h new file mode 100644 index 0000000..8d18d3c --- /dev/null +++ b/include/msgpack/predef/os/haiku.h @@ -0,0 +1,47 @@ +/* +Copyright Jessica Hamilton 2014 +Copyright Rene Rivera 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_HAIKU_H +#define MSGPACK_PREDEF_OS_HAIKU_H + +#include +#include + +/*` +[heading `MSGPACK_OS_HAIKU`] + +[@http://en.wikipedia.org/wiki/Haiku_(operating_system) Haiku] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__HAIKU__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_HAIKU MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__HAIKU__) \ + ) +# undef MSGPACK_OS_HAIKU +# define MSGPACK_OS_HAIKU MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_HAIKU +# define MSGPACK_OS_HAIKU_AVAILABLE +# include +#endif + +#define MSGPACK_OS_HAIKU_NAME "Haiku" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_HAIKU,MSGPACK_OS_HAIKU_NAME) + + +#endif diff --git a/include/msgpack/predef/os/hpux.h b/include/msgpack/predef/os/hpux.h new file mode 100644 index 0000000..7aa0fca --- /dev/null +++ b/include/msgpack/predef/os/hpux.h @@ -0,0 +1,48 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_HPUX_H +#define MSGPACK_PREDEF_OS_HPUX_H + +#include +#include + +/*` +[heading `MSGPACK_OS_HPUX`] + +[@http://en.wikipedia.org/wiki/HP-UX HP-UX] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`hpux`] [__predef_detection__]] + [[`_hpux`] [__predef_detection__]] + [[`__hpux`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_HPUX MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(hpux) || defined(_hpux) || defined(__hpux) \ + ) +# undef MSGPACK_OS_HPUX +# define MSGPACK_OS_HPUX MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_HPUX +# define MSGPACK_OS_HPUX_AVAILABLE +# include +#endif + +#define MSGPACK_OS_HPUX_NAME "HP-UX" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_HPUX,MSGPACK_OS_HPUX_NAME) + + +#endif diff --git a/include/msgpack/predef/os/ios.h b/include/msgpack/predef/os/ios.h new file mode 100644 index 0000000..99ca70b --- /dev/null +++ b/include/msgpack/predef/os/ios.h @@ -0,0 +1,51 @@ +/* +Copyright Franz Detro 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_IOS_H +#define MSGPACK_PREDEF_OS_IOS_H + +#include +#include + +/*` +[heading `MSGPACK_OS_IOS`] + +[@http://en.wikipedia.org/wiki/iOS iOS] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__APPLE__`] [__predef_detection__]] + [[`__MACH__`] [__predef_detection__]] + [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__predef_detection__]] + + [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000]] + ] + */ + +#define MSGPACK_OS_IOS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__APPLE__) && defined(__MACH__) && \ + defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) \ + ) +# undef MSGPACK_OS_IOS +# define MSGPACK_OS_IOS (__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000) +#endif + +#if MSGPACK_OS_IOS +# define MSGPACK_OS_IOS_AVAILABLE +# include +#endif + +#define MSGPACK_OS_IOS_NAME "iOS" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_IOS,MSGPACK_OS_IOS_NAME) + + +#endif diff --git a/include/msgpack/predef/os/irix.h b/include/msgpack/predef/os/irix.h new file mode 100644 index 0000000..e34f589 --- /dev/null +++ b/include/msgpack/predef/os/irix.h @@ -0,0 +1,47 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_IRIX_H +#define MSGPACK_PREDEF_OS_IRIX_H + +#include +#include + +/*` +[heading `MSGPACK_OS_IRIX`] + +[@http://en.wikipedia.org/wiki/Irix IRIX] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`sgi`] [__predef_detection__]] + [[`__sgi`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_IRIX MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(sgi) || defined(__sgi) \ + ) +# undef MSGPACK_OS_IRIX +# define MSGPACK_OS_IRIX MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_IRIX +# define MSGPACK_OS_IRIX_AVAILABLE +# include +#endif + +#define MSGPACK_OS_IRIX_NAME "IRIX" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_IRIX,MSGPACK_OS_IRIX_NAME) + + +#endif diff --git a/include/msgpack/predef/os/linux.h b/include/msgpack/predef/os/linux.h new file mode 100644 index 0000000..0b5103c --- /dev/null +++ b/include/msgpack/predef/os/linux.h @@ -0,0 +1,47 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_LINUX_H +#define MSGPACK_PREDEF_OS_LINUX_H + +#include +#include + +/*` +[heading `MSGPACK_OS_LINUX`] + +[@http://en.wikipedia.org/wiki/Linux Linux] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`linux`] [__predef_detection__]] + [[`__linux`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_LINUX MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(linux) || defined(__linux) \ + ) +# undef MSGPACK_OS_LINUX +# define MSGPACK_OS_LINUX MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_LINUX +# define MSGPACK_OS_LINUX_AVAILABLE +# include +#endif + +#define MSGPACK_OS_LINUX_NAME "Linux" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_LINUX,MSGPACK_OS_LINUX_NAME) + + +#endif diff --git a/include/msgpack/predef/os/macos.h b/include/msgpack/predef/os/macos.h new file mode 100644 index 0000000..7c8113c --- /dev/null +++ b/include/msgpack/predef/os/macos.h @@ -0,0 +1,66 @@ +/* +Copyright Rene Rivera 2008-2013 +Copyright Franz Detro 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_MACOS_H +#define MSGPACK_PREDEF_OS_MACOS_H + +/* Special case: iOS will define the same predefs as MacOS, and additionally + '__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__'. We can guard against that, + but only if we detect iOS first. Hence we will force include iOS detection + * before doing any MacOS detection. + */ +#include + +#include +#include + +/*` +[heading `MSGPACK_OS_MACOS`] + +[@http://en.wikipedia.org/wiki/Mac_OS Mac OS] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`macintosh`] [__predef_detection__]] + [[`Macintosh`] [__predef_detection__]] + [[`__APPLE__`] [__predef_detection__]] + [[`__MACH__`] [__predef_detection__]] + + [[`__APPLE__`, `__MACH__`] [10.0.0]] + [[ /otherwise/ ] [9.0.0]] + ] + */ + +#define MSGPACK_OS_MACOS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(macintosh) || defined(Macintosh) || \ + (defined(__APPLE__) && defined(__MACH__)) \ + ) +# undef MSGPACK_OS_MACOS +# if !defined(MSGPACK_OS_MACOS) && defined(__APPLE__) && defined(__MACH__) +# define MSGPACK_OS_MACOS MSGPACK_VERSION_NUMBER(10,0,0) +# endif +# if !defined(MSGPACK_OS_MACOS) +# define MSGPACK_OS_MACOS MSGPACK_VERSION_NUMBER(9,0,0) +# endif +#endif + +#if MSGPACK_OS_MACOS +# define MSGPACK_OS_MACOS_AVAILABLE +# include +#endif + +#define MSGPACK_OS_MACOS_NAME "Mac OS" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_MACOS,MSGPACK_OS_MACOS_NAME) + + +#endif diff --git a/include/msgpack/predef/os/os400.h b/include/msgpack/predef/os/os400.h new file mode 100644 index 0000000..18d4677 --- /dev/null +++ b/include/msgpack/predef/os/os400.h @@ -0,0 +1,46 @@ +/* +Copyright Rene Rivera 2011-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_OS400_H +#define MSGPACK_PREDEF_OS_OS400_H + +#include +#include + +/*` +[heading `MSGPACK_OS_OS400`] + +[@http://en.wikipedia.org/wiki/IBM_i IBM OS/400] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__OS400__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_OS400 MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__OS400__) \ + ) +# undef MSGPACK_OS_OS400 +# define MSGPACK_OS_OS400 MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_OS400 +# define MSGPACK_OS_OS400_AVAILABLE +# include +#endif + +#define MSGPACK_OS_OS400_NAME "IBM OS/400" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_OS400,MSGPACK_OS_OS400_NAME) + + +#endif diff --git a/include/msgpack/predef/os/qnxnto.h b/include/msgpack/predef/os/qnxnto.h new file mode 100644 index 0000000..6d16fe5 --- /dev/null +++ b/include/msgpack/predef/os/qnxnto.h @@ -0,0 +1,60 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_QNXNTO_H +#define MSGPACK_PREDEF_OS_QNXNTO_H + +#include +#include + +/*` +[heading `MSGPACK_OS_QNX`] + +[@http://en.wikipedia.org/wiki/QNX QNX] operating system. +Version number available as major, and minor if possible. And +version 4 is specifically detected. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__QNX__`] [__predef_detection__]] + [[`__QNXNTO__`] [__predef_detection__]] + + [[`_NTO_VERSION`] [V.R.0]] + [[`__QNX__`] [4.0.0]] + ] + */ + +#define MSGPACK_OS_QNX MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(__QNX__) || defined(__QNXNTO__) \ + ) +# undef MSGPACK_OS_QNX +# if !defined(MSGPACK_OS_QNX) && defined(_NTO_VERSION) +# define MSGPACK_OS_QNX MSGPACK_PREDEF_MAKE_10_VVRR(_NTO_VERSION) +# endif +# if !defined(MSGPACK_OS_QNX) && defined(__QNX__) +# define MSGPACK_OS_QNX MSGPACK_VERSION_NUMBER(4,0,0) +# endif +# if !defined(MSGPACK_OS_QNX) +# define MSGPACK_OS_QNX MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_OS_QNX +# define MSGPACK_OS_QNX_AVAILABLE +# include +#endif + +#define MSGPACK_OS_QNX_NAME "QNX" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_QNX,MSGPACK_OS_QNX_NAME) + + +#endif diff --git a/include/msgpack/predef/os/solaris.h b/include/msgpack/predef/os/solaris.h new file mode 100644 index 0000000..83ac9e7 --- /dev/null +++ b/include/msgpack/predef/os/solaris.h @@ -0,0 +1,47 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_SOLARIS_H +#define MSGPACK_PREDEF_OS_SOLARIS_H + +#include +#include + +/*` +[heading `MSGPACK_OS_SOLARIS`] + +[@http://en.wikipedia.org/wiki/Solaris_Operating_Environment Solaris] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`sun`] [__predef_detection__]] + [[`__sun`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_SOLARIS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(sun) || defined(__sun) \ + ) +# undef MSGPACK_OS_SOLARIS +# define MSGPACK_OS_SOLARIS MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_SOLARIS +# define MSGPACK_OS_SOLARIS_AVAILABLE +# include +#endif + +#define MSGPACK_OS_SOLARIS_NAME "Solaris" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_SOLARIS,MSGPACK_OS_SOLARIS_NAME) + + +#endif diff --git a/include/msgpack/predef/os/unix.h b/include/msgpack/predef/os/unix.h new file mode 100644 index 0000000..4d61fc0 --- /dev/null +++ b/include/msgpack/predef/os/unix.h @@ -0,0 +1,76 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_UNIX_H +#define MSGPACK_PREDEF_OS_UNIX_H + +#include +#include + +/*` +[heading `MSGPACK_OS_UNIX`] + +[@http://en.wikipedia.org/wiki/Unix Unix Environment] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`unix`] [__predef_detection__]] + [[`__unix`] [__predef_detection__]] + [[`_XOPEN_SOURCE`] [__predef_detection__]] + [[`_POSIX_SOURCE`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_UNIX MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(unix) || defined(__unix) || \ + defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE) +# undef MSGPACK_OS_UNIX +# define MSGPACK_OS_UNIX MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_UNIX +# define MSGPACK_OS_UNIX_AVAILABLE +#endif + +#define MSGPACK_OS_UNIX_NAME "Unix Environment" + +/*` +[heading `MSGPACK_OS_SVR4`] + +[@http://en.wikipedia.org/wiki/UNIX_System_V SVR4 Environment] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__sysv__`] [__predef_detection__]] + [[`__SVR4`] [__predef_detection__]] + [[`__svr4__`] [__predef_detection__]] + [[`_SYSTYPE_SVR4`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_SVR4 MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__sysv__) || defined(__SVR4) || \ + defined(__svr4__) || defined(_SYSTYPE_SVR4) +# undef MSGPACK_OS_SVR4 +# define MSGPACK_OS_SVR4 MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_SVR4 +# define MSGPACK_OS_SVR4_AVAILABLE +#endif + +#define MSGPACK_OS_SVR4_NAME "SVR4 Environment" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_UNIX,MSGPACK_OS_UNIX_NAME) +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_SVR4,MSGPACK_OS_SVR4_NAME) + +#endif diff --git a/include/msgpack/predef/os/vms.h b/include/msgpack/predef/os/vms.h new file mode 100644 index 0000000..8607481 --- /dev/null +++ b/include/msgpack/predef/os/vms.h @@ -0,0 +1,53 @@ +/* +Copyright Rene Rivera 2011-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_VMS_H +#define MSGPACK_PREDEF_OS_VMS_H + +#include +#include + +/*` +[heading `MSGPACK_OS_VMS`] + +[@http://en.wikipedia.org/wiki/Vms VMS] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`VMS`] [__predef_detection__]] + [[`__VMS`] [__predef_detection__]] + + [[`__VMS_VER`] [V.R.P]] + ] + */ + +#define MSGPACK_OS_VMS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(VMS) || defined(__VMS) \ + ) +# undef MSGPACK_OS_VMS +# if defined(__VMS_VER) +# define MSGPACK_OS_VMS MSGPACK_PREDEF_MAKE_10_VVRR00PP00(__VMS_VER) +# else +# define MSGPACK_OS_VMS MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if MSGPACK_OS_VMS +# define MSGPACK_OS_VMS_AVAILABLE +# include +#endif + +#define MSGPACK_OS_VMS_NAME "VMS" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_VMS,MSGPACK_OS_VMS_NAME) + + +#endif diff --git a/include/msgpack/predef/os/windows.h b/include/msgpack/predef/os/windows.h new file mode 100644 index 0000000..fc86df9 --- /dev/null +++ b/include/msgpack/predef/os/windows.h @@ -0,0 +1,51 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OS_WINDOWS_H +#define MSGPACK_PREDEF_OS_WINDOWS_H + +#include +#include + +/*` +[heading `MSGPACK_OS_WINDOWS`] + +[@http://en.wikipedia.org/wiki/Category:Microsoft_Windows Microsoft Windows] operating system. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`_WIN32`] [__predef_detection__]] + [[`_WIN64`] [__predef_detection__]] + [[`__WIN32__`] [__predef_detection__]] + [[`__TOS_WIN__`] [__predef_detection__]] + [[`__WINDOWS__`] [__predef_detection__]] + ] + */ + +#define MSGPACK_OS_WINDOWS MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if !defined(MSGPACK_PREDEF_DETAIL_OS_DETECTED) && ( \ + defined(_WIN32) || defined(_WIN64) || \ + defined(__WIN32__) || defined(__TOS_WIN__) || \ + defined(__WINDOWS__) \ + ) +# undef MSGPACK_OS_WINDOWS +# define MSGPACK_OS_WINDOWS MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_OS_WINDOWS +# define MSGPACK_OS_WINDOWS_AVAILABLE +# include +#endif + +#define MSGPACK_OS_WINDOWS_NAME "Microsoft Windows" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_OS_WINDOWS,MSGPACK_OS_WINDOWS_NAME) + +#endif diff --git a/include/msgpack/predef/other.h b/include/msgpack/predef/other.h new file mode 100644 index 0000000..99b32ca --- /dev/null +++ b/include/msgpack/predef/other.h @@ -0,0 +1,14 @@ +/* +Copyright Rene Rivera 2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_OTHER_H +#define MSGPACK_PREDEF_OTHER_H + +#include +/*#include */ + +#endif diff --git a/include/msgpack/predef/other/endian.h b/include/msgpack/predef/other/endian.h new file mode 100644 index 0000000..556e485 --- /dev/null +++ b/include/msgpack/predef/other/endian.h @@ -0,0 +1,205 @@ +/* +Copyright Rene Rivera 2013-2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_ENDIAN_H +#define MSGPACK_PREDEF_ENDIAN_H + +#include +#include +#include +#include +#include +#include + +/*` +[heading `MSGPACK_ENDIAN_*`] + +Detection of endian memory ordering. There are four defined macros +in this header that define the various generally possible endian +memory orderings: + +* `MSGPACK_ENDIAN_BIG_BYTE`, byte-swapped big-endian. +* `MSGPACK_ENDIAN_BIG_WORD`, word-swapped big-endian. +* `MSGPACK_ENDIAN_LITTLE_BYTE`, byte-swapped little-endian. +* `MSGPACK_ENDIAN_LITTLE_WORD`, word-swapped little-endian. + +The detection is conservative in that it only identifies endianness +that it knows for certain. In particular bi-endianness is not +indicated as is it not practically possible to determine the +endianness from anything but an operating system provided +header. And the currently known headers do not define that +programatic bi-endianness is available. + +This implementation is a compilation of various publicly available +information and acquired knowledge: + +# The indispensable documentation of "Pre-defined Compiler Macros" + [@http://sourceforge.net/p/predef/wiki/Endianness Endianness]. +# The various endian specifications available in the + [@http://wikipedia.org/ Wikipedia] computer architecture pages. +# Generally available searches for headers that define endianness. + */ + +#define MSGPACK_ENDIAN_BIG_BYTE MSGPACK_VERSION_NUMBER_NOT_AVAILABLE +#define MSGPACK_ENDIAN_BIG_WORD MSGPACK_VERSION_NUMBER_NOT_AVAILABLE +#define MSGPACK_ENDIAN_LITTLE_BYTE MSGPACK_VERSION_NUMBER_NOT_AVAILABLE +#define MSGPACK_ENDIAN_LITTLE_WORD MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +/* GNU libc provides a header defining __BYTE_ORDER, or _BYTE_ORDER. + * And some OSs provide some for of endian header also. + */ +#if !MSGPACK_ENDIAN_BIG_BYTE && !MSGPACK_ENDIAN_BIG_WORD && \ + !MSGPACK_ENDIAN_LITTLE_BYTE && !MSGPACK_ENDIAN_LITTLE_WORD +# if MSGPACK_LIB_C_GNU || MSGPACK_OS_ANDROID +# include +# else +# if MSGPACK_OS_MACOS +# include +# else +# if MSGPACK_OS_BSD +# if MSGPACK_OS_BSD_OPEN +# include +# else +# include +# endif +# endif +# endif +# endif +# if defined(__BYTE_ORDER) +# if defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN) +# undef MSGPACK_ENDIAN_BIG_BYTE +# define MSGPACK_ENDIAN_BIG_BYTE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# if defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN) +# undef MSGPACK_ENDIAN_LITTLE_BYTE +# define MSGPACK_ENDIAN_LITTLE_BYTE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# if defined(__PDP_ENDIAN) && (__BYTE_ORDER == __PDP_ENDIAN) +# undef MSGPACK_ENDIAN_LITTLE_WORD +# define MSGPACK_ENDIAN_LITTLE_WORD MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# endif +# if !defined(__BYTE_ORDER) && defined(_BYTE_ORDER) +# if defined(_BIG_ENDIAN) && (_BYTE_ORDER == _BIG_ENDIAN) +# undef MSGPACK_ENDIAN_BIG_BYTE +# define MSGPACK_ENDIAN_BIG_BYTE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# if defined(_LITTLE_ENDIAN) && (_BYTE_ORDER == _LITTLE_ENDIAN) +# undef MSGPACK_ENDIAN_LITTLE_BYTE +# define MSGPACK_ENDIAN_LITTLE_BYTE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# if defined(_PDP_ENDIAN) && (_BYTE_ORDER == _PDP_ENDIAN) +# undef MSGPACK_ENDIAN_LITTLE_WORD +# define MSGPACK_ENDIAN_LITTLE_WORD MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# endif +#endif + +/* Built-in byte-swpped big-endian macros. + */ +#if !MSGPACK_ENDIAN_BIG_BYTE && !MSGPACK_ENDIAN_BIG_WORD && \ + !MSGPACK_ENDIAN_LITTLE_BYTE && !MSGPACK_ENDIAN_LITTLE_WORD +# if (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)) || \ + (defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)) || \ + defined(__ARMEB__) || \ + defined(__THUMBEB__) || \ + defined(__AARCH64EB__) || \ + defined(_MIPSEB) || \ + defined(__MIPSEB) || \ + defined(__MIPSEB__) +# undef MSGPACK_ENDIAN_BIG_BYTE +# define MSGPACK_ENDIAN_BIG_BYTE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +/* Built-in byte-swpped little-endian macros. + */ +#if !MSGPACK_ENDIAN_BIG_BYTE && !MSGPACK_ENDIAN_BIG_WORD && \ + !MSGPACK_ENDIAN_LITTLE_BYTE && !MSGPACK_ENDIAN_LITTLE_WORD +# if (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \ + (defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)) || \ + defined(__ARMEL__) || \ + defined(__THUMBEL__) || \ + defined(__AARCH64EL__) || \ + defined(_MIPSEL) || \ + defined(__MIPSEL) || \ + defined(__MIPSEL__) +# undef MSGPACK_ENDIAN_LITTLE_BYTE +# define MSGPACK_ENDIAN_LITTLE_BYTE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +/* Some architectures are strictly one endianess (as opposed + * the current common bi-endianess). + */ +#if !MSGPACK_ENDIAN_BIG_BYTE && !MSGPACK_ENDIAN_BIG_WORD && \ + !MSGPACK_ENDIAN_LITTLE_BYTE && !MSGPACK_ENDIAN_LITTLE_WORD +# include +# if MSGPACK_ARCH_M68K || \ + MSGPACK_ARCH_PARISK || \ + MSGPACK_ARCH_SPARC || \ + MSGPACK_ARCH_SYS370 || \ + MSGPACK_ARCH_SYS390 || \ + MSGPACK_ARCH_Z +# undef MSGPACK_ENDIAN_BIG_BYTE +# define MSGPACK_ENDIAN_BIG_BYTE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# if MSGPACK_ARCH_AMD64 || \ + MSGPACK_ARCH_IA64 || \ + MSGPACK_ARCH_X86 || \ + MSGPACK_ARCH_BLACKFIN +# undef MSGPACK_ENDIAN_LITTLE_BYTE +# define MSGPACK_ENDIAN_LITTLE_BYTE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +/* Windows on ARM, if not otherwise detected/specified, is always + * byte-swaped little-endian. + */ +#if !MSGPACK_ENDIAN_BIG_BYTE && !MSGPACK_ENDIAN_BIG_WORD && \ + !MSGPACK_ENDIAN_LITTLE_BYTE && !MSGPACK_ENDIAN_LITTLE_WORD +# if MSGPACK_ARCH_ARM +# include +# if MSGPACK_OS_WINDOWS +# undef MSGPACK_ENDIAN_LITTLE_BYTE +# define MSGPACK_ENDIAN_LITTLE_BYTE MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +# endif +#endif + +#if MSGPACK_ENDIAN_BIG_BYTE +# define MSGPACK_ENDIAN_BIG_BYTE_AVAILABLE +#endif +#if MSGPACK_ENDIAN_BIG_WORD +# define MSGPACK_ENDIAN_BIG_WORD_BYTE_AVAILABLE +#endif +#if MSGPACK_ENDIAN_LITTLE_BYTE +# define MSGPACK_ENDIAN_LITTLE_BYTE_AVAILABLE +#endif +#if MSGPACK_ENDIAN_LITTLE_WORD +# define MSGPACK_ENDIAN_LITTLE_WORD_BYTE_AVAILABLE +#endif + +#define MSGPACK_ENDIAN_BIG_BYTE_NAME "Byte-Swapped Big-Endian" +#define MSGPACK_ENDIAN_BIG_WORD_NAME "Word-Swapped Big-Endian" +#define MSGPACK_ENDIAN_LITTLE_BYTE_NAME "Byte-Swapped Little-Endian" +#define MSGPACK_ENDIAN_LITTLE_WORD_NAME "Word-Swapped Little-Endian" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ENDIAN_BIG_BYTE,MSGPACK_ENDIAN_BIG_BYTE_NAME) + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ENDIAN_BIG_WORD,MSGPACK_ENDIAN_BIG_WORD_NAME) + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ENDIAN_LITTLE_BYTE,MSGPACK_ENDIAN_LITTLE_BYTE_NAME) + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ENDIAN_LITTLE_WORD,MSGPACK_ENDIAN_LITTLE_WORD_NAME) + + +#endif diff --git a/include/msgpack/predef/platform.h b/include/msgpack/predef/platform.h new file mode 100644 index 0000000..9029820 --- /dev/null +++ b/include/msgpack/predef/platform.h @@ -0,0 +1,19 @@ +/* +Copyright Rene Rivera 2013 +Copyright (c) Microsoft Corporation 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_PLATFORM_H +#define MSGPACK_PREDEF_PLATFORM_H + +#include +#include +#include +#include +#include +/*#include */ + +#endif diff --git a/include/msgpack/predef/platform/mingw.h b/include/msgpack/predef/platform/mingw.h new file mode 100644 index 0000000..8410d3d --- /dev/null +++ b/include/msgpack/predef/platform/mingw.h @@ -0,0 +1,70 @@ +/* +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_COMPILER_MINGW_H +#define MSGPACK_PREDEF_COMPILER_MINGW_H + +#include +#include + +/*` +[heading `MSGPACK_PLAT_MINGW`] + +[@http://en.wikipedia.org/wiki/MinGW MinGW] platform. +Version number available as major, minor, and patch. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__MINGW32__`] [__predef_detection__]] + [[`__MINGW64__`] [__predef_detection__]] + + [[`__MINGW64_VERSION_MAJOR`, `__MINGW64_VERSION_MINOR`] [V.R.0]] + [[`__MINGW32_VERSION_MAJOR`, `__MINGW32_VERSION_MINOR`] [V.R.0]] + ] + */ + +#define MSGPACK_PLAT_MINGW MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__MINGW32__) || defined(__MINGW64__) +# include <_mingw.h> +# if !defined(MSGPACK_PLAT_MINGW_DETECTION) && (defined(__MINGW64_VERSION_MAJOR) && defined(__MINGW64_VERSION_MINOR)) +# define MSGPACK_PLAT_MINGW_DETECTION \ + MSGPACK_VERSION_NUMBER(__MINGW64_VERSION_MAJOR,__MINGW64_VERSION_MINOR,0) +# endif +# if !defined(MSGPACK_PLAT_MINGW_DETECTION) && (defined(__MINGW32_VERSION_MAJOR) && defined(__MINGW32_VERSION_MINOR)) +# define MSGPACK_PLAT_MINGW_DETECTION \ + MSGPACK_VERSION_NUMBER(__MINGW32_MAJOR_VERSION,__MINGW32_MINOR_VERSION,0) +# endif +# if !defined(MSGPACK_PLAT_MINGW_DETECTION) +# define MSGPACK_PLAT_MINGW_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#ifdef MSGPACK_PLAT_MINGW_DETECTION +# define MSGPACK_PLAT_MINGW_AVAILABLE +# if defined(MSGPACK_PREDEF_DETAIL_PLAT_DETECTED) +# define MSGPACK_PLAT_MINGW_EMULATED MSGPACK_PLAT_MINGW_DETECTION +# else +# undef MSGPACK_PLAT_MINGW +# define MSGPACK_PLAT_MINGW MSGPACK_PLAT_MINGW_DETECTION +# endif +# include +#endif + +#define MSGPACK_PLAT_MINGW_NAME "MinGW" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_PLAT_MINGW,MSGPACK_PLAT_MINGW_NAME) + +#ifdef MSGPACK_PLAT_MINGW_EMULATED +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_PLAT_MINGW_EMULATED,MSGPACK_PLAT_MINGW_NAME) +#endif + + +#endif diff --git a/include/msgpack/predef/platform/windows_desktop.h b/include/msgpack/predef/platform/windows_desktop.h new file mode 100644 index 0000000..93a96cb --- /dev/null +++ b/include/msgpack/predef/platform/windows_desktop.h @@ -0,0 +1,44 @@ +/* +Copyright (c) Microsoft Corporation 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_PLAT_WINDOWS_DESKTOP_H +#define MSGPACK_PREDEF_PLAT_WINDOWS_DESKTOP_H + +#include +#include +#include + +/*` +[heading `MSGPACK_PLAT_WINDOWS_DESKTOP`] + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`!WINAPI_FAMILY`] [__predef_detection__]] + [[`WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP`] [__predef_detection__]] + ] + */ + +#define MSGPACK_PLAT_WINDOWS_DESKTOP MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if MSGPACK_OS_WINDOWS && \ + ( !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) ) +# undef MSGPACK_PLAT_WINDOWS_DESKTOP +# define MSGPACK_PLAT_WINDOWS_DESKTOP MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_PLAT_WINDOWS_DESKTOP +# define MSGPACK_PLAT_WINDOWS_DESKTOP_AVALIABLE +# include +#endif + +#define MSGPACK_PLAT_WINDOWS_DESKTOP_NAME "Windows Desktop" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_PLAT_WINDOWS_DESKTOP,MSGPACK_PLAT_WINDOWS_DESKTOP_NAME) + +#endif diff --git a/include/msgpack/predef/platform/windows_phone.h b/include/msgpack/predef/platform/windows_phone.h new file mode 100644 index 0000000..ccccfbb --- /dev/null +++ b/include/msgpack/predef/platform/windows_phone.h @@ -0,0 +1,42 @@ +/* +Copyright (c) Microsoft Corporation 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_PLAT_WINDOWS_PHONE_H +#define MSGPACK_PREDEF_PLAT_WINDOWS_PHONE_H + +#include +#include +#include + +/*` +[heading `MSGPACK_PLAT_WINDOWS_PHONE`] + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP`] [__predef_detection__]] + ] + */ + +#define MSGPACK_PLAT_WINDOWS_PHONE MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if MSGPACK_OS_WINDOWS && defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP +# undef MSGPACK_PLAT_WINDOWS_PHONE +# define MSGPACK_PLAT_WINDOWS_PHONE MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_PLAT_WINDOWS_PHONE +# define MSGPACK_PLAT_WINDOWS_PHONE_AVALIABLE +# include +#endif + +#define MSGPACK_PLAT_WINDOWS_PHONE_NAME "Windows Phone" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_PLAT_WINDOWS_PHONE,MSGPACK_PLAT_WINDOWS_PHONE_NAME) + +#endif diff --git a/include/msgpack/predef/platform/windows_runtime.h b/include/msgpack/predef/platform/windows_runtime.h new file mode 100644 index 0000000..d93f153 --- /dev/null +++ b/include/msgpack/predef/platform/windows_runtime.h @@ -0,0 +1,44 @@ +/* +Copyright (c) Microsoft Corporation 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_PLAT_WINDOWS_RUNTIME_H +#define MSGPACK_PREDEF_PLAT_WINDOWS_RUNTIME_H + +#include +#include +#include + +/*` +[heading `MSGPACK_PLAT_WINDOWS_RUNTIME`] + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`WINAPI_FAMILY == WINAPI_FAMILY_APP`] [__predef_detection__]] + [[`WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP`] [__predef_detection__]] + ] + */ + +#define MSGPACK_PLAT_WINDOWS_RUNTIME MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if MSGPACK_OS_WINDOWS && defined(WINAPI_FAMILY) && \ + ( WINAPI_FAMILY == WINAPI_FAMILY_APP || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP ) +# undef MSGPACK_PLAT_WINDOWS_RUNTIME +# define MSGPACK_PLAT_WINDOWS_RUNTIME MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_PLAT_WINDOWS_RUNTIME +# define MSGPACK_PLAT_WINDOWS_RUNTIME_AVALIABLE +# include +#endif + +#define MSGPACK_PLAT_WINDOWS_RUNTIME_NAME "Windows Runtime" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_PLAT_WINDOWS_RUNTIME,MSGPACK_PLAT_WINDOWS_RUNTIME_NAME) + +#endif diff --git a/include/msgpack/predef/platform/windows_store.h b/include/msgpack/predef/platform/windows_store.h new file mode 100644 index 0000000..005f4ec --- /dev/null +++ b/include/msgpack/predef/platform/windows_store.h @@ -0,0 +1,42 @@ +/* +Copyright (c) Microsoft Corporation 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_PLAT_WINDOWS_STORE_H +#define MSGPACK_PREDEF_PLAT_WINDOWS_STORE_H + +#include +#include +#include + +/*` +[heading `MSGPACK_PLAT_WINDOWS_STORE`] + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`WINAPI_FAMILY == WINAPI_FAMILY_APP`] [__predef_detection__]] + ] + */ + +#define MSGPACK_PLAT_WINDOWS_STORE MSGPACK_VERSION_NUMBER_NOT_AVAILABLE + +#if MSGPACK_OS_WINDOWS && defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_APP +# undef MSGPACK_PLAT_WINDOWS_STORE +# define MSGPACK_PLAT_WINDOWS_STORE MSGPACK_VERSION_NUMBER_AVAILABLE +#endif + +#if MSGPACK_PLAT_WINDOWS_STORE +# define MSGPACK_PLAT_WINDOWS_STORE_AVALIABLE +# include +#endif + +#define MSGPACK_PLAT_WINDOWS_STORE_NAME "Windows Store" + +#include +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_PLAT_WINDOWS_STORE,MSGPACK_PLAT_WINDOWS_STORE_NAME) + +#endif diff --git a/include/msgpack/predef/version.h b/include/msgpack/predef/version.h new file mode 100644 index 0000000..3910b96 --- /dev/null +++ b/include/msgpack/predef/version.h @@ -0,0 +1,15 @@ +/* +Copyright Rene Rivera 2014 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_VERSION_H +#define MSGPACK_PREDEF_VERSION_H + +#include + +#define MSGPACK_PREDEF_VERSION MSGPACK_VERSION_NUMBER(1,2,0) + +#endif diff --git a/include/msgpack/predef/version_number.h b/include/msgpack/predef/version_number.h new file mode 100644 index 0000000..37af5d2 --- /dev/null +++ b/include/msgpack/predef/version_number.h @@ -0,0 +1,54 @@ +/* +Copyright Rene Rivera 2005 +Copyright Rene Rivera 2008-2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef MSGPACK_PREDEF_VERSION_NUMBER_H +#define MSGPACK_PREDEF_VERSION_NUMBER_H + +/*` +[heading `MSGPACK_VERSION_NUMBER`] + +`` +MSGPACK_VERSION_NUMBER(major,minor,patch) +`` + +Defines standard version numbers, with these properties: + +* Decimal base whole numbers in the range \[0,1000000000). + The number range is designed to allow for a (2,2,5) triplet. + Which fits within a 32 bit value. +* The `major` number can be in the \[0,99\] range. +* The `minor` number can be in the \[0,99\] range. +* The `patch` number can be in the \[0,99999\] range. +* Values can be specified in any base. As the defined value + is an constant expression. +* Value can be directly used in both preprocessor and compiler + expressions for comparison to other similarly defined values. +* The implementation enforces the individual ranges for the + major, minor, and patch numbers. And values over the ranges + are truncated (modulo). + +*/ +#define MSGPACK_VERSION_NUMBER(major,minor,patch) \ + ( (((major)%100)*10000000) + (((minor)%100)*100000) + ((patch)%100000) ) + +#define MSGPACK_VERSION_NUMBER_MAX \ + MSGPACK_VERSION_NUMBER(99,99,99999) + +#define MSGPACK_VERSION_NUMBER_ZERO \ + MSGPACK_VERSION_NUMBER(0,0,0) + +#define MSGPACK_VERSION_NUMBER_MIN \ + MSGPACK_VERSION_NUMBER(0,0,1) + +#define MSGPACK_VERSION_NUMBER_AVAILABLE \ + MSGPACK_VERSION_NUMBER_MIN + +#define MSGPACK_VERSION_NUMBER_NOT_AVAILABLE \ + MSGPACK_VERSION_NUMBER_ZERO + +#endif diff --git a/include/msgpack/sbuffer.h b/include/msgpack/sbuffer.h new file mode 100644 index 0000000..c494bae --- /dev/null +++ b/include/msgpack/sbuffer.h @@ -0,0 +1,110 @@ +/* + * MessagePack for C simple buffer implementation + * + * Copyright (C) 2008-2009 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_SBUFFER_H +#define MSGPACK_SBUFFER_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @defgroup msgpack_sbuffer Simple buffer + * @ingroup msgpack_buffer + * @{ + */ + +typedef struct msgpack_sbuffer { + size_t size; + char* data; + size_t alloc; +} msgpack_sbuffer; + +static inline void msgpack_sbuffer_init(msgpack_sbuffer* sbuf) +{ + memset(sbuf, 0, sizeof(msgpack_sbuffer)); +} + +static inline void msgpack_sbuffer_destroy(msgpack_sbuffer* sbuf) +{ + free(sbuf->data); +} + +static inline msgpack_sbuffer* msgpack_sbuffer_new(void) +{ + return (msgpack_sbuffer*)calloc(1, sizeof(msgpack_sbuffer)); +} + +static inline void msgpack_sbuffer_free(msgpack_sbuffer* sbuf) +{ + if(sbuf == NULL) { return; } + msgpack_sbuffer_destroy(sbuf); + free(sbuf); +} + +#ifndef MSGPACK_SBUFFER_INIT_SIZE +#define MSGPACK_SBUFFER_INIT_SIZE 8192 +#endif + +static inline int msgpack_sbuffer_write(void* data, const char* buf, size_t len) +{ + msgpack_sbuffer* sbuf = (msgpack_sbuffer*)data; + + if(sbuf->alloc - sbuf->size < len) { + void* tmp; + size_t nsize = (sbuf->alloc) ? + sbuf->alloc * 2 : MSGPACK_SBUFFER_INIT_SIZE; + + while(nsize < sbuf->size + len) { + size_t tmp_nsize = nsize * 2; + if (tmp_nsize <= nsize) { + nsize = sbuf->size + len; + break; + } + nsize = tmp_nsize; + } + + tmp = realloc(sbuf->data, nsize); + if(!tmp) { return -1; } + + sbuf->data = (char*)tmp; + sbuf->alloc = nsize; + } + + memcpy(sbuf->data + sbuf->size, buf, len); + sbuf->size += len; + return 0; +} + +static inline char* msgpack_sbuffer_release(msgpack_sbuffer* sbuf) +{ + char* tmp = sbuf->data; + sbuf->size = 0; + sbuf->data = NULL; + sbuf->alloc = 0; + return tmp; +} + +static inline void msgpack_sbuffer_clear(msgpack_sbuffer* sbuf) +{ + sbuf->size = 0; +} + +/** @} */ + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/sbuffer.h */ diff --git a/include/msgpack/sysdep.h b/include/msgpack/sysdep.h new file mode 100644 index 0000000..a3f9edc --- /dev/null +++ b/include/msgpack/sysdep.h @@ -0,0 +1,189 @@ +/* + * MessagePack system dependencies + * + * Copyright (C) 2008-2010 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_SYSDEP_H +#define MSGPACK_SYSDEP_H + +#include + +#include +#include +#if defined(_MSC_VER) && _MSC_VER < 1600 + typedef __int8 int8_t; + typedef unsigned __int8 uint8_t; + typedef __int16 int16_t; + typedef unsigned __int16 uint16_t; + typedef __int32 int32_t; + typedef unsigned __int32 uint32_t; + typedef __int64 int64_t; + typedef unsigned __int64 uint64_t; +#elif defined(_MSC_VER) // && _MSC_VER >= 1600 +# include +#else +# include +# include +#endif + +#if !defined(MSGPACK_DLLEXPORT) +#if defined(_MSC_VER) +# define MSGPACK_DLLEXPORT __declspec(dllexport) +#else /* _MSC_VER */ +# define MSGPACK_DLLEXPORT +#endif /* _MSC_VER */ +#endif + +#ifdef _WIN32 +# define _msgpack_atomic_counter_header + typedef long _msgpack_atomic_counter_t; +# define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr) +# define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr) +#elif defined(__GNUC__) && ((__GNUC__*10 + __GNUC_MINOR__) < 41) + +# if defined(__cplusplus) +# define _msgpack_atomic_counter_header "gcc_atomic.hpp" +# else +# define _msgpack_atomic_counter_header "gcc_atomic.h" +# endif + +#else + typedef unsigned int _msgpack_atomic_counter_t; +# define _msgpack_sync_decr_and_fetch(ptr) __sync_sub_and_fetch(ptr, 1) +# define _msgpack_sync_incr_and_fetch(ptr) __sync_add_and_fetch(ptr, 1) +#endif + +#ifdef _WIN32 + +# ifdef __cplusplus + /* numeric_limits::min,max */ +# ifdef max +# undef max +# endif +# ifdef min +# undef min +# endif +# endif + +#else /* _*/ + +#include /* __BYTE_ORDER */ +# if defined(linux) +# include +# endif + +#endif + +#if MSGPACK_ENDIAN_LITTLE_BYTE + +# ifdef _WIN32 +# if defined(ntohs) +# define _msgpack_be16(x) ntohs(x) +# elif defined(_byteswap_ushort) || (defined(_MSC_VER) && _MSC_VER >= 1400) +# define _msgpack_be16(x) ((uint16_t)_byteswap_ushort((unsigned short)x)) +# else +# define _msgpack_be16(x) ( \ + ((((uint16_t)x) << 8) ) | \ + ((((uint16_t)x) >> 8) ) ) +# endif +# else +# define _msgpack_be16(x) ntohs(x) +# endif + +# ifdef _WIN32 +# if defined(ntohl) +# define _msgpack_be32(x) ntohl(x) +# elif defined(_byteswap_ulong) || (defined(_MSC_VER) && _MSC_VER >= 1400) +# define _msgpack_be32(x) ((uint32_t)_byteswap_ulong((unsigned long)x)) +# else +# define _msgpack_be32(x) \ + ( ((((uint32_t)x) << 24) ) | \ + ((((uint32_t)x) << 8) & 0x00ff0000U ) | \ + ((((uint32_t)x) >> 8) & 0x0000ff00U ) | \ + ((((uint32_t)x) >> 24) ) ) +# endif +# else +# define _msgpack_be32(x) ntohl(x) +# endif + +# if defined(_byteswap_uint64) || (defined(_MSC_VER) && _MSC_VER >= 1400) +# define _msgpack_be64(x) (_byteswap_uint64(x)) +# elif defined(bswap_64) +# define _msgpack_be64(x) bswap_64(x) +# elif defined(__DARWIN_OSSwapInt64) +# define _msgpack_be64(x) __DARWIN_OSSwapInt64(x) +# else +# define _msgpack_be64(x) \ + ( ((((uint64_t)x) << 56) ) | \ + ((((uint64_t)x) << 40) & 0x00ff000000000000ULL ) | \ + ((((uint64_t)x) << 24) & 0x0000ff0000000000ULL ) | \ + ((((uint64_t)x) << 8) & 0x000000ff00000000ULL ) | \ + ((((uint64_t)x) >> 8) & 0x00000000ff000000ULL ) | \ + ((((uint64_t)x) >> 24) & 0x0000000000ff0000ULL ) | \ + ((((uint64_t)x) >> 40) & 0x000000000000ff00ULL ) | \ + ((((uint64_t)x) >> 56) ) ) +# endif + +#elif MSGPACK_ENDIAN_BIG_BYTE + +# define _msgpack_be16(x) (x) +# define _msgpack_be32(x) (x) +# define _msgpack_be64(x) (x) + +#else +# error msgpack-c supports only big endian and little endian +#endif /* MSGPACK_ENDIAN_LITTLE_BYTE */ + +#define _msgpack_load16(cast, from, to) do { \ + memcpy((cast*)(to), (from), sizeof(cast)); \ + *(to) = _msgpack_be16(*(to)); \ + } while (0); + +#define _msgpack_load32(cast, from, to) do { \ + memcpy((cast*)(to), (from), sizeof(cast)); \ + *(to) = _msgpack_be32(*(to)); \ + } while (0); +#define _msgpack_load64(cast, from, to) do { \ + memcpy((cast*)(to), (from), sizeof(cast)); \ + *(to) = _msgpack_be64(*(to)); \ + } while (0); + +#define _msgpack_store16(to, num) \ + do { uint16_t val = _msgpack_be16(num); memcpy(to, &val, 2); } while(0) +#define _msgpack_store32(to, num) \ + do { uint32_t val = _msgpack_be32(num); memcpy(to, &val, 4); } while(0) +#define _msgpack_store64(to, num) \ + do { uint64_t val = _msgpack_be64(num); memcpy(to, &val, 8); } while(0) + +/* +#define _msgpack_load16(cast, from) \ + ({ cast val; memcpy(&val, (char*)from, 2); _msgpack_be16(val); }) +#define _msgpack_load32(cast, from) \ + ({ cast val; memcpy(&val, (char*)from, 4); _msgpack_be32(val); }) +#define _msgpack_load64(cast, from) \ + ({ cast val; memcpy(&val, (char*)from, 8); _msgpack_be64(val); }) +*/ + + +#if !defined(__cplusplus) && defined(_MSC_VER) +# if !defined(FALSE) +# define FALSE (0) +# endif +# if !defined(TRUE) +# define TRUE (!FALSE) +# endif +# if _MSC_VER >= 1800 +# include +# else +# define bool int +# define true TRUE +# define false FALSE +# endif +# define inline __inline +#endif + +#endif /* msgpack/sysdep.h */ diff --git a/include/msgpack/unpack.h b/include/msgpack/unpack.h new file mode 100644 index 0000000..0f9aede --- /dev/null +++ b/include/msgpack/unpack.h @@ -0,0 +1,270 @@ +/* + * MessagePack for C unpacking routine + * + * Copyright (C) 2008-2009 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_UNPACKER_H +#define MSGPACK_UNPACKER_H + +#include "zone.h" +#include "object.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @defgroup msgpack_unpack Deserializer + * @ingroup msgpack + * @{ + */ + +typedef struct msgpack_unpacked { + msgpack_zone* zone; + msgpack_object data; +} msgpack_unpacked; + +typedef enum { + MSGPACK_UNPACK_SUCCESS = 2, + MSGPACK_UNPACK_EXTRA_BYTES = 1, + MSGPACK_UNPACK_CONTINUE = 0, + MSGPACK_UNPACK_PARSE_ERROR = -1, + MSGPACK_UNPACK_NOMEM_ERROR = -2 +} msgpack_unpack_return; + + +MSGPACK_DLLEXPORT +msgpack_unpack_return +msgpack_unpack_next(msgpack_unpacked* result, + const char* data, size_t len, size_t* off); + +/** @} */ + + +/** + * @defgroup msgpack_unpacker Streaming deserializer + * @ingroup msgpack + * @{ + */ + +typedef struct msgpack_unpacker { + char* buffer; + size_t used; + size_t free; + size_t off; + size_t parsed; + msgpack_zone* z; + size_t initial_buffer_size; + void* ctx; +} msgpack_unpacker; + + +#ifndef MSGPACK_UNPACKER_INIT_BUFFER_SIZE +#define MSGPACK_UNPACKER_INIT_BUFFER_SIZE (64*1024) +#endif + +/** + * Initializes a streaming deserializer. + * The initialized deserializer must be destroyed by msgpack_unpacker_destroy(msgpack_unpacker*). + */ +MSGPACK_DLLEXPORT +bool msgpack_unpacker_init(msgpack_unpacker* mpac, size_t initial_buffer_size); + +/** + * Destroys a streaming deserializer initialized by msgpack_unpacker_init(msgpack_unpacker*, size_t). + */ +MSGPACK_DLLEXPORT +void msgpack_unpacker_destroy(msgpack_unpacker* mpac); + + +/** + * Creates a streaming deserializer. + * The created deserializer must be destroyed by msgpack_unpacker_free(msgpack_unpacker*). + */ +MSGPACK_DLLEXPORT +msgpack_unpacker* msgpack_unpacker_new(size_t initial_buffer_size); + +/** + * Frees a streaming deserializer created by msgpack_unpacker_new(size_t). + */ +MSGPACK_DLLEXPORT +void msgpack_unpacker_free(msgpack_unpacker* mpac); + + +#ifndef MSGPACK_UNPACKER_RESERVE_SIZE +#define MSGPACK_UNPACKER_RESERVE_SIZE (32*1024) +#endif + +/** + * Reserves free space of the internal buffer. + * Use this function to fill the internal buffer with + * msgpack_unpacker_buffer(msgpack_unpacker*), + * msgpack_unpacker_buffer_capacity(const msgpack_unpacker*) and + * msgpack_unpacker_buffer_consumed(msgpack_unpacker*). + */ +static inline bool msgpack_unpacker_reserve_buffer(msgpack_unpacker* mpac, size_t size); + +/** + * Gets pointer to the free space of the internal buffer. + * Use this function to fill the internal buffer with + * msgpack_unpacker_reserve_buffer(msgpack_unpacker*, size_t), + * msgpack_unpacker_buffer_capacity(const msgpack_unpacker*) and + * msgpack_unpacker_buffer_consumed(msgpack_unpacker*). + */ +static inline char* msgpack_unpacker_buffer(msgpack_unpacker* mpac); + +/** + * Gets size of the free space of the internal buffer. + * Use this function to fill the internal buffer with + * msgpack_unpacker_reserve_buffer(msgpack_unpacker*, size_t), + * msgpack_unpacker_buffer(const msgpack_unpacker*) and + * msgpack_unpacker_buffer_consumed(msgpack_unpacker*). + */ +static inline size_t msgpack_unpacker_buffer_capacity(const msgpack_unpacker* mpac); + +/** + * Notifies the deserializer that the internal buffer filled. + * Use this function to fill the internal buffer with + * msgpack_unpacker_reserve_buffer(msgpack_unpacker*, size_t), + * msgpack_unpacker_buffer(msgpack_unpacker*) and + * msgpack_unpacker_buffer_capacity(const msgpack_unpacker*). + */ +static inline void msgpack_unpacker_buffer_consumed(msgpack_unpacker* mpac, size_t size); + + +/** + * Deserializes one object. + * Returns true if it successes. Otherwise false is returned. + * @param pac pointer to an initialized msgpack_unpacked object. + */ +MSGPACK_DLLEXPORT +msgpack_unpack_return msgpack_unpacker_next(msgpack_unpacker* mpac, msgpack_unpacked* pac); + +/** + * Initializes a msgpack_unpacked object. + * The initialized object must be destroyed by msgpack_unpacked_destroy(msgpack_unpacker*). + * Use the object with msgpack_unpacker_next(msgpack_unpacker*, msgpack_unpacked*) or + * msgpack_unpack_next(msgpack_unpacked*, const char*, size_t, size_t*). + */ +static inline void msgpack_unpacked_init(msgpack_unpacked* result); + +/** + * Destroys a streaming deserializer initialized by msgpack_unpacked(). + */ +static inline void msgpack_unpacked_destroy(msgpack_unpacked* result); + +/** + * Releases the memory zone from msgpack_unpacked object. + * The released zone must be freed by msgpack_zone_free(msgpack_zone*). + */ +static inline msgpack_zone* msgpack_unpacked_release_zone(msgpack_unpacked* result); + + +MSGPACK_DLLEXPORT +int msgpack_unpacker_execute(msgpack_unpacker* mpac); + +MSGPACK_DLLEXPORT +msgpack_object msgpack_unpacker_data(msgpack_unpacker* mpac); + +MSGPACK_DLLEXPORT +msgpack_zone* msgpack_unpacker_release_zone(msgpack_unpacker* mpac); + +MSGPACK_DLLEXPORT +void msgpack_unpacker_reset_zone(msgpack_unpacker* mpac); + +MSGPACK_DLLEXPORT +void msgpack_unpacker_reset(msgpack_unpacker* mpac); + +static inline size_t msgpack_unpacker_message_size(const msgpack_unpacker* mpac); + + +/** @} */ + + +// obsolete +MSGPACK_DLLEXPORT +msgpack_unpack_return +msgpack_unpack(const char* data, size_t len, size_t* off, + msgpack_zone* result_zone, msgpack_object* result); + + + + +static inline size_t msgpack_unpacker_parsed_size(const msgpack_unpacker* mpac); + +MSGPACK_DLLEXPORT +bool msgpack_unpacker_flush_zone(msgpack_unpacker* mpac); + +MSGPACK_DLLEXPORT +bool msgpack_unpacker_expand_buffer(msgpack_unpacker* mpac, size_t size); + +static inline bool msgpack_unpacker_reserve_buffer(msgpack_unpacker* mpac, size_t size) +{ + if(mpac->free >= size) { return true; } + return msgpack_unpacker_expand_buffer(mpac, size); +} + +static inline char* msgpack_unpacker_buffer(msgpack_unpacker* mpac) +{ + return mpac->buffer + mpac->used; +} + +static inline size_t msgpack_unpacker_buffer_capacity(const msgpack_unpacker* mpac) +{ + return mpac->free; +} + +static inline void msgpack_unpacker_buffer_consumed(msgpack_unpacker* mpac, size_t size) +{ + mpac->used += size; + mpac->free -= size; +} + +static inline size_t msgpack_unpacker_message_size(const msgpack_unpacker* mpac) +{ + return mpac->parsed - mpac->off + mpac->used; +} + +static inline size_t msgpack_unpacker_parsed_size(const msgpack_unpacker* mpac) +{ + return mpac->parsed; +} + + +static inline void msgpack_unpacked_init(msgpack_unpacked* result) +{ + memset(result, 0, sizeof(msgpack_unpacked)); +} + +static inline void msgpack_unpacked_destroy(msgpack_unpacked* result) +{ + if(result->zone != NULL) { + msgpack_zone_free(result->zone); + result->zone = NULL; + memset(&result->data, 0, sizeof(msgpack_object)); + } +} + +static inline msgpack_zone* msgpack_unpacked_release_zone(msgpack_unpacked* result) +{ + if(result->zone != NULL) { + msgpack_zone* z = result->zone; + result->zone = NULL; + return z; + } + return NULL; +} + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/unpack.h */ + diff --git a/include/msgpack/unpack_define.h b/include/msgpack/unpack_define.h new file mode 100644 index 0000000..c7decf6 --- /dev/null +++ b/include/msgpack/unpack_define.h @@ -0,0 +1,89 @@ +/* + * MessagePack unpacking routine template + * + * Copyright (C) 2008-2010 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_UNPACK_DEFINE_H +#define MSGPACK_UNPACK_DEFINE_H + +#include "msgpack/sysdep.h" +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef MSGPACK_EMBED_STACK_SIZE +#define MSGPACK_EMBED_STACK_SIZE 32 +#endif + + +typedef enum { + MSGPACK_CS_HEADER = 0x00, // nil + + //MSGPACK_CS_ = 0x01, + //MSGPACK_CS_ = 0x02, // false + //MSGPACK_CS_ = 0x03, // true + + MSGPACK_CS_BIN_8 = 0x04, + MSGPACK_CS_BIN_16 = 0x05, + MSGPACK_CS_BIN_32 = 0x06, + + MSGPACK_CS_EXT_8 = 0x07, + MSGPACK_CS_EXT_16 = 0x08, + MSGPACK_CS_EXT_32 = 0x09, + + MSGPACK_CS_FLOAT = 0x0a, + MSGPACK_CS_DOUBLE = 0x0b, + MSGPACK_CS_UINT_8 = 0x0c, + MSGPACK_CS_UINT_16 = 0x0d, + MSGPACK_CS_UINT_32 = 0x0e, + MSGPACK_CS_UINT_64 = 0x0f, + MSGPACK_CS_INT_8 = 0x10, + MSGPACK_CS_INT_16 = 0x11, + MSGPACK_CS_INT_32 = 0x12, + MSGPACK_CS_INT_64 = 0x13, + + MSGPACK_CS_FIXEXT_1 = 0x14, + MSGPACK_CS_FIXEXT_2 = 0x15, + MSGPACK_CS_FIXEXT_4 = 0x16, + MSGPACK_CS_FIXEXT_8 = 0x17, + MSGPACK_CS_FIXEXT_16 = 0x18, + + MSGPACK_CS_STR_8 = 0x19, // str8 + MSGPACK_CS_STR_16 = 0x1a, // str16 + MSGPACK_CS_STR_32 = 0x1b, // str32 + MSGPACK_CS_ARRAY_16 = 0x1c, + MSGPACK_CS_ARRAY_32 = 0x1d, + MSGPACK_CS_MAP_16 = 0x1e, + MSGPACK_CS_MAP_32 = 0x1f, + + //MSGPACK_ACS_BIG_INT_VALUE, + //MSGPACK_ACS_BIG_FLOAT_VALUE, + MSGPACK_ACS_STR_VALUE, + MSGPACK_ACS_BIN_VALUE, + MSGPACK_ACS_EXT_VALUE +} msgpack_unpack_state; + + +typedef enum { + MSGPACK_CT_ARRAY_ITEM, + MSGPACK_CT_MAP_KEY, + MSGPACK_CT_MAP_VALUE +} msgpack_container_type; + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/unpack_define.h */ + diff --git a/include/msgpack/unpack_template.h b/include/msgpack/unpack_template.h new file mode 100644 index 0000000..a6dae6f --- /dev/null +++ b/include/msgpack/unpack_template.h @@ -0,0 +1,474 @@ +/* + * MessagePack unpacking routine template + * + * Copyright (C) 2008-2010 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ + +#ifndef msgpack_unpack_func +#error msgpack_unpack_func template is not defined +#endif + +#ifndef msgpack_unpack_callback +#error msgpack_unpack_callback template is not defined +#endif + +#ifndef msgpack_unpack_struct +#error msgpack_unpack_struct template is not defined +#endif + +#ifndef msgpack_unpack_struct_decl +#define msgpack_unpack_struct_decl(name) msgpack_unpack_struct(name) +#endif + +#ifndef msgpack_unpack_object +#error msgpack_unpack_object type is not defined +#endif + +#ifndef msgpack_unpack_user +#error msgpack_unpack_user type is not defined +#endif + +#ifndef USE_CASE_RANGE +#if !defined(_MSC_VER) +#define USE_CASE_RANGE +#endif +#endif + +msgpack_unpack_struct_decl(_stack) { + msgpack_unpack_object obj; + size_t count; + unsigned int ct; + msgpack_unpack_object map_key; +}; + +msgpack_unpack_struct_decl(_context) { + msgpack_unpack_user user; + unsigned int cs; + unsigned int trail; + unsigned int top; + /* + msgpack_unpack_struct(_stack)* stack; + unsigned int stack_size; + msgpack_unpack_struct(_stack) embed_stack[MSGPACK_EMBED_STACK_SIZE]; + */ + msgpack_unpack_struct(_stack) stack[MSGPACK_EMBED_STACK_SIZE]; +}; + + +msgpack_unpack_func(void, _init)(msgpack_unpack_struct(_context)* ctx) +{ + ctx->cs = MSGPACK_CS_HEADER; + ctx->trail = 0; + ctx->top = 0; + /* + ctx->stack = ctx->embed_stack; + ctx->stack_size = MSGPACK_EMBED_STACK_SIZE; + */ + ctx->stack[0].obj = msgpack_unpack_callback(_root)(&ctx->user); +} + +/* +msgpack_unpack_func(void, _destroy)(msgpack_unpack_struct(_context)* ctx) +{ + if(ctx->stack_size != MSGPACK_EMBED_STACK_SIZE) { + free(ctx->stack); + } +} +*/ + +msgpack_unpack_func(msgpack_unpack_object, _data)(msgpack_unpack_struct(_context)* ctx) +{ + return (ctx)->stack[0].obj; +} + + +msgpack_unpack_func(int, _execute)(msgpack_unpack_struct(_context)* ctx, const char* data, size_t len, size_t* off) +{ + assert(len >= *off); + { + const unsigned char* p = (unsigned char*)data + *off; + const unsigned char* const pe = (unsigned char*)data + len; + const void* n = NULL; + + unsigned int trail = ctx->trail; + unsigned int cs = ctx->cs; + unsigned int top = ctx->top; + msgpack_unpack_struct(_stack)* stack = ctx->stack; + /* + unsigned int stack_size = ctx->stack_size; + */ + msgpack_unpack_user* user = &ctx->user; + + msgpack_unpack_object obj; + msgpack_unpack_struct(_stack)* c = NULL; + + int ret; + +#define push_simple_value(func) \ + if(msgpack_unpack_callback(func)(user, &obj) < 0) { goto _failed; } \ + goto _push +#define push_fixed_value(func, arg) \ + if(msgpack_unpack_callback(func)(user, arg, &obj) < 0) { goto _failed; } \ + goto _push +#define push_variable_value(func, base, pos, len) \ + if(msgpack_unpack_callback(func)(user, \ + (const char*)base, (const char*)pos, len, &obj) < 0) { goto _failed; } \ + goto _push + +#define again_fixed_trail(_cs, trail_len) \ + trail = trail_len; \ + cs = _cs; \ + goto _fixed_trail_again +#define again_fixed_trail_if_zero(_cs, trail_len, ifzero) \ + trail = trail_len; \ + if(trail == 0) { goto ifzero; } \ + cs = _cs; \ + goto _fixed_trail_again + +#define start_container(func, count_, ct_) \ + if(top >= MSGPACK_EMBED_STACK_SIZE) { goto _failed; } /* FIXME */ \ + if(msgpack_unpack_callback(func)(user, count_, &stack[top].obj) < 0) { goto _failed; } \ + if((count_) == 0) { obj = stack[top].obj; goto _push; } \ + stack[top].ct = ct_; \ + stack[top].count = count_; \ + ++top; \ + /*printf("container %d count %d stack %d\n",stack[top].obj,count_,top);*/ \ + /*printf("stack push %d\n", top);*/ \ + /* FIXME \ + if(top >= stack_size) { \ + if(stack_size == MSGPACK_EMBED_STACK_SIZE) { \ + size_t csize = sizeof(msgpack_unpack_struct(_stack)) * MSGPACK_EMBED_STACK_SIZE; \ + size_t nsize = csize * 2; \ + msgpack_unpack_struct(_stack)* tmp = (msgpack_unpack_struct(_stack)*)malloc(nsize); \ + if(tmp == NULL) { goto _failed; } \ + memcpy(tmp, ctx->stack, csize); \ + ctx->stack = stack = tmp; \ + ctx->stack_size = stack_size = MSGPACK_EMBED_STACK_SIZE * 2; \ + } else { \ + size_t nsize = sizeof(msgpack_unpack_struct(_stack)) * ctx->stack_size * 2; \ + msgpack_unpack_struct(_stack)* tmp = (msgpack_unpack_struct(_stack)*)realloc(ctx->stack, nsize); \ + if(tmp == NULL) { goto _failed; } \ + ctx->stack = stack = tmp; \ + ctx->stack_size = stack_size = stack_size * 2; \ + } \ + } \ + */ \ + goto _header_again + +#define NEXT_CS(p) \ + ((unsigned int)*p & 0x1f) + +#ifdef USE_CASE_RANGE +#define SWITCH_RANGE_BEGIN switch(*p) { +#define SWITCH_RANGE(FROM, TO) case FROM ... TO: +#define SWITCH_RANGE_DEFAULT default: +#define SWITCH_RANGE_END } +#else +#define SWITCH_RANGE_BEGIN { if(0) { +#define SWITCH_RANGE(FROM, TO) } else if(FROM <= *p && *p <= TO) { +#define SWITCH_RANGE_DEFAULT } else { +#define SWITCH_RANGE_END } } +#endif + + if(p == pe) { goto _out; } + do { + switch(cs) { + case MSGPACK_CS_HEADER: + SWITCH_RANGE_BEGIN + SWITCH_RANGE(0x00, 0x7f) // Positive Fixnum + push_fixed_value(_uint8, *(uint8_t*)p); + SWITCH_RANGE(0xe0, 0xff) // Negative Fixnum + push_fixed_value(_int8, *(int8_t*)p); + SWITCH_RANGE(0xc0, 0xdf) // Variable + switch(*p) { + case 0xc0: // nil + push_simple_value(_nil); + //case 0xc1: // string + // again_terminal_trail(NEXT_CS(p), p+1); + case 0xc2: // false + push_simple_value(_false); + case 0xc3: // true + push_simple_value(_true); + case 0xc4: // bin 8 + case 0xc5: // bin 16 + case 0xc6: // bin 32 + again_fixed_trail(NEXT_CS(p), 1 << (((unsigned int)*p) & 0x03)); + case 0xc7: // ext 8 + case 0xc8: // ext 16 + case 0xc9: // ext 32 + again_fixed_trail(NEXT_CS(p), 1 << ((((unsigned int)*p) + 1) & 0x03)); + case 0xca: // float + case 0xcb: // double + case 0xcc: // unsigned int 8 + case 0xcd: // unsigned int 16 + case 0xce: // unsigned int 32 + case 0xcf: // unsigned int 64 + case 0xd0: // signed int 8 + case 0xd1: // signed int 16 + case 0xd2: // signed int 32 + case 0xd3: // signed int 64 + again_fixed_trail(NEXT_CS(p), 1 << (((unsigned int)*p) & 0x03)); + case 0xd4: // fixext 1 + case 0xd5: // fixext 2 + case 0xd6: // fixext 4 + case 0xd7: // fixext 8 + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, + (1 << (((unsigned int)*p) & 0x03)) + 1, _ext_zero); + case 0xd8: // fixext 16 + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, 16+1, _ext_zero); + + case 0xd9: // str 8 + case 0xda: // str 16 + case 0xdb: // str 32 + again_fixed_trail(NEXT_CS(p), 1 << ((((unsigned int)*p) & 0x03) - 1)); + case 0xdc: // array 16 + case 0xdd: // array 32 + case 0xde: // map 16 + case 0xdf: // map 32 + again_fixed_trail(NEXT_CS(p), 2u << (((unsigned int)*p) & 0x01)); + default: + goto _failed; + } + SWITCH_RANGE(0xa0, 0xbf) // FixStr + again_fixed_trail_if_zero(MSGPACK_ACS_STR_VALUE, ((unsigned int)*p & 0x1f), _str_zero); + SWITCH_RANGE(0x90, 0x9f) // FixArray + start_container(_array, ((unsigned int)*p) & 0x0f, MSGPACK_CT_ARRAY_ITEM); + SWITCH_RANGE(0x80, 0x8f) // FixMap + start_container(_map, ((unsigned int)*p) & 0x0f, MSGPACK_CT_MAP_KEY); + + SWITCH_RANGE_DEFAULT + goto _failed; + SWITCH_RANGE_END + // end MSGPACK_CS_HEADER + + + _fixed_trail_again: + ++p; + + default: + if((size_t)(pe - p) < trail) { goto _out; } + n = p; p += trail - 1; + switch(cs) { + //case MSGPACK_CS_ + //case MSGPACK_CS_ + case MSGPACK_CS_FLOAT: { + union { uint32_t i; float f; } mem; + _msgpack_load32(uint32_t, n, &mem.i); + push_fixed_value(_float, mem.f); } + case MSGPACK_CS_DOUBLE: { + union { uint64_t i; double f; } mem; + _msgpack_load64(uint64_t, n, &mem.i); +#if defined(TARGET_OS_IPHONE) + // ok +#elif defined(__arm__) && !(__ARM_EABI__) // arm-oabi + // https://github.com/msgpack/msgpack-perl/pull/1 + mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL); +#endif + push_fixed_value(_double, mem.f); } + case MSGPACK_CS_UINT_8: + push_fixed_value(_uint8, *(uint8_t*)n); + case MSGPACK_CS_UINT_16:{ + uint16_t tmp; + _msgpack_load16(uint16_t,n,&tmp); + push_fixed_value(_uint16, tmp); + } + case MSGPACK_CS_UINT_32:{ + uint32_t tmp; + _msgpack_load32(uint32_t,n,&tmp); + push_fixed_value(_uint32, tmp); + } + case MSGPACK_CS_UINT_64:{ + uint64_t tmp; + _msgpack_load64(uint64_t,n,&tmp); + push_fixed_value(_uint64, tmp); + } + case MSGPACK_CS_INT_8: + push_fixed_value(_int8, *(int8_t*)n); + case MSGPACK_CS_INT_16:{ + int16_t tmp; + _msgpack_load16(int16_t,n,&tmp); + push_fixed_value(_int16, tmp); + } + case MSGPACK_CS_INT_32:{ + int32_t tmp; + _msgpack_load32(int32_t,n,&tmp); + push_fixed_value(_int32, tmp); + } + case MSGPACK_CS_INT_64:{ + int64_t tmp; + _msgpack_load64(int64_t,n,&tmp); + push_fixed_value(_int64, tmp); + } + case MSGPACK_CS_FIXEXT_1: + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, 1+1, _ext_zero); + case MSGPACK_CS_FIXEXT_2: + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, 2+1, _ext_zero); + case MSGPACK_CS_FIXEXT_4: + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, 4+1, _ext_zero); + case MSGPACK_CS_FIXEXT_8: + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, 8+1, _ext_zero); + case MSGPACK_CS_FIXEXT_16: + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, 16+1, _ext_zero); + case MSGPACK_CS_STR_8: + again_fixed_trail_if_zero(MSGPACK_ACS_STR_VALUE, *(uint8_t*)n, _str_zero); + case MSGPACK_CS_BIN_8: + again_fixed_trail_if_zero(MSGPACK_ACS_BIN_VALUE, *(uint8_t*)n, _bin_zero); + case MSGPACK_CS_EXT_8: + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, (*(uint8_t*)n) + 1, _ext_zero); + case MSGPACK_CS_STR_16:{ + uint16_t tmp; + _msgpack_load16(uint16_t,n,&tmp); + again_fixed_trail_if_zero(MSGPACK_ACS_STR_VALUE, tmp, _str_zero); + } + case MSGPACK_CS_BIN_16:{ + uint16_t tmp; + _msgpack_load16(uint16_t,n,&tmp); + again_fixed_trail_if_zero(MSGPACK_ACS_BIN_VALUE, tmp, _bin_zero); + } + case MSGPACK_CS_EXT_16:{ + uint16_t tmp; + _msgpack_load16(uint16_t,n,&tmp); + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, tmp + 1, _ext_zero); + } + case MSGPACK_CS_STR_32:{ + uint32_t tmp; + _msgpack_load32(uint32_t,n,&tmp); + again_fixed_trail_if_zero(MSGPACK_ACS_STR_VALUE, tmp, _str_zero); + } + case MSGPACK_CS_BIN_32:{ + uint32_t tmp; + _msgpack_load32(uint32_t,n,&tmp); + again_fixed_trail_if_zero(MSGPACK_ACS_BIN_VALUE, tmp, _bin_zero); + } + case MSGPACK_CS_EXT_32:{ + uint32_t tmp; + _msgpack_load32(uint32_t,n,&tmp); + again_fixed_trail_if_zero(MSGPACK_ACS_EXT_VALUE, tmp + 1, _ext_zero); + } + case MSGPACK_ACS_STR_VALUE: + _str_zero: + push_variable_value(_str, data, n, trail); + case MSGPACK_ACS_BIN_VALUE: + _bin_zero: + push_variable_value(_bin, data, n, trail); + case MSGPACK_ACS_EXT_VALUE: + _ext_zero: + push_variable_value(_ext, data, n, trail); + + case MSGPACK_CS_ARRAY_16:{ + uint16_t tmp; + _msgpack_load16(uint16_t,n,&tmp); + start_container(_array, tmp, MSGPACK_CT_ARRAY_ITEM); + } + case MSGPACK_CS_ARRAY_32:{ + /* FIXME security guard */ + uint32_t tmp; + _msgpack_load32(uint32_t,n,&tmp); + start_container(_array, tmp, MSGPACK_CT_ARRAY_ITEM); + } + + case MSGPACK_CS_MAP_16:{ + uint16_t tmp; + _msgpack_load16(uint16_t,n,&tmp); + start_container(_map, tmp, MSGPACK_CT_MAP_KEY); + } + case MSGPACK_CS_MAP_32:{ + /* FIXME security guard */ + uint32_t tmp; + _msgpack_load32(uint32_t,n,&tmp); + start_container(_map, tmp, MSGPACK_CT_MAP_KEY); + } + + default: + goto _failed; + } + } + + _push: + if(top == 0) { goto _finish; } + c = &stack[top-1]; + switch(c->ct) { + case MSGPACK_CT_ARRAY_ITEM: + if(msgpack_unpack_callback(_array_item)(user, &c->obj, obj) < 0) { goto _failed; } + if(--c->count == 0) { + obj = c->obj; + --top; + /*printf("stack pop %d\n", top);*/ + goto _push; + } + goto _header_again; + case MSGPACK_CT_MAP_KEY: + c->map_key = obj; + c->ct = MSGPACK_CT_MAP_VALUE; + goto _header_again; + case MSGPACK_CT_MAP_VALUE: + if(msgpack_unpack_callback(_map_item)(user, &c->obj, c->map_key, obj) < 0) { goto _failed; } + if(--c->count == 0) { + obj = c->obj; + --top; + /*printf("stack pop %d\n", top);*/ + goto _push; + } + c->ct = MSGPACK_CT_MAP_KEY; + goto _header_again; + + default: + goto _failed; + } + + _header_again: + cs = MSGPACK_CS_HEADER; + ++p; + } while(p != pe); + goto _out; + + + _finish: + stack[0].obj = obj; + ++p; + ret = 1; + /*printf("-- finish --\n"); */ + goto _end; + + _failed: + /*printf("** FAILED **\n"); */ + ret = -1; + goto _end; + + _out: + ret = 0; + goto _end; + + _end: + ctx->cs = cs; + ctx->trail = trail; + ctx->top = top; + *off = (size_t)(p - (const unsigned char*)data); + + return ret; + } +} + +#undef msgpack_unpack_func +#undef msgpack_unpack_callback +#undef msgpack_unpack_struct +#undef msgpack_unpack_object +#undef msgpack_unpack_user + +#undef push_simple_value +#undef push_fixed_value +#undef push_variable_value +#undef again_fixed_trail +#undef again_fixed_trail_if_zero +#undef start_container + +#undef NEXT_CS + +#undef SWITCH_RANGE_BEGIN +#undef SWITCH_RANGE +#undef SWITCH_RANGE_DEFAULT +#undef SWITCH_RANGE_END diff --git a/include/msgpack/util.h b/include/msgpack/util.h new file mode 100644 index 0000000..959b56b --- /dev/null +++ b/include/msgpack/util.h @@ -0,0 +1,15 @@ +/* + * MessagePack for C utilities + * + * Copyright (C) 2014 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_UTIL_H +#define MSGPACK_UTIL_H + +#define MSGPACK_UNUSED(a) (void)(a) + +#endif /* MSGPACK_UTIL_H */ diff --git a/include/msgpack/version.h b/include/msgpack/version.h new file mode 100644 index 0000000..bd6605b --- /dev/null +++ b/include/msgpack/version.h @@ -0,0 +1,38 @@ +/* + * MessagePack for C version information + * + * Copyright (C) 2008-2009 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_VERSION_H +#define MSGPACK_VERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +MSGPACK_DLLEXPORT +const char* msgpack_version(void); +MSGPACK_DLLEXPORT +int msgpack_version_major(void); +MSGPACK_DLLEXPORT +int msgpack_version_minor(void); +MSGPACK_DLLEXPORT +int msgpack_version_revision(void); + +#include "version_master.h" + +#define MSGPACK_STR(v) #v +#define MSGPACK_VERSION_I(maj, min, rev) MSGPACK_STR(maj) "." MSGPACK_STR(min) "." MSGPACK_STR(rev) + +#define MSGPACK_VERSION MSGPACK_VERSION_I(MSGPACK_VERSION_MAJOR, MSGPACK_VERSION_MINOR, MSGPACK_VERSION_REVISION) + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/version.h */ + diff --git a/include/msgpack/version_master.h b/include/msgpack/version_master.h new file mode 100644 index 0000000..ec7555d --- /dev/null +++ b/include/msgpack/version_master.h @@ -0,0 +1,3 @@ +#define MSGPACK_VERSION_MAJOR 1 +#define MSGPACK_VERSION_MINOR 4 +#define MSGPACK_VERSION_REVISION 0 diff --git a/include/msgpack/vrefbuffer.h b/include/msgpack/vrefbuffer.h new file mode 100644 index 0000000..79682be --- /dev/null +++ b/include/msgpack/vrefbuffer.h @@ -0,0 +1,141 @@ +/* + * MessagePack for C zero-copy buffer implementation + * + * Copyright (C) 2008-2009 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_VREFBUFFER_H +#define MSGPACK_VREFBUFFER_H + +#include "zone.h" +#include + +#ifndef _WIN32 +#include +#else +struct iovec { + void *iov_base; + size_t iov_len; +}; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @defgroup msgpack_vrefbuffer Vectored Referencing buffer + * @ingroup msgpack_buffer + * @{ + */ + +struct msgpack_vrefbuffer_chunk; +typedef struct msgpack_vrefbuffer_chunk msgpack_vrefbuffer_chunk; + +typedef struct msgpack_vrefbuffer_inner_buffer { + size_t free; + char* ptr; + msgpack_vrefbuffer_chunk* head; +} msgpack_vrefbuffer_inner_buffer; + +typedef struct msgpack_vrefbuffer { + struct iovec* tail; + struct iovec* end; + struct iovec* array; + + size_t chunk_size; + size_t ref_size; + + msgpack_vrefbuffer_inner_buffer inner_buffer; +} msgpack_vrefbuffer; + + +#ifndef MSGPACK_VREFBUFFER_REF_SIZE +#define MSGPACK_VREFBUFFER_REF_SIZE 32 +#endif + +#ifndef MSGPACK_VREFBUFFER_CHUNK_SIZE +#define MSGPACK_VREFBUFFER_CHUNK_SIZE 8192 +#endif + +MSGPACK_DLLEXPORT +bool msgpack_vrefbuffer_init(msgpack_vrefbuffer* vbuf, + size_t ref_size, size_t chunk_size); +MSGPACK_DLLEXPORT +void msgpack_vrefbuffer_destroy(msgpack_vrefbuffer* vbuf); + +static inline msgpack_vrefbuffer* msgpack_vrefbuffer_new(size_t ref_size, size_t chunk_size); +static inline void msgpack_vrefbuffer_free(msgpack_vrefbuffer* vbuf); + +static inline int msgpack_vrefbuffer_write(void* data, const char* buf, size_t len); + +static inline const struct iovec* msgpack_vrefbuffer_vec(const msgpack_vrefbuffer* vref); +static inline size_t msgpack_vrefbuffer_veclen(const msgpack_vrefbuffer* vref); + +MSGPACK_DLLEXPORT +int msgpack_vrefbuffer_append_copy(msgpack_vrefbuffer* vbuf, + const char* buf, size_t len); + +MSGPACK_DLLEXPORT +int msgpack_vrefbuffer_append_ref(msgpack_vrefbuffer* vbuf, + const char* buf, size_t len); + +MSGPACK_DLLEXPORT +int msgpack_vrefbuffer_migrate(msgpack_vrefbuffer* vbuf, msgpack_vrefbuffer* to); + +MSGPACK_DLLEXPORT +void msgpack_vrefbuffer_clear(msgpack_vrefbuffer* vref); + +/** @} */ + + +static inline msgpack_vrefbuffer* msgpack_vrefbuffer_new(size_t ref_size, size_t chunk_size) +{ + msgpack_vrefbuffer* vbuf = (msgpack_vrefbuffer*)malloc(sizeof(msgpack_vrefbuffer)); + if (vbuf == NULL) return NULL; + if(!msgpack_vrefbuffer_init(vbuf, ref_size, chunk_size)) { + free(vbuf); + return NULL; + } + return vbuf; +} + +static inline void msgpack_vrefbuffer_free(msgpack_vrefbuffer* vbuf) +{ + if(vbuf == NULL) { return; } + msgpack_vrefbuffer_destroy(vbuf); + free(vbuf); +} + +static inline int msgpack_vrefbuffer_write(void* data, const char* buf, size_t len) +{ + msgpack_vrefbuffer* vbuf = (msgpack_vrefbuffer*)data; + + if(len < vbuf->ref_size) { + return msgpack_vrefbuffer_append_copy(vbuf, buf, len); + } else { + return msgpack_vrefbuffer_append_ref(vbuf, buf, len); + } +} + +static inline const struct iovec* msgpack_vrefbuffer_vec(const msgpack_vrefbuffer* vref) +{ + return vref->array; +} + +static inline size_t msgpack_vrefbuffer_veclen(const msgpack_vrefbuffer* vref) +{ + return (size_t)(vref->tail - vref->array); +} + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/vrefbuffer.h */ + diff --git a/include/msgpack/zbuffer.h b/include/msgpack/zbuffer.h new file mode 100644 index 0000000..e6f742b --- /dev/null +++ b/include/msgpack/zbuffer.h @@ -0,0 +1,200 @@ +/* + * MessagePack for C deflate buffer implementation + * + * Copyright (C) 2010 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_ZBUFFER_H +#define MSGPACK_ZBUFFER_H + +#include "sysdep.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @defgroup msgpack_zbuffer Compressed buffer + * @ingroup msgpack_buffer + * @{ + */ + +typedef struct msgpack_zbuffer { + z_stream stream; + char* data; + size_t init_size; +} msgpack_zbuffer; + +#ifndef MSGPACK_ZBUFFER_INIT_SIZE +#define MSGPACK_ZBUFFER_INIT_SIZE 8192 +#endif + +static inline bool msgpack_zbuffer_init( + msgpack_zbuffer* zbuf, int level, size_t init_size); +static inline void msgpack_zbuffer_destroy(msgpack_zbuffer* zbuf); + +static inline msgpack_zbuffer* msgpack_zbuffer_new(int level, size_t init_size); +static inline void msgpack_zbuffer_free(msgpack_zbuffer* zbuf); + +static inline char* msgpack_zbuffer_flush(msgpack_zbuffer* zbuf); + +static inline const char* msgpack_zbuffer_data(const msgpack_zbuffer* zbuf); +static inline size_t msgpack_zbuffer_size(const msgpack_zbuffer* zbuf); + +static inline bool msgpack_zbuffer_reset(msgpack_zbuffer* zbuf); +static inline void msgpack_zbuffer_reset_buffer(msgpack_zbuffer* zbuf); +static inline char* msgpack_zbuffer_release_buffer(msgpack_zbuffer* zbuf); + + +#ifndef MSGPACK_ZBUFFER_RESERVE_SIZE +#define MSGPACK_ZBUFFER_RESERVE_SIZE 512 +#endif + +static inline int msgpack_zbuffer_write(void* data, const char* buf, size_t len); + +static inline bool msgpack_zbuffer_expand(msgpack_zbuffer* zbuf); + + +static inline bool msgpack_zbuffer_init(msgpack_zbuffer* zbuf, + int level, size_t init_size) +{ + memset(zbuf, 0, sizeof(msgpack_zbuffer)); + zbuf->init_size = init_size; + if(deflateInit(&zbuf->stream, level) != Z_OK) { + free(zbuf->data); + return false; + } + return true; +} + +static inline void msgpack_zbuffer_destroy(msgpack_zbuffer* zbuf) +{ + deflateEnd(&zbuf->stream); + free(zbuf->data); +} + +static inline msgpack_zbuffer* msgpack_zbuffer_new(int level, size_t init_size) +{ + msgpack_zbuffer* zbuf = (msgpack_zbuffer*)malloc(sizeof(msgpack_zbuffer)); + if (zbuf == NULL) return NULL; + if(!msgpack_zbuffer_init(zbuf, level, init_size)) { + free(zbuf); + return NULL; + } + return zbuf; +} + +static inline void msgpack_zbuffer_free(msgpack_zbuffer* zbuf) +{ + if(zbuf == NULL) { return; } + msgpack_zbuffer_destroy(zbuf); + free(zbuf); +} + +static inline bool msgpack_zbuffer_expand(msgpack_zbuffer* zbuf) +{ + size_t used = (char*)zbuf->stream.next_out - zbuf->data; + size_t csize = used + zbuf->stream.avail_out; + size_t nsize = (csize == 0) ? zbuf->init_size : csize * 2; + + char* tmp = (char*)realloc(zbuf->data, nsize); + if(tmp == NULL) { + return false; + } + + zbuf->data = tmp; + zbuf->stream.next_out = (Bytef*)(tmp + used); + zbuf->stream.avail_out = nsize - used; + + return true; +} + +static inline int msgpack_zbuffer_write(void* data, const char* buf, size_t len) +{ + msgpack_zbuffer* zbuf = (msgpack_zbuffer*)data; + + zbuf->stream.next_in = (Bytef*)buf; + zbuf->stream.avail_in = len; + + while(zbuf->stream.avail_in > 0) { + if(zbuf->stream.avail_out < MSGPACK_ZBUFFER_RESERVE_SIZE) { + if(!msgpack_zbuffer_expand(zbuf)) { + return -1; + } + } + + if(deflate(&zbuf->stream, Z_NO_FLUSH) != Z_OK) { + return -1; + } + } + + return 0; +} + +static inline char* msgpack_zbuffer_flush(msgpack_zbuffer* zbuf) +{ + while(true) { + switch(deflate(&zbuf->stream, Z_FINISH)) { + case Z_STREAM_END: + return zbuf->data; + case Z_OK: + if(!msgpack_zbuffer_expand(zbuf)) { + return NULL; + } + break; + default: + return NULL; + } + } +} + +static inline const char* msgpack_zbuffer_data(const msgpack_zbuffer* zbuf) +{ + return zbuf->data; +} + +static inline size_t msgpack_zbuffer_size(const msgpack_zbuffer* zbuf) +{ + return (char*)zbuf->stream.next_out - zbuf->data; +} + +static inline void msgpack_zbuffer_reset_buffer(msgpack_zbuffer* zbuf) +{ + zbuf->stream.avail_out += (char*)zbuf->stream.next_out - zbuf->data; + zbuf->stream.next_out = (Bytef*)zbuf->data; +} + +static inline bool msgpack_zbuffer_reset(msgpack_zbuffer* zbuf) +{ + if(deflateReset(&zbuf->stream) != Z_OK) { + return false; + } + msgpack_zbuffer_reset_buffer(zbuf); + return true; +} + +static inline char* msgpack_zbuffer_release_buffer(msgpack_zbuffer* zbuf) +{ + char* tmp = zbuf->data; + zbuf->data = NULL; + zbuf->stream.next_out = NULL; + zbuf->stream.avail_out = 0; + return tmp; +} + +/** @} */ + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/zbuffer.h */ + diff --git a/include/msgpack/zone.h b/include/msgpack/zone.h new file mode 100644 index 0000000..55229d7 --- /dev/null +++ b/include/msgpack/zone.h @@ -0,0 +1,163 @@ +/* + * MessagePack for C memory pool implementation + * + * Copyright (C) 2008-2010 FURUHASHI Sadayuki + * + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef MSGPACK_ZONE_H +#define MSGPACK_ZONE_H + +#include "sysdep.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @defgroup msgpack_zone Memory zone + * @ingroup msgpack + * @{ + */ + +typedef struct msgpack_zone_finalizer { + void (*func)(void* data); + void* data; +} msgpack_zone_finalizer; + +typedef struct msgpack_zone_finalizer_array { + msgpack_zone_finalizer* tail; + msgpack_zone_finalizer* end; + msgpack_zone_finalizer* array; +} msgpack_zone_finalizer_array; + +struct msgpack_zone_chunk; +typedef struct msgpack_zone_chunk msgpack_zone_chunk; + +typedef struct msgpack_zone_chunk_list { + size_t free; + char* ptr; + msgpack_zone_chunk* head; +} msgpack_zone_chunk_list; + +typedef struct msgpack_zone { + msgpack_zone_chunk_list chunk_list; + msgpack_zone_finalizer_array finalizer_array; + size_t chunk_size; +} msgpack_zone; + +#ifndef MSGPACK_ZONE_CHUNK_SIZE +#define MSGPACK_ZONE_CHUNK_SIZE 8192 +#endif + +MSGPACK_DLLEXPORT +bool msgpack_zone_init(msgpack_zone* zone, size_t chunk_size); +MSGPACK_DLLEXPORT +void msgpack_zone_destroy(msgpack_zone* zone); + +MSGPACK_DLLEXPORT +msgpack_zone* msgpack_zone_new(size_t chunk_size); +MSGPACK_DLLEXPORT +void msgpack_zone_free(msgpack_zone* zone); + +static inline void* msgpack_zone_malloc(msgpack_zone* zone, size_t size); +static inline void* msgpack_zone_malloc_no_align(msgpack_zone* zone, size_t size); + +static inline bool msgpack_zone_push_finalizer(msgpack_zone* zone, + void (*func)(void* data), void* data); + +static inline void msgpack_zone_swap(msgpack_zone* a, msgpack_zone* b); + +MSGPACK_DLLEXPORT +bool msgpack_zone_is_empty(msgpack_zone* zone); + +MSGPACK_DLLEXPORT +void msgpack_zone_clear(msgpack_zone* zone); + +/** @} */ + + +#ifndef MSGPACK_ZONE_ALIGN +#define MSGPACK_ZONE_ALIGN sizeof(void*) +#endif + +MSGPACK_DLLEXPORT +void* msgpack_zone_malloc_expand(msgpack_zone* zone, size_t size); + +static inline void* msgpack_zone_malloc_no_align(msgpack_zone* zone, size_t size) +{ + char* ptr; + msgpack_zone_chunk_list* cl = &zone->chunk_list; + + if(zone->chunk_list.free < size) { + return msgpack_zone_malloc_expand(zone, size); + } + + ptr = cl->ptr; + cl->free -= size; + cl->ptr += size; + + return ptr; +} + +static inline void* msgpack_zone_malloc(msgpack_zone* zone, size_t size) +{ + char* aligned = + (char*)( + (size_t)( + zone->chunk_list.ptr + (MSGPACK_ZONE_ALIGN - 1) + ) / MSGPACK_ZONE_ALIGN * MSGPACK_ZONE_ALIGN + ); + size_t adjusted_size = size + (aligned - zone->chunk_list.ptr); + if(zone->chunk_list.free >= adjusted_size) { + zone->chunk_list.free -= adjusted_size; + zone->chunk_list.ptr += adjusted_size; + return aligned; + } + { + void* ptr = msgpack_zone_malloc_expand(zone, size + (MSGPACK_ZONE_ALIGN - 1)); + if (ptr) { + return (char*)((size_t)(ptr) / MSGPACK_ZONE_ALIGN * MSGPACK_ZONE_ALIGN); + } + } + return NULL; +} + + +bool msgpack_zone_push_finalizer_expand(msgpack_zone* zone, + void (*func)(void* data), void* data); + +static inline bool msgpack_zone_push_finalizer(msgpack_zone* zone, + void (*func)(void* data), void* data) +{ + msgpack_zone_finalizer_array* const fa = &zone->finalizer_array; + msgpack_zone_finalizer* fin = fa->tail; + + if(fin == fa->end) { + return msgpack_zone_push_finalizer_expand(zone, func, data); + } + + fin->func = func; + fin->data = data; + + ++fa->tail; + + return true; +} + +static inline void msgpack_zone_swap(msgpack_zone* a, msgpack_zone* b) +{ + msgpack_zone tmp = *a; + *a = *b; + *b = tmp; +} + + +#ifdef __cplusplus +} +#endif + +#endif /* msgpack/zone.h */ diff --git a/lib/Data/MessagePack.pm b/lib/Data/MessagePack.pm index 8b95beb..473035d 100644 --- a/lib/Data/MessagePack.pm +++ b/lib/Data/MessagePack.pm @@ -3,7 +3,8 @@ use strict; use warnings; use 5.008001; -our $VERSION = '1.00'; +our $VERSION = '1.02'; + sub true () { require Data::MessagePack::Boolean; no warnings 'once'; diff --git a/minil.toml b/minil.toml new file mode 100644 index 0000000..11a8584 --- /dev/null +++ b/minil.toml @@ -0,0 +1,9 @@ +name = "Data-MessagePack" +authority = "cpan:TOKUHIROM" +allow_pureperl = 1 +badges = ["travis"] +module_maker = "ModuleBuild" +tag_format = "perl-%v" + +[build] +build_class = "builder::MyBuilder" diff --git a/msgpack-c b/msgpack-c deleted file mode 160000 index 83a4b89..0000000 --- a/msgpack-c +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 83a4b89818d4ed3b84d69cbf36e782c641ffab53 diff --git a/t/05_preferred_int.t b/t/05_preferred_int.t index c1db9f3..5015414 100644 --- a/t/05_preferred_int.t +++ b/t/05_preferred_int.t @@ -2,6 +2,12 @@ use t::Util; use Test::More; use Data::MessagePack; use Data::Dumper; +use Config; + +# if use_quadmath is enabled, integer literal precision is different from non use_quadmath perl +use if defined $Config{usequadmath}, + 'Test::More', skip_all => 'quadmath is not support this test'; + no warnings; # shut up "Integer overflow in hexadecimal number" sub packit { @@ -36,7 +42,12 @@ sub pis_utf8 ($$$) { # is(Dumper(Data::MessagePack->unpack(Data::MessagePack->pack($_[0]))), Dumper($_[0])); } -my $is_win = $^O eq 'MSWin32'; +# NOTE +# Exponential notation of older Windows Perl(< 5.30.0) is different from other perl +# For example 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +# Older Windows Perl: 8.30767497365572e+034 <- leading zero +# Other Perl : 8.30767497365572e+34 +my $is_old_win = $^O eq 'MSWin32' && $] < 5.030; my @dat = ( '', 'c4 00', '0', '00', @@ -50,14 +61,14 @@ my @dat = ( ''.0xFFFFFF => 'ce 00 ff ff ff', ''.0xFFFFFFFF => 'ce ff ff ff ff', ''.0xFFFFFFFFF => 'c4 0b 36 38 37 31 39 34 37 36 37 33 35', - ''.0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF => $is_win ? + ''.0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF => $is_old_win ? qr{^(c4 15 38 2e 33 30 37 36 37 34 39 37 33 36 35 35 37 32 65 2b 30 33 34|c4 18 38 2e 33 30 37 36 37 34 39 37 33 36 35 35 37 32 34 32 31 65 2b 30 33 34)$} : qr{^(c4 14 38 2e 33 30 37 36 37 34 39 37 33 36 35 35 37 32 65 2b 33 34|c4 17 38 2e 33 30 37 36 37 34 39 37 33 36 35 35 37 32 34 32 31 65 2b 33 34)$}, '-'.0x8000000 => 'd2 f8 00 00 00', '-'.0x80000000 => 'd2 80 00 00 00', '-'.0x800000000 => 'c4 0c 2d 33 34 33 35 39 37 33 38 33 36 38', '-'.0x8000000000 => 'c4 0d 2d 35 34 39 37 35 35 38 31 33 38 38 38', - '-'.0x800000000000000000000000000000 => $is_win ? + '-'.0x800000000000000000000000000000 => $is_old_win ? qr{^(c4 16 2d 36 2e 36 34 36 31 33 39 39 37 38 39 32 34 35 38 65 2b 30 33 35|c4 19 2d 36 2e 36 34 36 31 33 39 39 37 38 39 32 34 35 37 39 33 36 65 2b 30 33 35)} : qr{^(c4 15 2d 36 2e 36 34 36 31 33 39 39 37 38 39 32 34 35 38 65 2b 33 35|c4 18 2d 36 2e 36 34 36 31 33 39 39 37 38 39 32 34 35 37 39 33 36 65 2b 33 35)}, {'0' => '1'}, '81 00 01', @@ -67,12 +78,12 @@ my @dat = ( my @dat_utf8 = ( '-', 'a1 2d', ''.0xFFFFFFFFF => 'ab 36 38 37 31 39 34 37 36 37 33 35', - ''.0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF => $is_win ? + ''.0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF => $is_old_win ? qr{^(b5 38 2e 33 30 37 36 37 34 39 37 33 36 35 35 37 32 65 2b 30 33 34|b8 38 2e 33 30 37 36 37 34 39 37 33 36 35 35 37 32 34 32 31 65 2b 30 33 34)$} : qr{^(b4 38 2e 33 30 37 36 37 34 39 37 33 36 35 35 37 32 65 2b 33 34|b7 38 2e 33 30 37 36 37 34 39 37 33 36 35 35 37 32 34 32 31 65 2b 33 34)$}, '-'.0x800000000 => 'ac 2d 33 34 33 35 39 37 33 38 33 36 38', '-'.0x8000000000 => 'ad 2d 35 34 39 37 35 35 38 31 33 38 38 38', - '-'.0x800000000000000000000000000000 => $is_win ? + '-'.0x800000000000000000000000000000 => $is_old_win ? qr{^(b6 2d 36 2e 36 34 36 31 33 39 39 37 38 39 32 34 35 38 65 2b 30 33 35|b9 2d 36 2e 36 34 36 31 33 39 39 37 38 39 32 34 35 37 39 33 36 65 2b 30 33 35)} : qr{^(b5 2d 36 2e 36 34 36 31 33 39 39 37 38 39 32 34 35 38 65 2b 33 35|b8 2d 36 2e 36 34 36 31 33 39 39 37 38 39 32 34 35 37 39 33 36 65 2b 33 35)}, {'abc' => '1'}, '81 a3 61 62 63 01', diff --git a/t/23-empty-key.t b/t/23-empty-key.t index 8a60f33..638a6d4 100644 --- a/t/23-empty-key.t +++ b/t/23-empty-key.t @@ -6,8 +6,6 @@ use warnings; use Test::More tests => 3; -local $TODO = "not yet"; - my @orig = ( ["ZZZ",{"10000050C2400102" => {"1332129147" => ["\x01\x07\x07 \xf7","2.48292"]}}], ["ZZZ",{"" => {}}], @@ -44,6 +42,7 @@ if ($up->is_finished) { push(@res, $up->data); + local $TODO = 'not yet'; is_deeply(\@res, \@orig) or diag(explain([\@res, \@orig])); } else diff --git a/t/std/cases.mpac b/t/std/cases.mpac new file mode 100644 index 0000000000000000000000000000000000000000..5ec08c6a9af42d9568eb429a209a639616e94711 GIT binary patch literal 213 zcmXYp!4<+V3`3R4n8lOSY|v~#CV>aXw2-v7Qc6c)17ihrkbe}**V_dHM&J(DgGLop zU?R;l%8FI9$y_sy>V|HFdDW~{neAn-roN|Wd+OcH160;F91fo! '$ENV{LEAK_TEST} is required' unless $ENV{LEAK_TEST}; +plan skip_all => 'need /proc filesystem' unless -d "/proc/$$"; my $input = [ { diff --git a/xt/leaks/stream.t b/xt/leaks/stream.t index 7765d73..4b76418 100644 --- a/xt/leaks/stream.t +++ b/xt/leaks/stream.t @@ -5,6 +5,7 @@ use Data::MessagePack; use Devel::Peek; plan skip_all => '$ENV{LEAK_TEST} is required' unless $ENV{LEAK_TEST}; +plan skip_all => 'need /proc filesystem' unless -d "/proc/$$"; my $input = [ {