/*
 *	clipber.h
 *
 *	BER - Basic Encoding Rules
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2018 Naoyuki Sawa
 *
 *	* Fri Apr 06 23:59:59 JST 2018 Naoyuki Sawa
 *	- 1st リリース。
 *	- BERについては、下記の資料を参照して下さい。
 *	  ①「Samayou Oharikui」(http://www5d.biglobe.ne.jp/~stssk/index.html)さんのサイトの、BER(Basic Encoding Rules)』(http://www5d.biglobe.ne.jp/stssk/asn1/ber.html)の記事
 *	  ②「Information technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)」(https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf)
 *	- 今回、当モジュールを作成したきっかけは、Rubyのpackテンプレート文字列(https://docs.ruby-lang.org/ja/latest/doc/pack_template.html)の勉強をしていて、BER圧縮整数の事を知ったからです。
 *	  これまで、同様の圧縮処理を行う際は、各モジュールでその都度実装していましたが、標準的な方法に沿って共通モジュールとして用意しておく方が良いと思ったので、当モジュールを作成しました。
 *	- ただし当モジュールの機能は、標準仕様に完全に沿っている訳ではなく、おおよその概念が一致しているだけです。
 *	  Rubyのpackテンプレート文字列のBER圧縮整数形式も、標準仕様に厳密に沿っている訳ではない(?)ように思います。
 *	- また、当モジュールの機能と、Rubyのpackテンプレート文字列のBER圧縮整数形式の間にも、違いがあります。
 *	  Rubyのpackテンプレート文字列のBER圧縮整数形式は、負数に対応していないようで、負数を渡すとエラーになります。
 *	  負数に対応していないと使い辛いので、当モジュールでは負数にも対応する事にしました。
 *	  負数をBER圧縮する方法としては、符号無し整数と見なしてエンコードする方法も有るのですが、それでは負数が全て大きなデータにエンコードされてしまうので、その方法は取りませんでした。
 *	  当モジュールでは、出力する7ビット毎の最上位ビットを符号拡張する方法で、負数に対応しました。(言葉で説明すると判り辛いので、コードを読む方が判り易いと思います。)
 */
#ifndef __CLIP_BER_H__
#define __CLIP_BER_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
//*****************************************************************************
//	
//*****************************************************************************
int BER_Decode(const unsigned char* buf, int* pVal);
int BER_Encode(unsigned char buf[/*(sizeof(int)*8+6)/7*/], int val);
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__CLIP_BER_H__
