xref: /aosp_15_r20/external/pdfium/fxjs/gc/container_trace.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2020 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker #ifndef FXJS_GC_CONTAINER_TRACE_H_
6*3ac0a46fSAndroid Build Coastguard Worker #define FXJS_GC_CONTAINER_TRACE_H_
7*3ac0a46fSAndroid Build Coastguard Worker 
8*3ac0a46fSAndroid Build Coastguard Worker #include <list>
9*3ac0a46fSAndroid Build Coastguard Worker #include <map>
10*3ac0a46fSAndroid Build Coastguard Worker #include <set>
11*3ac0a46fSAndroid Build Coastguard Worker #include <vector>
12*3ac0a46fSAndroid Build Coastguard Worker 
13*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/member.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/visitor.h"
15*3ac0a46fSAndroid Build Coastguard Worker 
16*3ac0a46fSAndroid Build Coastguard Worker namespace fxgc {
17*3ac0a46fSAndroid Build Coastguard Worker 
18*3ac0a46fSAndroid Build Coastguard Worker template <typename T, typename V = cppgc::Visitor>
ContainerTrace(V * visitor,const std::list<cppgc::Member<T>> & container)19*3ac0a46fSAndroid Build Coastguard Worker void ContainerTrace(V* visitor, const std::list<cppgc::Member<T>>& container) {
20*3ac0a46fSAndroid Build Coastguard Worker   for (const auto& item : container)
21*3ac0a46fSAndroid Build Coastguard Worker     visitor->Trace(item);
22*3ac0a46fSAndroid Build Coastguard Worker }
23*3ac0a46fSAndroid Build Coastguard Worker 
24*3ac0a46fSAndroid Build Coastguard Worker template <typename T, typename U, typename V = cppgc::Visitor>
ContainerTrace(V * visitor,const std::map<cppgc::Member<T>,U> & container)25*3ac0a46fSAndroid Build Coastguard Worker void ContainerTrace(V* visitor,
26*3ac0a46fSAndroid Build Coastguard Worker                     const std::map<cppgc::Member<T>, U>& container) {
27*3ac0a46fSAndroid Build Coastguard Worker   for (const auto& item : container) {
28*3ac0a46fSAndroid Build Coastguard Worker     visitor->Trace(item.first);
29*3ac0a46fSAndroid Build Coastguard Worker   }
30*3ac0a46fSAndroid Build Coastguard Worker }
31*3ac0a46fSAndroid Build Coastguard Worker 
32*3ac0a46fSAndroid Build Coastguard Worker template <typename T, typename U, typename V = cppgc::Visitor>
ContainerTrace(V * visitor,const std::map<U,cppgc::Member<T>> & container)33*3ac0a46fSAndroid Build Coastguard Worker void ContainerTrace(V* visitor,
34*3ac0a46fSAndroid Build Coastguard Worker                     const std::map<U, cppgc::Member<T>>& container) {
35*3ac0a46fSAndroid Build Coastguard Worker   for (const auto& item : container)
36*3ac0a46fSAndroid Build Coastguard Worker     visitor->Trace(item.second);
37*3ac0a46fSAndroid Build Coastguard Worker }
38*3ac0a46fSAndroid Build Coastguard Worker 
39*3ac0a46fSAndroid Build Coastguard Worker template <typename T, typename U, typename V = cppgc::Visitor>
ContainerTrace(V * visitor,const std::map<cppgc::Member<U>,cppgc::Member<T>> & container)40*3ac0a46fSAndroid Build Coastguard Worker void ContainerTrace(
41*3ac0a46fSAndroid Build Coastguard Worker     V* visitor,
42*3ac0a46fSAndroid Build Coastguard Worker     const std::map<cppgc::Member<U>, cppgc::Member<T>>& container) {
43*3ac0a46fSAndroid Build Coastguard Worker   for (const auto& item : container) {
44*3ac0a46fSAndroid Build Coastguard Worker     visitor->Trace(item.first);
45*3ac0a46fSAndroid Build Coastguard Worker     visitor->Trace(item.second);
46*3ac0a46fSAndroid Build Coastguard Worker   }
47*3ac0a46fSAndroid Build Coastguard Worker }
48*3ac0a46fSAndroid Build Coastguard Worker 
49*3ac0a46fSAndroid Build Coastguard Worker template <typename T, typename V = cppgc::Visitor>
ContainerTrace(V * visitor,const std::set<cppgc::Member<T>> & container)50*3ac0a46fSAndroid Build Coastguard Worker void ContainerTrace(V* visitor, const std::set<cppgc::Member<T>>& container) {
51*3ac0a46fSAndroid Build Coastguard Worker   for (const auto& item : container)
52*3ac0a46fSAndroid Build Coastguard Worker     visitor->Trace(item);
53*3ac0a46fSAndroid Build Coastguard Worker }
54*3ac0a46fSAndroid Build Coastguard Worker 
55*3ac0a46fSAndroid Build Coastguard Worker template <typename T, typename V = cppgc::Visitor>
ContainerTrace(V * visitor,const std::vector<cppgc::Member<T>> & container)56*3ac0a46fSAndroid Build Coastguard Worker void ContainerTrace(V* visitor,
57*3ac0a46fSAndroid Build Coastguard Worker                     const std::vector<cppgc::Member<T>>& container) {
58*3ac0a46fSAndroid Build Coastguard Worker   for (const auto& item : container)
59*3ac0a46fSAndroid Build Coastguard Worker     visitor->Trace(item);
60*3ac0a46fSAndroid Build Coastguard Worker }
61*3ac0a46fSAndroid Build Coastguard Worker 
62*3ac0a46fSAndroid Build Coastguard Worker }  // namespace fxgc
63*3ac0a46fSAndroid Build Coastguard Worker 
64*3ac0a46fSAndroid Build Coastguard Worker using fxgc::ContainerTrace;
65*3ac0a46fSAndroid Build Coastguard Worker 
66*3ac0a46fSAndroid Build Coastguard Worker #endif  // FXJS_GC_CONTAINER_TRACE_H_
67