mirror of
https://bitbucket.org/cosmicvoids/vide_public.git
synced 2025-07-12 02:53:05 +00:00
Imported rest of libSDF / libsw. Removed dependency on preinstalled flex/bison in libdsf
This commit is contained in:
parent
a611d77c5d
commit
9e3ab3b045
22 changed files with 2364 additions and 2410 deletions
74
external/libsdf/include/libsdf/keycvt.h
vendored
Normal file
74
external/libsdf/include/libsdf/keycvt.h
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
/* Functions defined in keycvt.c. This will go in the library, eventually */
|
||||
|
||||
#ifndef KeyUTiLsDOTh
|
||||
#define KeyUTiLsDOTh
|
||||
|
||||
#include "key.h"
|
||||
#define MAXNDIMKU 5
|
||||
|
||||
/* Use these as the 'order' argument in CellBBFromKey and GenerateKeys */
|
||||
#define MORTON_ORDER 1
|
||||
#define PH_ORDER 2
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef struct {
|
||||
int ndim;
|
||||
/* Store rmin and the size. There are lots of choices. Some might
|
||||
be better than others. This is one of them... */
|
||||
float rmin[MAXNDIMKU];
|
||||
float sz[MAXNDIMKU];
|
||||
} tbbox; /* a tree-bbox, */
|
||||
|
||||
/* For now, we will break the OO secrecy rule and just let routines know
|
||||
what's inside the tbbox. Otherwise I have to write a dozen functions
|
||||
to extract and insert values...Ugh. */
|
||||
/* CenterBbox is useful, nevertheless */
|
||||
void CenterBbox(tbbox *bb, float *center);
|
||||
|
||||
/* This gives a tight bounding box around the list of positions. Note
|
||||
that the result is rmin <= pos[i] and rmax >= pos[i]. The equality
|
||||
can be a headache for float-to-int conversions! Consider using
|
||||
InflateBbox and or CubeBbox! */
|
||||
void TightBbox(float *pstart, int nobj, int pstride, int ndim, tbbox *bb);
|
||||
|
||||
/* Make the bbox a cube by expanding the smaller dimensions. */
|
||||
void CubeBbox(tbbox *bb);
|
||||
|
||||
/* Increase the linear dimension by 'factor' on all sides */
|
||||
void InflateBbox(tbbox *bb, float factor);
|
||||
|
||||
/* Return 1 if bb1 completely contains bb2 */
|
||||
int ContainsBbox(tbbox *bb1, tbbox *bb2);
|
||||
|
||||
/* Construct bbu, the 'union' of bb1 and bb2 */
|
||||
void UnionBbox(tbbox *bb1, tbbox *bb2, tbbox *bbu);
|
||||
|
||||
/* Generate keys for an array of positions (imagine sizeof(body) as the
|
||||
stride argument!) */
|
||||
void GenerateKeys(float *pstart, int nobj, int pstride, tbbox *bb, Key_t *kstart, int kstride, int ordering);
|
||||
/* This will be set when GenerateKeys detects that a key is out of
|
||||
bounds. GenerateKeys will not crash and burn, but prudent callers
|
||||
will check KeyOutOfBounds after calling it. It is cumulative. */
|
||||
extern int KeyOutOfBounds;
|
||||
|
||||
/* Replacement for CellCorner: you supply the bbox that describes the
|
||||
Universe, and we return a bbox that describes the cell */
|
||||
void CellBBFromKey(Key_t key, tbbox *bb, tbbox *cellbb, int ordering);
|
||||
|
||||
/* Some primitive building blocks. They can be combined with
|
||||
KeyFromInts and IntsFromKey to do the full conversion... */
|
||||
void IntsFromFloats(const float *x, unsigned int *ix, tbbox *bb, int nbits);
|
||||
void FloatsFromInts(const int *ix, float *x, tbbox *bb, int nbits);
|
||||
|
||||
/* These two names conflict with physics_generic.c. Good. It will
|
||||
keep me from using physics_generic.c accidentally. */
|
||||
Key_t KeyFromInts(unsigned int *xp, int ndim, int nbits);
|
||||
int IntsFromKey(Key_t key, unsigned int *ip, int ndim);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue