// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. #ifndef RUNTIME_VM_UNIBROW_INL_H_ #define RUNTIME_VM_UNIBROW_INL_H_ #include "vm/unibrow.h" #include "platform/assert.h" namespace unibrow { template intptr_t Mapping::get(int32_t c, int32_t n, int32_t* result) { CacheEntry entry = entries_[c & kMask]; if (entry.code_point_ == c) { if (entry.offset_ == 0) { return 0; } else { result[0] = c + entry.offset_; return 1; } } else { return CalculateValue(c, n, result); } } template intptr_t Mapping::CalculateValue(int32_t c, int32_t n, int32_t* result) { bool allow_caching = true; intptr_t length = T::Convert(c, n, result, &allow_caching); if (allow_caching) { if (length == 1) { entries_[c & kMask] = CacheEntry(c, result[0] - c); return 1; } else { entries_[c & kMask] = CacheEntry(c, 0); return 0; } } else { return length; } } } // namespace unibrow #endif // RUNTIME_VM_UNIBROW_INL_H_