1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cnwhy-BitMatrix

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

БитМатрикс

БитМатрикс основан на ArrayBuffer, представляет собой класс матрицы с битом в качестве единицы.

Характеристики:

  1. Выбор класса матрицы по необходимости для экономии памяти.
  2. Унифицированный API для удобства работы с матрицами.
  3. Поддержка импорта и экспорта матриц через base64 для решения проблем с хранением.

Сценарии использования: Любые сценарии, где требуется хранить точечные матричные данные.

Описание классов: Помимо BitMatrix, который использует ArrayBuffer для хранения данных, предоставляются два дополнительных класса: AnyMatrix и AnyMatrixUseObject. Эти классы могут использоваться как справочные или как матрицы, способные хранить любые значения. API у всех классов одинаковый.

Класс Базовый тип данных Диапазон значений
BitMatrix Бит 0/1
Int8Matrix Int8Array Int8
Uint8Matrix Uint8Array Uint8
Uint8ClampedMatrix Uint8ClampedArray Uint8
Int16Matrix Int16Array Int16
Uint16Matrix Uint16Array Uint16
Int32Matrix Int32Array Int32
Uint32Matrix Uint32Array Uint32
Float32Matrix Float32Array Float32
Float64Matrix Float64Array Float64
AnyMatrix Массив Любой
AnyMatrixUseObject Объект Любой

Установка

npm i bitmatrix

Использование

Node.js

const BitMatrix = require('bitmatrix').BitMatrix;
// Использование других классов матриц
// const {BitMatrix, Uint8Matrix, AnyMatrix} = require('bitmatrix');
let bm = new BitMatrix(2, 2, 0); // Инициализация 2x2 матрицы, заполненной нулями
console.log(bm.showView());

ES2015

// По умолчанию экспортируется класс BitMatrix
import BitMatrix from 'bitmatrix';
// Использование других классов матриц
// import {BitMatrix, Uint8Matrix, AnyMatrix} from 'bitmatrix'
console.log(bm.showView());

Для использования в браузере можно выбрать уже упакованные зависимости файла ./dist/BitMatrix.umd.js.

<script src="//unpkg.com/@cnwhy/base64/dist/BitMatrix.umd.js"></script>

API

API может быть ещё доработан, приветствуются предложения.

class Matrix {
    constructor(width: number, height: number, defaultValue?: any);
    // Ширина (только для чтения)
    width: number;
    // Высота (только для чтения)
    height: number;
    // Общее количество ячеек (только для чтения)
    total: number;
    // Заполнение матрицы
    fill(value: any);
    // Заполнение одной строки
    fillRow(row: number, value: any);
    // Заполнение одного столбца
    fillColumn(column: number, value: any);
    // Чтение указанной ячейки
    get(x: number, y: number): any;
    // Установка значения указанной ячейки
    set(x: number, y: number, value: any);
    // Чтение одной строки, возврат массива
    getRow(y: number): any[];
    // Установка одной строки
    setRow(y: number, row:any[]);
    // Чтение одного столбца, возврат массива
    getColumn(x: number): any[];
    // Установка одного столбца
    setColumn(x: number, column: any[]);
    // Раскрытие прототипа данных матрицы, если вы не уверены, что это такое, не используйте
    getPrototypeData():Object;
    // Перебор ячеек матрицы
    cellForEach(fn: (value: any, x: number, y: number) => void);
    // Разделение строк на '\n', столбцов на ',', возврат текущих данных матрицы
    showView(): string;
    // Создание копии матрицы
    clone(): Matrix;
    // Создание матрицы из существующего массива
    static from(arr:[][]): Matrix;
    static from(arr:[],width:number): Matrix;
    // Создание матрицы указанного типа из существующей матрицы
    static from(matrix:Matrix,callback:(value: any, x: number, y: number)=>any,thisArg): Matrix;
    // Экспорт матрицы через base64
    static output(matrix:Matrix): string;
    // Импорт матрицы через base64
    static input(base64:string): Matrix;
}

Копирование матрицы

Рекомендуется использовать метод clone() для создания копий матрицы.

Импорт и экспорт

Для обеспечения максимальной совместимости рекомендуется использовать base64 в качестве посредника при импорте (input()) и экспорте (output()).

Структура данных для импорта/экспорта: Первые 9 байт представляют собой описательные байты, а остальные — данные.

0 1 2 3 4 5 6 7 8
Uint32LE(ширина) Uint32LE(высота) Uint8(тип метки) ...(данные)
import BitMatrix from 'bitmatrix';
let bm = new BitMatrix(7,7,0);
bm.fillColumn(3,1);
bm.fillRow(3,1);

