| 
									
										
										
										
											2021-05-25 13:37:47 +10:00
										 |  |  | /** \page page_spa_design SPA Design | 
					
						
							| 
									
										
										
										
											2020-06-09 17:08:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-09 17:29:40 +02:00
										 |  |  | # Conventions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Types | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Types are generally divided into two categories: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-25 13:37:47 +10:00
										 |  |  | - String types: They identify interfaces and highlevel object types. | 
					
						
							|  |  |  | - integer types: These are enumerations used in the parts where high | 
					
						
							| 
									
										
										
										
											2020-06-09 17:29:40 +02:00
										 |  |  |                  performance/ease of use/low space overhead is needed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The SPA type is system is statis and very simple but still allows you | 
					
						
							|  |  |  | to make and introspect complex object type hierarchies. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | See the type system docs for more info. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Error codes | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SPA uses negative integers as errno style error codes. Functions that return an | 
					
						
							|  |  |  | int result code generated an error when < 0. `spa_strerror()` can be used to | 
					
						
							|  |  |  | get a string representation of the error code. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SPA also has a way to encode asynchronous results. This is done by setting a | 
					
						
							|  |  |  | high bit (bit 30, the `ASYNC_BIT`) in the result code and a sequence number | 
					
						
							|  |  |  | in the lower bits. This result is normally identified as a positive success | 
					
						
							|  |  |  | result code and the sequence number can later be matched to the completion | 
					
						
							|  |  |  | event. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Useful macros | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-24 10:49:22 +10:00
										 |  |  | SPA comes with some useful macros defined in `<spa/utils/defs.h>` and a | 
					
						
							|  |  |  | number of utility functions, see \ref spa_utils | 
					
						
							| 
									
										
										
										
											2021-05-25 13:37:47 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | */ |