14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci#ifndef ECMASCRIPT_MEM_MEM_COMMON_H
174514f5e3Sopenharmony_ci#define ECMASCRIPT_MEM_MEM_COMMON_H
184514f5e3Sopenharmony_ci
194514f5e3Sopenharmony_ci#include <cstddef>
204514f5e3Sopenharmony_ci#include <cstdint>
214514f5e3Sopenharmony_ci
224514f5e3Sopenharmony_cinamespace panda::ecmascript {
234514f5e3Sopenharmony_citemplate <class T>
244514f5e3Sopenharmony_ciinline uintptr_t ToUintPtr(T *val)
254514f5e3Sopenharmony_ci{
264514f5e3Sopenharmony_ci    return reinterpret_cast<uintptr_t>(val);
274514f5e3Sopenharmony_ci}
284514f5e3Sopenharmony_ci
294514f5e3Sopenharmony_ciinline uintptr_t ToUintPtr(std::nullptr_t)
304514f5e3Sopenharmony_ci{
314514f5e3Sopenharmony_ci    return reinterpret_cast<uintptr_t>(nullptr);
324514f5e3Sopenharmony_ci}
334514f5e3Sopenharmony_ci
344514f5e3Sopenharmony_ciinline void *ToVoidPtr(uintptr_t val)
354514f5e3Sopenharmony_ci{
364514f5e3Sopenharmony_ci    return reinterpret_cast<void *>(val);
374514f5e3Sopenharmony_ci}
384514f5e3Sopenharmony_ci
394514f5e3Sopenharmony_ci/*
404514f5e3Sopenharmony_ci    uint64_t return type usage in memory literals for giving
414514f5e3Sopenharmony_ci    compile-time error in case of integer overflow
424514f5e3Sopenharmony_ci*/
434514f5e3Sopenharmony_ciconstexpr uint64_t SHIFT_KB = 10ULL;
444514f5e3Sopenharmony_ciconstexpr uint64_t SHIFT_MB = 20ULL;
454514f5e3Sopenharmony_ciconstexpr uint64_t SHIFT_GB = 30ULL;
464514f5e3Sopenharmony_ci
474514f5e3Sopenharmony_ciconstexpr uint64_t operator"" _KB(long double count)
484514f5e3Sopenharmony_ci{
494514f5e3Sopenharmony_ci    return count * (1ULL << SHIFT_KB);
504514f5e3Sopenharmony_ci}
514514f5e3Sopenharmony_ci
524514f5e3Sopenharmony_ci// NOLINTNEXTLINE(google-runtime-int)
534514f5e3Sopenharmony_ciconstexpr uint64_t operator"" _KB(unsigned long long count)
544514f5e3Sopenharmony_ci{
554514f5e3Sopenharmony_ci    return count * (1ULL << SHIFT_KB);
564514f5e3Sopenharmony_ci}
574514f5e3Sopenharmony_ci
584514f5e3Sopenharmony_ciconstexpr uint64_t operator"" _MB(long double count)
594514f5e3Sopenharmony_ci{
604514f5e3Sopenharmony_ci    return count * (1ULL << SHIFT_MB);
614514f5e3Sopenharmony_ci}
624514f5e3Sopenharmony_ci
634514f5e3Sopenharmony_ci// NOLINTNEXTLINE(google-runtime-int)
644514f5e3Sopenharmony_ciconstexpr uint64_t operator"" _MB(unsigned long long count)
654514f5e3Sopenharmony_ci{
664514f5e3Sopenharmony_ci    return count * (1ULL << SHIFT_MB);
674514f5e3Sopenharmony_ci}
684514f5e3Sopenharmony_ci
694514f5e3Sopenharmony_ciconstexpr uint64_t operator"" _GB(long double count)
704514f5e3Sopenharmony_ci{
714514f5e3Sopenharmony_ci    return count * (1ULL << SHIFT_GB);
724514f5e3Sopenharmony_ci}
734514f5e3Sopenharmony_ci
744514f5e3Sopenharmony_ci// NOLINTNEXTLINE(google-runtime-int)
754514f5e3Sopenharmony_ciconstexpr uint64_t operator"" _GB(unsigned long long count)
764514f5e3Sopenharmony_ci{
774514f5e3Sopenharmony_ci    return count * (1ULL << SHIFT_GB);
784514f5e3Sopenharmony_ci}
794514f5e3Sopenharmony_ci}  // namespace panda::ecmascript
804514f5e3Sopenharmony_ci
814514f5e3Sopenharmony_ci#endif  // ECMASCRIPT_MEM_MEM_COMMON_H
82