/*
 *
 *    Copyright (c) 2013-2017 Nest Labs, Inc.
 *    All rights reserved.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

/**
 *    @file
 *      This file implements utility functions for deriving a fibonacci
 *      number from an index.
 *
 */

#ifndef FIBONACCIUTILS_H_
#define FIBONACCIUTILS_H_

namespace nl {
namespace Weave {

/**
 *  This function generates 32-bit Fibonacci number
 *  for a given 32 bit index.
 *
 * @retval  32-bit unsigned fibonacci number.
 *
 */
extern uint32_t GetFibonacciForIndex(uint32_t index);

} // namespace Weave
} // namespace nl

#endif /* FIBONACCIUTILS_H_ */
