mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Branch CEF3 files from /branches/cef3 to /trunk/cef3 (issue #564).
git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@571 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
83
libcef/common/tracker.cc
Normal file
83
libcef/common/tracker.cc
Normal file
@@ -0,0 +1,83 @@
|
||||
// Copyright (c) 2012 The Chromium Embedded Framework 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 "libcef/common/tracker.h"
|
||||
|
||||
// CefTrackNode implementation.
|
||||
|
||||
CefTrackNode::CefTrackNode()
|
||||
: track_next_(NULL),
|
||||
track_prev_(NULL) {
|
||||
}
|
||||
|
||||
CefTrackNode::~CefTrackNode() {
|
||||
}
|
||||
|
||||
void CefTrackNode::InsertTrackPrev(CefTrackNode* object) {
|
||||
if (track_prev_)
|
||||
track_prev_->SetTrackNext(object);
|
||||
object->SetTrackNext(this);
|
||||
object->SetTrackPrev(track_prev_);
|
||||
track_prev_ = object;
|
||||
}
|
||||
|
||||
void CefTrackNode::InsertTrackNext(CefTrackNode* object) {
|
||||
if (track_next_)
|
||||
track_next_->SetTrackPrev(object);
|
||||
object->SetTrackPrev(this);
|
||||
object->SetTrackNext(track_next_);
|
||||
track_next_ = object;
|
||||
}
|
||||
|
||||
void CefTrackNode::RemoveTracking() {
|
||||
if (track_next_)
|
||||
track_next_->SetTrackPrev(track_prev_);
|
||||
if (track_prev_)
|
||||
track_prev_->SetTrackNext(track_next_);
|
||||
track_next_ = NULL;
|
||||
track_prev_ = NULL;
|
||||
}
|
||||
|
||||
|
||||
// CefTrackManager implementation.
|
||||
|
||||
CefTrackManager::CefTrackManager()
|
||||
: object_count_(0) {
|
||||
}
|
||||
|
||||
CefTrackManager::~CefTrackManager() {
|
||||
DeleteAll();
|
||||
}
|
||||
|
||||
void CefTrackManager::Add(CefTrackNode* object) {
|
||||
AutoLock lock_scope(this);
|
||||
if (!object->IsTracked()) {
|
||||
tracker_.InsertTrackNext(object);
|
||||
++object_count_;
|
||||
}
|
||||
}
|
||||
|
||||
bool CefTrackManager::Delete(CefTrackNode* object) {
|
||||
AutoLock lock_scope(this);
|
||||
if (object->IsTracked()) {
|
||||
object->RemoveTracking();
|
||||
delete object;
|
||||
--object_count_;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CefTrackManager::DeleteAll() {
|
||||
AutoLock lock_scope(this);
|
||||
CefTrackNode* next;
|
||||
do {
|
||||
next = tracker_.GetTrackNext();
|
||||
if (next) {
|
||||
next->RemoveTracking();
|
||||
delete next;
|
||||
}
|
||||
} while (next != NULL);
|
||||
object_count_ = 0;
|
||||
}
|
Reference in New Issue
Block a user