+++ /dev/null
-/*
- * Structures and prototypes related to parameterization
- */
-#ifndef ASN1_NAMESPACE_H
-#define ASN1_NAMESPACE_H
-
-struct asn1p_ref_s; /* Forward declaration */
-struct asn1p_expr_s; /* Forward declaration */
-struct asn1p_module_s; /* Forward declaration */
-
-typedef struct asn1_namespace_s {
- struct asn1_namespace_element_s {
- enum {
- NAM_SPACE, /* The whole search space (e.g. Module) */
- NAM_SYMBOL, /* A particular symbol */
- } selector;
- union {
- struct {
- struct asn1p_module_s *module;
- int stop_search; /* This module MUST contain the symbol */
- } space;
- struct {
- struct asn1p_ref_s *opt_governor; /* optional */
- char *identifier;
- struct asn1p_expr_s *resolution;
- } symbol;
- } u;
- } *elements;
- size_t elements_count;
- size_t elements_size;
-} asn1_namespace_t;
-
-/*
- * Set callback used to initialize standard namespaces.
- */
-void asn1_namespace_add_standard_namespaces_callback(
- void (*)(asn1_namespace_t *));
-
-asn1_namespace_t *asn1_namespace_new(void);
-void asn1_namespace_free(asn1_namespace_t *);
-
-asn1_namespace_t *asn1_namespace_clone(const asn1_namespace_t *);
-
-asn1_namespace_t *asn1_namespace_new_from_module(struct asn1p_module_s *mod, int stop_search);
-
-void asn1_namespace_add_module(asn1_namespace_t *,
- struct asn1p_module_s *module, int stop_search);
-
-void asn1_namespace_add_symbol(asn1_namespace_t *,
- struct asn1p_ref_s *opt_governor,
- const char *identifier,
- struct asn1p_expr_s *resolved_argument);
-
-/*
- * Human-readable namespace layout.
- * Returns a reference to a statically allocated string.
- */
-const char *asn1_namespace_string(const asn1_namespace_t *);
-
-/*
- * Create a new namespace by cloning (ns1) and adding (ns2) on top.
- * Destroys (ns2).
- */
-asn1_namespace_t *asn1_namespace_new_ND(const asn1_namespace_t *ns1,
- asn1_namespace_t *ns2);
-
-/*
- * Introduce and destroy namespace around the given code.
- * This aids memory management around dynamic namespaces.
- */
-#define WITH_MODULE_NAMESPACE(mod, ns_var, code) \
- ({ \
- struct asn1_namespace_s *ns_var = \
- asn1_namespace_new_from_module(mod, 1); \
- typeof(code) ret = code; \
- asn1_namespace_free(ns_var); \
- ret; \
- })
-
-#endif /* ASN1_NAMESPACE_H */