diff options
author | David Robillard <d@drobilla.net> | 2006-09-13 14:59:22 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2006-09-13 14:59:22 +0000 |
commit | 5525b33b79b7a920cf374704e67fc6b16fe5f77c (patch) | |
tree | 5dd4aee603d4673c259d69bb1780872af68500de /src/common/util/LibloAtom.h | |
parent | e5675ebfeb93175e16762d0a078bd51d15d05f63 (diff) | |
download | ingen-5525b33b79b7a920cf374704e67fc6b16fe5f77c.tar.gz ingen-5525b33b79b7a920cf374704e67fc6b16fe5f77c.tar.bz2 ingen-5525b33b79b7a920cf374704e67fc6b16fe5f77c.zip |
Added missing files
git-svn-id: http://svn.drobilla.net/lad/ingen@132 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/common/util/LibloAtom.h')
-rw-r--r-- | src/common/util/LibloAtom.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/common/util/LibloAtom.h b/src/common/util/LibloAtom.h new file mode 100644 index 00000000..02a469fe --- /dev/null +++ b/src/common/util/LibloAtom.h @@ -0,0 +1,73 @@ +/* This file is part of Ingen. Copyright (C) 2006 Dave Robillard. + * + * Ingen is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * Ingen is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBLO_ATOM_H +#define LIBLO_ATOM_H + +#include <lo/lo.h> +#include "util/Atom.h" + + +/** Support for serializing an Atom to/from liblo messages. + * + * (Here to prevent a unnecessary liblo dependency on Atom). + */ +class LibloAtom { +public: + static void lo_message_add_atom(lo_message m, const Atom& atom) { + switch (atom.type()) { + //case NIL: + // (see below) + //break; + case Atom::INT: + lo_message_add_int32(m, atom.get_int32()); + break; + case Atom::FLOAT: + lo_message_add_float(m, atom.get_float()); + break; + case Atom::STRING: + lo_message_add_string(m, atom.get_string()); + break; + case Atom::BLOB: + // FIXME: is this okay? what does liblo do? + lo_message_add_blob(m, const_cast<void*>(atom.get_blob())); + break; + default: // This catches Atom::Type::NIL too + lo_message_add_nil(m); + break; + } + } + + static Atom lo_arg_to_atom(char type, lo_arg* arg) { + switch (type) { + case 'i': + return Atom(arg->i); + case 'f': + return Atom(arg->f); + case 's': + return Atom(&arg->s); + //case 'b' + // FIXME: How to get a blob from a lo_arg? + //return Atom(arg->b); + default: + return Atom(); + } + } + +}; + + +#endif // LIBLO_ATOM_H |