spinn_common  7.4.2
Support code for SpiNNaker applications.
pair.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 The University of Manchester
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * https://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
43 #ifndef __PAIR_H__
44 #define __PAIR_H__
45 
46 #include "stdint.h"
47 
49 typedef uint64_t pair_t;
50 
52 typedef union {
55  struct {
57  void *lo;
59  void *hi;
60  };
61 } pair_union_t;
62 
67 static inline pair_t __pair(
68  void *x,
69  void *y)
70 {
71  register pair_union_t tmp;
72 
73  tmp.lo = x;
74  tmp.hi = y;
75  return tmp.pair;
76 }
77 
81 static inline void *fst(
82  pair_t p)
83 {
84  register pair_union_t tmp;
85 
86  tmp.pair = p;
87  return tmp.lo;
88 }
89 
93 static inline void *snd(
94  pair_t p)
95 {
96  register pair_union_t tmp;
97 
98  tmp.pair = p;
99  return tmp.hi;
100 }
101 
103 #define pair(x, y) __pair((void*)(x), (void*)(y))
104 
105 #endif /*__PAIR_H__*/
static pair_t __pair(void *x, void *y)
Create a pair from two generic 32-bit objects.
Definition: pair.h:67
pair_t pair
The paired value.
Definition: pair.h:54
static void * fst(pair_t p)
Return the first component of a pair.
Definition: pair.h:81
static void * snd(pair_t p)
Return the second component of a pair.
Definition: pair.h:93
uint64_t pair_t
Give a useful name to the return type, indicating it's use.
Definition: pair.h:49
The implementation of a pair.
Definition: pair.h:52