amino  1.0-beta2
Lightweight Robot Utility Library
amino.h
Go to the documentation of this file.
1 /* -*- mode: C; c-basic-offset: 4; -*- */
2 /* ex: set shiftwidth=4 tabstop=4 expandtab: */
3 /*
4  * Copyright (c) 2010-2011, Georgia Tech Research Corporation
5  * All rights reserved.
6  *
7  * Author(s): Neil T. Dantam <ntd@gatech.edu>
8  * Georgia Tech Humanoid Robotics Lab
9  * Under Direction of Prof. Mike Stilman <mstilman@cc.gatech.edu>
10  *
11  *
12  * This file is provided under the following "BSD-style" License:
13  *
14  *
15  * Redistribution and use in source and binary forms, with or
16  * without modification, are permitted provided that the following
17  * conditions are met:
18  *
19  * * Redistributions of source code must retain the above copyright
20  * notice, this list of conditions and the following disclaimer.
21  *
22  * * Redistributions in binary form must reproduce the above
23  * copyright notice, this list of conditions and the following
24  * disclaimer in the documentation and/or other materials provided
25  * with the distribution.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
28  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
29  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
30  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
31  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
32  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
35  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
36  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
38  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39  * POSSIBILITY OF SUCH DAMAGE.
40  *
41  */
42 
43 #ifndef AMINO_H
44 #define AMINO_H
45 
57 // include everything we'll typically need
58 #ifdef __cplusplus
59 #include <cstdlib>
60 #include <cstring>
61 #include <cmath>
62 #include <cstdio>
63 #include <cassert>
64 #include <ctime>
65 #include <stdint.h>
66 #include <iostream>
67 #include <vector>
68 #include <map>
69 #include <queue>
70 #include <stack>
71 #include <string>
72 #else
73 #include <assert.h>
74 #include <stdlib.h>
75 #include <stdint.h>
76 #include <string.h>
77 #include <stdio.h>
78 #include <math.h>
79 #include <errno.h>
80 #include <stdarg.h>
81 #endif //__cplusplus
82 
83 #include "amino/cblas_order.h"
84 
85 
86 #include <time.h>
87 
88 // for C symbols
89 #ifdef __cplusplus
90 #define AA_API extern "C"
91 #define AA_EXTERN extern "C"
92 #define AA_RESTRICT
93 #else
95 #define AA_API
97 #define AA_EXTERN extern
99 #define AA_RESTRICT restrict
100 #endif //__cplusplus
101 
103 #define AA_DEPRECATED __attribute__ ((deprecated))
104 
105 
106 #if __has_attribute(__fallthrough__)
108 #define AA_FALLTHROUGH __attribute__((__fallthrough__))
109 #else
111 #define AA_FALLTHROUGH do {} while (0) /* fallthrough */
112 #endif
113 
114 
116 #define AA_IBILLION 1000000000
118 #define AA_IMILLION 1000000
119 
121 #define AA_QUOTE(X) (#X)
122 
124 #define AA_ENUM_SYM_CASE( res, sym ) case sym: (res) = #sym; break;
125 
127 #define AA_SWAP(a,b) \
128  { \
129  const __typeof__(a) aa_$_tmpa = (a); \
130  const __typeof__(b) aa_$_tmpb = (b); \
131  (a) = aa_$_tmpb; \
132  (b) = aa_$_tmpa; \
133  }
134 
135 
136 // include our own headers
137 #include "amino/mem.h"
138 #include "amino/math.h"
139 #include "amino/la.h"
140 #include "amino/tf.h"
141 #include "amino/lapack.h"
142 #include "amino/clapack.h"
143 #include "amino/time.h"
144 #include "amino/debug.h"
145 #include "amino/plot.h"
146 #include "amino/kin.h"
147 #include "amino/type.h"
148 #include "amino/endconv.h"
149 #include "amino/unit.h"
150 #include "amino/validate.h"
151 #include "amino/io.h"
152 #include "amino/cv.h"
153 #include "amino/const.h"
154 #include "amino/heap.h"
155 
156 
157 #endif //AMINO_H
Routines to convert numbers to different endian formats.
Simple Heap / Heapsort.
Linear algebra routines.
Numerical routines.
Memory Management.
Include this file for low-level operations for SE(3) orientations and transformations.
Validation of data.