[Feature]add MT2731_MP2_MR2_SVN388 baseline version

Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/lynq/lib/liblynq-tele-ril/lynq-riltel/sms/cdma/BitwiseOutputStream.cpp b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/sms/cdma/BitwiseOutputStream.cpp
new file mode 100644
index 0000000..5d12dee
--- /dev/null
+++ b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/sms/cdma/BitwiseOutputStream.cpp
@@ -0,0 +1,118 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+#include <cstring>
+#include <algorithm>
+#include "BitwiseOutputStream.h"
+using namespace std;
+
+BitwiseOutputStream::BitwiseOutputStream(int startingLength) {
+  mBuf = new uint8_t[startingLength];
+  memset(mBuf, 0, startingLength * sizeof(uint8_t));
+  mEnd = startingLength << 3;
+  mPos = 0;
+}
+
+uint8_t* BitwiseOutputStream::toByteArray(uint32_t* length) {
+  int len = (mPos >> 3) + ((mPos & 0x07) > 0 ? 1 : 0);  // &7==%8
+  uint8_t* newBuf = new uint8_t[len];
+  memset(newBuf, 0, len * sizeof(uint8_t));
+  memcpy(newBuf, mBuf, len * sizeof(uint8_t));
+  (*length) = len;
+  return newBuf;
+}
+
+std::vector<uint8_t> BitwiseOutputStream::toByteVector() {
+  int len = (mPos >> 3) + ((mPos & 0x07) > 0 ? 1 : 0);  // &7==%8
+  std::vector<uint8_t> v(mBuf, mBuf + len);
+  return v;
+}
+
+void BitwiseOutputStream::possExpand(uint32_t bits) {
+  if ((mPos + bits) < mEnd)
+    return;
+  uint8_t* newBuf = new uint8_t[(mPos + bits) >> 2];
+  memset(newBuf, 0, mEnd >> 3);
+  memcpy(newBuf, mBuf, mEnd >> 3);
+  delete[] mBuf;
+  mBuf = nullptr;
+  mBuf = newBuf;
+  mEnd = (mEnd >> 3) << 3;
+}
+
+void BitwiseOutputStream::write(uint32_t bits, uint32_t data) {
+  if ((bits < 0) || (bits > 8)) {
+    //TBD,log
+    return;
+  }
+  possExpand(bits);
+  data &= (0xFFFFFFFF >> (32 - bits));
+  uint32_t index = mPos >> 3;
+  uint32_t offset = 16 - (mPos & 0x07) - bits;  // &7==%8
+  data <<= offset;
+  mPos += bits;
+  mBuf[index] |= data >> 8;
+  if (offset < 8)
+    mBuf[index + 1] |= data & 0xFF;
+}
+
+void BitwiseOutputStream::writeByteArray(uint32_t bits, uint8_t arr[],
+    uint32_t size) {
+  for (uint32_t i = 0; i < size; i++) {
+    uint32_t increment = std::min((uint32_t) 8, bits - (i << 3));
+    if (increment > 0) {
+      write(increment, (uint8_t) (arr[i] >> (8 - increment)));
+    }
+  }
+}
+
+void BitwiseOutputStream::writeByteVector(uint32_t bits,
+    std::vector<uint8_t> v) {
+  for (uint32_t i = 0; i < v.size(); i++) {
+    uint32_t increment = std::min((uint32_t) 8, bits - (i << 3));
+    if (increment > 0) {
+      write(increment, (uint8_t) (v[i] >> (8 - increment)));
+    }
+  }
+}
+
+void BitwiseOutputStream::skip(uint32_t bits) {
+  possExpand(bits);
+  mPos += bits;
+}
+BitwiseOutputStream::~BitwiseOutputStream() {
+  delete[] mBuf;
+  mBuf = nullptr;
+}
+