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 <bketelsen@gmail.com>", + "David Steinbrunner <dsteinbrunner@pobox.com>", + "FUJI Goro (gfx) <gfuji@cpan.org>", + "FURUHASHI Sadayuki <frsyuki@users.sourceforge.jp>", + "Fuji Goro <fuji.goro@dena.jp>", + "Fuji, Goro <g.psy.va@gmail.com>", + "Fuji, Goro <goro-fuji@cookpad.com>", + "Hideyuki TAKEI <takehide22@gmail.com>", + "Hideyuki Tanaka <hideyuki@hideyuki-vbox.(none)>", + "Hideyuki Tanaka <tanaka.hideyuki@gmail.com>", + "Hideyuki Tanaka <tanakh@tanakh-VirtualBox.(none)>", + "Hideyuki Tanaka <tanakh@tanakh-desktop.(none)>", + "INADA Naoki <songofacandy@gmail.com>", + "Kazuho Oku <kazuhooku@gmail.com>", + "Kazuki Ohta <kazuki.ohta@gmail.com>", + "Kazuki Ohta <kzk@il.is.s.u-tokyo.ac.jp>", + "Kazuki Oikawa <k@oikw.org>", + "Keiji Muraishi <keiji.muraishi@gmail.com>", + "Masahiro Nakagawa <repeatedly@gmail.com>", + "Moriyoshi Koizumi <mozo@mozo.jp>", + "Muga Nishizawa <muga.nishizawa@gmail.com>", + "Muga Nishizawa <muga@f11vm.(none)>", + "Naoki INADA <inada-n@eagle>", + "Naoki INADA <inada-n@gear>", + "Naoki INADA <inada-n@klab.jp>", + "Naoki INADA <inada-n@koala>", + "Naoki INADA <omoikane@sourceforge.jp>", + "Nicolas Despres <nicolas.despres@gmail.com>", + "Nikolay Mishin <mi@ya.ru>", + "Perlover <perlover@perlover.com>", + "Reini Urban <rurban@cpanel.net>", + "Robin Smidsrød <robin@smidsrod.no>", + "Shohei YOSHIDA <shohei.yoshida@dena.com>", + "Shohei YOSHIDA <syohex@gmail.com>", + "Shoichi Kaji <skaji@cpan.org>", + "Taro L. Saito <leo@xerial.org>", + "Tokuhiro Matsuno <tokuhirom@gmail.com>", + "UENISHI Kota <kuenishi+github@gmail.com>", + "UENISHI Kota <kuenishi@gmail.com>", + "Vasily Titskiy <Vasiliy.Titskiy@bioscrypt.com>", + "Vincent de Phily <vincent.dephily@gmail.com>", + "Watabiki Naoya <watabiki.naoya@gmail.com>", + "Yuto Hayamizu <y.hayamizu@gmail.com>", + "advect <advect@gmail.com>", + "cho45 <cho45@lowreal.net>", + "egtra <valp_ab@yahoo.co.jp>", + "firewood <karamaki@gmail.com>", + "frsyuki (none) <frsyuki@vcore.>", + "frsyuki <frsyuki@5a5092ae-2292-43ba-b2d5-dcab9c1a2731>", + "frsyuki <frsyuki@vcore.(none)>", + "gfx <gfx@gfx-desktop.(none)>", + "inada-n <inada-n@hornet.(none)>", + "inada-n <inada-n@sag16.klab.org>", + "inada-n <omoikane@users.sourceforge.jp>", + "makamaka <makamaka.donzoko@gmail.com>", + "moaikids <moaikids@10.0.2.1>", + "mzp <mzpppp@gmail.com>", + "tailhook <pc@gafol.net>", + "takeshita <takeshita@geishatokyo.com>", + "tokuhirom <tokuhirom@users.sourceforge.jp>", + "xanxys <xanxys@gmail.com>" + ], + "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 c796dd7..0000000 --- a/Makefile.PL +++ /dev/null @@ -1,156 +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_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 <<NOT_SUPPORT_C99; - -This distribution requires a C99 compiler, but yours seems not to support C99. -Instead of XS, configure PP version. - -NOT_SUPPORT_C99 - - } -} - -if(!$use_xs) { - print "configure PP version\n\n"; - requires 'Math::BigInt' => 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' => [<msgpack-c/include/msgpack/pack*.h>, - <msgpack-c/include/msgpack/unpack*.h>, - 'msgpack-c/include/msgpack/sysdep.h', - 'msgpack-c/include/msgpack/predef.h'], - '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(<msgpack-c/test/*.mpac>) { - 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 <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 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 - <http://msgpack.org/> 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 @@ +[](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 <stdio.h> + +#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 <stdio.h> + +#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 <stdlib.h> + +#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 <limits.h> +#include <string.h> + +#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 <msgpack/predef/language.h> +#include <msgpack/predef/architecture.h> +#include <msgpack/predef/compiler.h> +#include <msgpack/predef/library.h> +#include <msgpack/predef/os.h> +#include <msgpack/predef/other.h> +#include <msgpack/predef/platform.h> + +#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 <msgpack/predef/architecture/alpha.h> +#include <msgpack/predef/architecture/arm.h> +#include <msgpack/predef/architecture/blackfin.h> +#include <msgpack/predef/architecture/convex.h> +#include <msgpack/predef/architecture/ia64.h> +#include <msgpack/predef/architecture/m68k.h> +#include <msgpack/predef/architecture/mips.h> +#include <msgpack/predef/architecture/parisc.h> +#include <msgpack/predef/architecture/ppc.h> +#include <msgpack/predef/architecture/pyramid.h> +#include <msgpack/predef/architecture/rs6k.h> +#include <msgpack/predef/architecture/sparc.h> +#include <msgpack/predef/architecture/superh.h> +#include <msgpack/predef/architecture/sys370.h> +#include <msgpack/predef/architecture/sys390.h> +#include <msgpack/predef/architecture/x86.h> +#include <msgpack/predef/architecture/z.h> +/*#include <msgpack/predef/architecture/.h>*/ + +#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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/architecture/x86/32.h> +#include <msgpack/predef/architecture/x86/64.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_X86_32,MSGPACK_ARCH_X86_32_NAME) + +#include <msgpack/predef/architecture/x86.h> + +#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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_X86_64,MSGPACK_ARCH_X86_64_NAME) + +#include <msgpack/predef/architecture/x86.h> + +#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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/compiler/borland.h> +#include <msgpack/predef/compiler/clang.h> +#include <msgpack/predef/compiler/comeau.h> +#include <msgpack/predef/compiler/compaq.h> +#include <msgpack/predef/compiler/diab.h> +#include <msgpack/predef/compiler/digitalmars.h> +#include <msgpack/predef/compiler/dignus.h> +#include <msgpack/predef/compiler/edg.h> +#include <msgpack/predef/compiler/ekopath.h> +#include <msgpack/predef/compiler/gcc_xml.h> +#include <msgpack/predef/compiler/gcc.h> +#include <msgpack/predef/compiler/greenhills.h> +#include <msgpack/predef/compiler/hp_acc.h> +#include <msgpack/predef/compiler/iar.h> +#include <msgpack/predef/compiler/ibm.h> +#include <msgpack/predef/compiler/intel.h> +#include <msgpack/predef/compiler/kai.h> +#include <msgpack/predef/compiler/llvm.h> +#include <msgpack/predef/compiler/metaware.h> +#include <msgpack/predef/compiler/metrowerks.h> +#include <msgpack/predef/compiler/microtec.h> +#include <msgpack/predef/compiler/mpw.h> +#include <msgpack/predef/compiler/palm.h> +#include <msgpack/predef/compiler/pgi.h> +#include <msgpack/predef/compiler/sgi_mipspro.h> +#include <msgpack/predef/compiler/sunpro.h> +#include <msgpack/predef/compiler/tendra.h> +#include <msgpack/predef/compiler/visualc.h> +#include <msgpack/predef/compiler/watcom.h> + +#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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_BORLAND_NAME "Borland C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_BORLAND,MSGPACK_COMP_BORLAND_NAME) + +#ifdef MSGPACK_COMP_BORLAND_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_CLANG_NAME "Clang" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_CLANG,MSGPACK_COMP_CLANG_NAME) + +#ifdef MSGPACK_COMP_CLANG_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +#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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_COMO_NAME "Comeau C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_COMO,MSGPACK_COMP_COMO_NAME) + +#ifdef MSGPACK_COMP_COMO_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_DEC_NAME "Compaq C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_DEC,MSGPACK_COMP_DEC_NAME) + +#ifdef MSGPACK_COMP_DEC_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_DIAB_NAME "Diab C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_DIAB,MSGPACK_COMP_DIAB_NAME) + +#ifdef MSGPACK_COMP_DIAB_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_DMC_NAME "Digital Mars" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_DMC,MSGPACK_COMP_DMC_NAME) + +#ifdef MSGPACK_COMP_DMC_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_SYSC_NAME "Dignus Systems/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_SYSC,MSGPACK_COMP_SYSC_NAME) + +#ifdef MSGPACK_COMP_SYSC_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_EDG_NAME "EDG C++ Frontend" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_EDG,MSGPACK_COMP_EDG_NAME) + +#ifdef MSGPACK_COMP_EDG_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_PATH_NAME "EKOpath" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_PATH,MSGPACK_COMP_PATH_NAME) + +#ifdef MSGPACK_COMP_PATH_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/compiler/clang.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_GNUC_NAME "Gnu GCC C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_GNUC,MSGPACK_COMP_GNUC_NAME) + +#ifdef MSGPACK_COMP_GNUC_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_GCCXML_NAME "GCC XML" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_GCCXML,MSGPACK_COMP_GCCXML_NAME) + +#ifdef MSGPACK_COMP_GCCXML_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_GHS_NAME "Green Hills C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_GHS,MSGPACK_COMP_GHS_NAME) + +#ifdef MSGPACK_COMP_GHS_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_HPACC_NAME "HP aC++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_HPACC,MSGPACK_COMP_HPACC_NAME) + +#ifdef MSGPACK_COMP_HPACC_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_IAR_NAME "IAR C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_IAR,MSGPACK_COMP_IAR_NAME) + +#ifdef MSGPACK_COMP_IAR_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_IBM_NAME "IBM XL C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_IBM,MSGPACK_COMP_IBM_NAME) + +#ifdef MSGPACK_COMP_IBM_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_INTEL_NAME "Intel C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_INTEL,MSGPACK_COMP_INTEL_NAME) + +#ifdef MSGPACK_COMP_INTEL_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_KCC_NAME "Kai C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_KCC,MSGPACK_COMP_KCC_NAME) + +#ifdef MSGPACK_COMP_KCC_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/compiler/clang.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_LLVM_NAME "LLVM" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_LLVM,MSGPACK_COMP_LLVM_NAME) + +#ifdef MSGPACK_COMP_LLVM_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_HIGHC_NAME "MetaWare High C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_HIGHC,MSGPACK_COMP_HIGHC_NAME) + +#ifdef MSGPACK_COMP_HIGHC_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_MWERKS_NAME "Metrowerks CodeWarrior" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MWERKS,MSGPACK_COMP_MWERKS_NAME) + +#ifdef MSGPACK_COMP_MWERKS_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_MRI_NAME "Microtec C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MRI,MSGPACK_COMP_MRI_NAME) + +#ifdef MSGPACK_COMP_MRI_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_MPW_NAME "MPW C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MPW,MSGPACK_COMP_MPW_NAME) + +#ifdef MSGPACK_COMP_MPW_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_PALM_NAME "Palm C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_PALM,MSGPACK_COMP_PALM_NAME) + +#ifdef MSGPACK_COMP_PALM_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_PGI_NAME "Portland Group C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_PGI,MSGPACK_COMP_PGI_NAME) + +#ifdef MSGPACK_COMP_PGI_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_SGI_NAME "SGI MIPSpro" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_SGI,MSGPACK_COMP_SGI_NAME) + +#ifdef MSGPACK_COMP_SGI_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_SUNPRO_NAME "Sun Studio" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_SUNPRO,MSGPACK_COMP_SUNPRO_NAME) + +#ifdef MSGPACK_COMP_SUNPRO_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_TENDRA_NAME "TenDRA C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_TENDRA,MSGPACK_COMP_TENDRA_NAME) + +#ifdef MSGPACK_COMP_TENDRA_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/compiler/clang.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_MSVC_NAME "Microsoft Visual C/C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_MSVC,MSGPACK_COMP_MSVC_NAME) + +#ifdef MSGPACK_COMP_MSVC_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/comp_detected.h> +#endif + +#define MSGPACK_COMP_WATCOM_NAME "Watcom C++" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_WATCOM,MSGPACK_COMP_WATCOM_NAME) + +#ifdef MSGPACK_COMP_WATCOM_EMULATED +#include <msgpack/predef/detail/test.h> +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 <cassert> +#else +#include <assert.h> +#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 <exception> +#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 <msgpack/predef/other/endian.h> + +#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 <msgpack/predef/language/stdc.h> +#include <msgpack/predef/language/stdcpp.h> +#include <msgpack/predef/language/objc.h> + +#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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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/detail/test.h> +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/detail/test.h> +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 <msgpack/predef/library/c.h> +#include <msgpack/predef/library/std.h> + +#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 <msgpack/predef/library/c/_prefix.h> + +#include <msgpack/predef/library/c/gnu.h> +#include <msgpack/predef/library/c/uc.h> +#include <msgpack/predef/library/c/vms.h> +#include <msgpack/predef/library/c/zos.h> + +#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 <msgpack/predef/detail/_cassert.h> + +#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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +#include <msgpack/predef/library/c/_prefix.h> + +#if defined(__STDC__) +#include <stddef.h> +#elif defined(__cplusplus) +#include <cstddef> +#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/detail/test.h> +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 <msgpack/predef/library/c/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/c/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/c/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/library/std/cxx.h> +#include <msgpack/predef/library/std/dinkumware.h> +#include <msgpack/predef/library/std/libcomo.h> +#include <msgpack/predef/library/std/modena.h> +#include <msgpack/predef/library/std/msl.h> +#include <msgpack/predef/library/std/roguewave.h> +#include <msgpack/predef/library/std/sgi.h> +#include <msgpack/predef/library/std/stdcpp3.h> +#include <msgpack/predef/library/std/stlport.h> +#include <msgpack/predef/library/std/vacpp.h> + +#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 <exception>. Boost uses <utility> but as far +as I can tell (RR) it's not a stand-alone header in most +implementations. Using <exception> 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 <msgpack/predef/detail/_exception.h> + +#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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/library/std/_prefix.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/detail/test.h> + +#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 <msgpack/predef/os/aix.h> +#include <msgpack/predef/os/amigaos.h> +#include <msgpack/predef/os/android.h> +#include <msgpack/predef/os/beos.h> +#include <msgpack/predef/os/bsd.h> +#include <msgpack/predef/os/cygwin.h> +#include <msgpack/predef/os/haiku.h> +#include <msgpack/predef/os/hpux.h> +#include <msgpack/predef/os/irix.h> +#include <msgpack/predef/os/ios.h> +#include <msgpack/predef/os/linux.h> +#include <msgpack/predef/os/macos.h> +#include <msgpack/predef/os/os400.h> +#include <msgpack/predef/os/qnxnto.h> +#include <msgpack/predef/os/solaris.h> +#include <msgpack/predef/os/unix.h> +#include <msgpack/predef/os/vms.h> +#include <msgpack/predef/os/windows.h> + +#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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_AIX_NAME "IBM AIX" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_AMIGAOS_NAME "AmigaOS" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_ANDROID_NAME "Android" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_BEOS_NAME "BeOS" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/os/macos.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/os/bsd/bsdi.h> +#include <msgpack/predef/os/bsd/dragonfly.h> +#include <msgpack/predef/os/bsd/free.h> +#include <msgpack/predef/os/bsd/open.h> +#include <msgpack/predef/os/bsd/net.h> + +#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 <sys/param.h> +# 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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_BSD_NAME "BSD" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/os/bsd.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_BSD_BSDI_NAME "BSDi BSD/OS" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/os/bsd.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_BSD_DRAGONFLY_NAME "DragonFly BSD" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/os/bsd.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_BSD_FREE_NAME "Free BSD" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/os/bsd.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_BSD_NET_NAME "DragonFly BSD" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/os/bsd.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_BSD_OPEN_NAME "OpenBSD" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_CYGWIN_NAME "Cygwin" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_HAIKU_NAME "Haiku" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_HPUX_NAME "HP-UX" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_IOS_NAME "iOS" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_IRIX_NAME "IRIX" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_LINUX_NAME "Linux" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/os/ios.h> + +#include <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_MACOS_NAME "Mac OS" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_OS400_NAME "IBM OS/400" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_QNX_NAME "QNX" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_SOLARIS_NAME "Solaris" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_VMS_NAME "VMS" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/os_detected.h> +#endif + +#define MSGPACK_OS_WINDOWS_NAME "Microsoft Windows" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/other/endian.h> +/*#include <msgpack/predef/other/.h>*/ + +#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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> +#include <msgpack/predef/library/c/gnu.h> +#include <msgpack/predef/os/macos.h> +#include <msgpack/predef/os/bsd.h> +#include <msgpack/predef/os/android.h> + +/*` +[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 <endian.h> +# else +# if MSGPACK_OS_MACOS +# include <machine/endian.h> +# else +# if MSGPACK_OS_BSD +# if MSGPACK_OS_BSD_OPEN +# include <machine/endian.h> +# else +# include <sys/endian.h> +# 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 <msgpack/predef/architecture.h> +# 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 <msgpack/predef/os/windows.h> +# 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/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ENDIAN_BIG_BYTE,MSGPACK_ENDIAN_BIG_BYTE_NAME) + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ENDIAN_BIG_WORD,MSGPACK_ENDIAN_BIG_WORD_NAME) + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ENDIAN_LITTLE_BYTE,MSGPACK_ENDIAN_LITTLE_BYTE_NAME) + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/platform/mingw.h> +#include <msgpack/predef/platform/windows_desktop.h> +#include <msgpack/predef/platform/windows_store.h> +#include <msgpack/predef/platform/windows_phone.h> +#include <msgpack/predef/platform/windows_runtime.h> +/*#include <msgpack/predef/platform/.h>*/ + +#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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> + +/*` +[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 <msgpack/predef/detail/platform_detected.h> +#endif + +#define MSGPACK_PLAT_MINGW_NAME "MinGW" + +#include <msgpack/predef/detail/test.h> +MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_PLAT_MINGW,MSGPACK_PLAT_MINGW_NAME) + +#ifdef MSGPACK_PLAT_MINGW_EMULATED +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> +#include <msgpack/predef/os/windows.h> + +/*` +[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 <msgpack/predef/detail/platform_detected.h> +#endif + +#define MSGPACK_PLAT_WINDOWS_DESKTOP_NAME "Windows Desktop" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> +#include <msgpack/predef/os/windows.h> + +/*` +[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 <msgpack/predef/detail/platform_detected.h> +#endif + +#define MSGPACK_PLAT_WINDOWS_PHONE_NAME "Windows Phone" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> +#include <msgpack/predef/os/windows.h> + +/*` +[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 <msgpack/predef/detail/platform_detected.h> +#endif + +#define MSGPACK_PLAT_WINDOWS_RUNTIME_NAME "Windows Runtime" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> +#include <msgpack/predef/make.h> +#include <msgpack/predef/os/windows.h> + +/*` +[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 <msgpack/predef/detail/platform_detected.h> +#endif + +#define MSGPACK_PLAT_WINDOWS_STORE_NAME "Windows Store" + +#include <msgpack/predef/detail/test.h> +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 <msgpack/predef/version_number.h> + +#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 <stdlib.h> +#include <string.h> + +#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 <msgpack/predef.h> + +#include <stdlib.h> +#include <stddef.h> +#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 <stdint.h> +#else +# include <stdint.h> +# include <stdbool.h> +#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 <windows.h> + 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<T>::min,max */ +# ifdef max +# undef max +# endif +# ifdef min +# undef min +# endif +# endif + +#else /* _*/ + +#include <arpa/inet.h> /* __BYTE_ORDER */ +# if defined(linux) +# include <byteswap.h> +# 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 <stdbool.h> +# 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 <string.h> + +#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 <stdlib.h> +#include <string.h> +#include <assert.h> +#include <stdio.h> + +#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 <stdlib.h> + +#ifndef _WIN32 +#include <sys/uio.h> +#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 <stdlib.h> +#include <string.h> +#include <zlib.h> + +#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 9eb6f62..473035d 100644 --- a/lib/Data/MessagePack.pm +++ b/lib/Data/MessagePack.pm @@ -3,7 +3,7 @@ use strict; use warnings; use 5.008001; -our $VERSION = '1.00'; +our $VERSION = '1.02'; sub true () { require Data::MessagePack::Boolean; @@ -36,7 +36,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 +49,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/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 cabd8a8..0000000 --- a/msgpack-c +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cabd8a8a038c78e569db06d2f3f812da28191cf4 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<scalar(@dat); ) { pis $dat[$i++], $dat[$i++]; @@ -97,3 +108,6 @@ for (my $i=0; $i<scalar(@dat); ) { for (my $i=0; $i<scalar(@dat_utf8); ) { pis_utf8 $dat_utf8[$i++], $dat_utf8[$i++]; } + +pis_float32 1.0, 'ca 3f 80 00 00'; + 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/25_single_float.t b/t/25_single_float.t new file mode 100644 index 0000000..c20299f --- /dev/null +++ b/t/25_single_float.t @@ -0,0 +1,20 @@ +#!perl +use strict; +use Config; +use if $Config{nvsize} > 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/t/std/cases.mpac b/t/std/cases.mpac new file mode 100644 index 0000000..5ec08c6 Binary files /dev/null and b/t/std/cases.mpac differ diff --git a/t/std/cases_compact.mpac b/t/std/cases_compact.mpac new file mode 100644 index 0000000..8812442 Binary files /dev/null and b/t/std/cases_compact.mpac differ 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; 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 diff --git a/xt/leaks/normal.t b/xt/leaks/normal.t index 370b23e..d7965f5 100644 --- a/xt/leaks/normal.t +++ b/xt/leaks/normal.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 = [ { 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 = [ {