lgq
4 天以前 081f12a52906abe6c2d139fdc144135978681009
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { mapClass } from './libvbar-m-dxmap.so'
/**
 * build:20240407
 * map 组件,可以在内存里读写key/value
 */
const mapObj = new mapClass();
 
const map = {
    get: function (name) {
        if (!name || name.length == 0) {
            throw new Error("dxMap.get:name should not be null or empty")
        }
        //第一次put会自动创建实例
        return {
            /**
             * @brief   获取Map中的所有键,返回一个数组
             */
            keys: function () {
                let all = mapObj.keys(name)
                return all == null ? [] : all
            },
            /**
             * @brief   根据key获取value
             */
            get: function (key) {
                if (!key || key.length < 1) {
                    throw new Error("The 'key' parameter cannot be null or empty")
                }
                // put空字符串,get会是null
                let value = mapObj.get(name, key)
                if (value === undefined || value === null) {
                    value = ""
                }
                return _parseString(value)
            },
            /**
             * @brief   向Map中插入键值对
             */
            put: function (key, value) {
                if (!key || key.length < 1) {
                    throw new Error("The 'key' parameter cannot be null or empty")
                }
                if (value == null || value == undefined) {
                    throw new Error("The 'value' parameter cannot be null or empty")
                }
                return mapObj.insert(name, key, _stringifyValue(value))
            },
            /**
             * @brief   根据Key删除键值对
             */
            del: function (key) {
                if (!key || key.length < 1) {
                    throw new Error("The 'key' parameter cannot be null or empty")
                }
                return mapObj.delete(name, key)
            },
            /**
             * 不再使用了,就销毁
             */
            destroy: function () {
                return mapObj.destroy(name)
            },
        }
    }
 
}
function _stringifyValue(value) {
    const type = typeof value
    if (type === 'string') {
        return value
    }
    if (type === 'number') {
        return '#n#' + value
    }
    if (type === 'boolean') {
        return '#b#' + value
    }
    if (type === 'object') {
        // 如果是对象,进一步判断是否为数组
        if (Array.isArray(value)) {
            return '#a#' + JSON.stringify(value);
        }// else if (value === null) { 前面已经规避了null的情况
        return '#o#' + JSON.stringify(value)
    }
    if (type === 'function') {
        throw new Error("The 'value' parameter should not be function")
    }
}
function _parseString(str) {
    if (str.startsWith('#n#')) {
        // 解析数字
        const numberStr = str.substring(3);
        return numberStr.includes('.') ? parseFloat(numberStr) : parseInt(numberStr, 10);
    } else if (str.startsWith('#b#')) {
        // 解析布尔值
        return str.substring(3) === 'true';
    } else if (str.startsWith('#a#')) {
        // 解析数组
        return JSON.parse(str.substring(3));
    } else if (str.startsWith('#o#')) {
        // 解析对象
        return JSON.parse(str.substring(3));
    } else {
        // 默认情况下,将字符串返回
        return str;
    }
}
export default map;