17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_TEST_UTIL_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define NET_DISK_CACHE_SIMPLE_SIMPLE_TEST_UTIL_H_
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <string>
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/basictypes.h"
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/callback.h"
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace base {
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass FilePath;
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace disk_cache {
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace simple_util {
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Immutable array with compile-time bound-checking.
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)template <typename T, size_t Size>
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class ImmutableArray {
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public:
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  static const size_t size = Size;
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  ImmutableArray(const base::Callback<T (size_t index)>& initializer) {
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    for (size_t i = 0; i < size; ++i)
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      data_[i] = initializer.Run(i);
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  template <size_t Index>
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const T& at() const {
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    COMPILE_ASSERT(Index < size, array_out_of_bounds);
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return data_[Index];
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private:
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  T data_[size];
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)};
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Creates a corrupt file to be used in tests.
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool CreateCorruptFileForTests(const std::string& key,
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                               const base::FilePath& cache_path);
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace simple_backend
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace disk_cache
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // NET_DISK_CACHE_SIMPLE_SIMPLE_TEST_UTIL_H_
49