let b64 = BitMatrix.output(bm);
console.log(b64);
let bm1 = BitMatrix.input(b64);
console.log(bm1.showView())

/*
AAAABwAAAAcDCATij0AgAA==
0,0,0,1,0,0,0
0,0,0,1,0,0,0
0,0,0,1,0,0,0
1,1,1,1,1,1,1
0,0,0,1,0,0,0
0,0,0,1,0,0,0
0,0,0,1,0,0,0
*/

Совместимость

На основе BufferArray работает только в средах, поддерживающих ES2015.

Тестирование производительности

Использование памяти node v10.13.0

Из таблицы видно, что результаты соответствуют ожиданиям. Перевод текста на русский язык:

0 BitMatrix 0,77 МБ 2,38 МБ 3,16 МБ 1,91 % 7 1,46 %
1 Int8Matrix 0,87 МБ 19,07 МБ 19,94 МБ 12,07 % 16 3,33 %
2 Uint8Matrix 0,82 МБ 19,07 МБ 19,90 МБ 12,04 % 14 2,92 %
3 Uint8ClampedMatrix 0,82 МБ 19,07 МБ 19,89 МБ 12,04 % 15 3,13 %
4 Int16Matrix 0,80 МБ 38,15 МБ 38,95 МБ 23,57 % 17 3,54 %
5 Uint16Matrix 0,68 МБ 38,15 МБ 38,83 МБ 23,50 % 19 3,96 %
6 Int32Matrix 0,53 МБ 76,29 МБ 76,82 МБ 46,49 % 147 30,63 %
7 Uint32Matrix 0,53 МБ 76,29 МБ 76,82 МБ 46,49 % 139 28,96 %
8 Float32Matrix 0,53 МБ 76,29 МБ 76,82 МБ 46,49 % 140 29,17 %
9 Float64Matrix 0,49 МБ 152,59 МБ 153,08 МБ 92,64 % 286 59,58 %
10 AnyMatrix 153,61 МБ 0 МБ 153,61 МБ 92,96 % 2445 509,38 %
11 AnyMatrixUseObject 153,75 МБ 0 МБ 153,75 МБ 93,05 % 6056 1261,67 %
12 number[] 153,13 МБ 0 МБ 153,13 МБ 92,67 % 2808 585,00 %
13 number[][] 165,24 МБ 0 МБ 165,24 МБ 100,00 % 480 100,00 %

Можно выполнить команду npm run test-memory для тестирования и получить этот результат.

Базовый тест node v10.13.0

(index) name fill get set cellForEach
0 BitMatrix 210,31 КБ 8194,21 КБ 6275,51 КБ 700,17
1 Uint8Matrix 25,63 КБ 10969,26 КБ 9658,56 КБ 991,44
2 Uint32Matrix 2,66 КБ 11844,04 КБ 10304,60 КБ 992,45
3 Float64Matrix 1,19 КБ 11845,38 КБ 10639,79 КБ 988,99
4 AnyMatrix 1,23 КБ 11453,06 КБ 10560,18 КБ 987,83
5 number[] 1,15 КБ 15009,22 КБ 14345,48 КБ 960,72
6 number[][] 752,19 12196,47 КБ 11029,79 КБ 1,48 КБ

В тестах get и set использовалось 9 точек, поэтому реальные значения следует умножить на 9.

Можно выполнить команду npm run test-benchmark, чтобы получить этот результат.

Прочее

  • Добавить проверку на допустимость параметров для каждого API.
  • Обработать модульные тесты, базовые тесты и тесты использования памяти;
    • Модульные тесты.
    • Базовые тесты.
    • Тесты использования памяти.
  • Увеличить диапазон базовых тестов.
  • Matrix.from(arr:[][]|[][,width]).
    • Кодирование.
    • Тестирование.
  • .clone().
    • Кодирование.
    • Тестирование.
  • .copy() .copyTo().
    • copy().
    • copyTo().
  • Экспорт и импорт.
    • Преобразование типа Buffer в Matrix и наоборот.

Примечание: в тексте запроса не было обнаружено кода на каком-либо языке программирования, гиперссылок, специальных тегов форматирования в markdown, html, yaml, json, plantuml и других элементов.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Библиотека растровых изображений на JavaScript с низким потреблением памяти. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/cnwhy-BitMatrix.git
git@api.gitlife.ru:oschina-mirror/cnwhy-BitMatrix.git
oschina-mirror
cnwhy-BitMatrix
cnwhy-BitMatrix
master