text: //************************************************************************************************************
  //
  // © 2016-2019 Regents of the University of California on behalf of the University of California at Berkeley
  //       with rights granted for USDOT OSADP distribution with the ECL-2.0 open source license.
  //
  //*************************************************************************************************************
  /*
   * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
   * Redistribution and modifications are permitted subject to BSD license.
   */
  #ifndef	OER_SUPPORT_H
  #define	OER_SUPPORT_H
  
  #include <asn_system.h>		/* Platform-specific types */
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /*
   * Pre-computed OER constraints.
   */
  typedef struct asn_oer_constraint_number_s {
      unsigned width;    /* ±8,4,2,1 fixed bytes */
      unsigned positive; /* 1 for unsigned number, 0 for signed */
  } asn_oer_constraint_number_t;
  typedef struct asn_oer_constraints_s {
      asn_oer_constraint_number_t value;
      ssize_t size;    /* -1 (no constraint) or >= 0 */
  } asn_oer_constraints_t;
  
  
  /*
   * Fetch the length determinant (X.696 (08/2015), #8.6) into *len_r.
   * RETURN VALUES:
   *       0:     More data expected than bufptr contains.
   *      -1:     Fatal error deciphering length.
   *      >0:     Number of bytes used from bufptr.
   */
  ssize_t oer_fetch_length(const void *bufptr, size_t size, size_t *len_r);
  
  /*
   * Serialize OER length. Returns the number of bytes serialized
   * or -1 if a given callback returned with negative result.
   */
  ssize_t oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, void *app_key);
  
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif	/* OER_SUPPORT_H */
  