| // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cromo/hooktable.h" |
| |
| #include <base/logging.h> |
| |
| HookTable::Hook::Hook(Function func, void* arg) : func_(func), arg_(arg) {} |
| |
| HookTable::Hook::~Hook() {} |
| |
| HookTable::HookTable() {} |
| HookTable::~HookTable() {} |
| |
| void HookTable::Add(const std::string& name, Function func, void* arg) { |
| Hook* h = new Hook(func, arg); |
| hooks_[name] = h; |
| } |
| |
| void HookTable::Del(const std::string& name) { |
| CHECK(hooks_.find(name) != hooks_.end()); |
| delete hooks_[name]; |
| hooks_.erase(name); |
| } |
| |
| bool HookTable::Run() { |
| bool retval = true; |
| |
| for (HookMap::iterator it = hooks_.begin(); it != hooks_.end(); it++) { |
| LOG(INFO) << "hooktable: start " << it->first; |
| Hook* hook = it->second; |
| bool res = hook->func_(hook->arg_); |
| retval = retval && res; |
| LOG(INFO) << "hooktable: end " << it->first << " " << res; |
| } |
| |
| return retval; |
| } |