/* eslint-env browser */

/**
 * @module binary
 */

import * as string from './string.js'
import * as globals from './globals.js'

export const BITS32 = 0xFFFFFFFF
export const BITS21 = (1 << 21) - 1
export const BITS16 = (1 << 16) - 1

export const BIT26 = 1 << 26
export const BIT32 = 1 << 32

/**
 * @param {Uint8Array} bytes
 * @return {string}
 */
export const toBase64 = bytes => {
  let s = ''
  for (let i = 0; i < bytes.byteLength; i++) {
    s += string.fromCharCode(bytes[i])
  }
  return btoa(s)
}

/**
 * @param {string} s
 * @return {Uint8Array}
 */
export const fromBase64 = s => {
  const a = atob(s)
  const bytes = globals.createUint8ArrayFromLen(a.length)
  for (let i = 0; i < a.length; i++) {
    bytes[i] = a.charCodeAt(i)
  }
  return bytes
}