Blender  V3.3
SEQ_iterator.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2004 Blender Foundation. All rights reserved. */
3 
4 #pragma once
5 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include "BLI_ghash.h"
15 
16 struct Editing;
17 struct GSet;
18 struct GSetIterator;
19 struct Sequence;
20 
21 /* Utility macro to construct an unique (within a file) variable name for iterator macro.
22  * Use indirect macro evaluation to ensure the `__LINE__` is expanded (rather than being
23  * treated as a name token),
24  *
25  * The `__LINE__` is defined at the invocation of the `SEQ_ITERATOR_FOREACH` and is not changed
26  * afterwards. This makes it safe to expand it several times in the `SEQ_ITERATOR_FOREACH`.
27  *
28  * This allows to have nested `foreach` loops.
29  *
30  * NOTE: Putting nested loop to a wrapper macro is not supported. */
31 #define _SEQ_ITERATOR_NAME_JOIN(x, y) x##_##y
32 #define _SEQ_ITERATOR_NAME_EVALUATE(x, y) _SEQ_ITERATOR_NAME_JOIN(x, y)
33 #define _SEQ_ITERATOR_NAME(prefix) _SEQ_ITERATOR_NAME_EVALUATE(prefix, __LINE__)
34 
35 #define SEQ_ITERATOR_FOREACH(var, collection) \
36  for (SeqIterator _SEQ_ITERATOR_NAME(iter) = {{{NULL}}}; \
37  SEQ_iterator_ensure(collection, &_SEQ_ITERATOR_NAME(iter), &var) && var != NULL; \
38  var = SEQ_iterator_yield(&_SEQ_ITERATOR_NAME(iter)))
39 
40 typedef struct SeqCollection {
41  struct GSet *set;
43 
44 typedef struct SeqIterator {
49 
62 bool SEQ_iterator_ensure(SeqCollection *collection,
63  SeqIterator *iterator,
64  struct Sequence **r_seq);
73 struct Sequence *SEQ_iterator_yield(SeqIterator *iterator);
74 
78 typedef bool (*SeqForEachFunc)(struct Sequence *seq, void *user_data);
79 
90 
107 uint SEQ_collection_len(const SeqCollection *collection);
111 bool SEQ_collection_has_strip(const struct Sequence *seq, const SeqCollection *collection);
119 bool SEQ_collection_append_strip(struct Sequence *seq, SeqCollection *collection);
127 bool SEQ_collection_remove_strip(struct Sequence *seq, SeqCollection *collection);
133 void SEQ_collection_free(SeqCollection *collection);
135 #define SEQ_collection_free_void_p ((GHashValFreeFP)SEQ_collection_free)
136 
143 void SEQ_collection_merge(SeqCollection *collection_dst, SeqCollection *collection_src);
151 void SEQ_collection_exclude(SeqCollection *collection, SeqCollection *exclude_elements);
160 void SEQ_collection_expand(const struct Scene *scene,
161  struct ListBase *seqbase,
162  SeqCollection *collection,
163  void seq_query_func(const struct Scene *scene,
164  struct Sequence *seq_reference,
165  struct ListBase *seqbase,
166  SeqCollection *collection));
176  const struct Scene *scene,
177  struct ListBase *seqbase,
178  void seq_query_func(const struct Scene *scene,
179  struct Sequence *seq_reference,
180  struct ListBase *seqbase,
181  SeqCollection *collection));
220  ListBase *seqbase,
221  int timeline_frame,
222  int displayed_channel);
233  struct Sequence *seq_reference,
234  struct ListBase *seqbase,
235  SeqCollection *collection);
236 void SEQ_filter_selected_strips(SeqCollection *collection);
237 
238 #ifdef __cplusplus
239 }
240 #endif
struct GSet GSet
Definition: BLI_ghash.h:340
unsigned int uint
Definition: BLI_sys_types.h:67
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
void SEQ_collection_exclude(SeqCollection *collection, SeqCollection *exclude_elements)
Definition: iterator.c:142
bool SEQ_iterator_ensure(SeqCollection *collection, SeqIterator *iterator, struct Sequence **r_seq)
Definition: iterator.c:32
bool SEQ_collection_remove_strip(struct Sequence *seq, SeqCollection *collection)
Definition: iterator.c:128
SeqCollection * SEQ_query_all_strips_recursive(ListBase *seqbase)
Definition: iterator.c:194
void SEQ_collection_merge(SeqCollection *collection_dst, SeqCollection *collection_src)
Definition: iterator.c:133
void SEQ_for_each_callback(struct ListBase *seqbase, SeqForEachFunc callback, void *user_data)
Definition: iterator.c:76
bool SEQ_collection_has_strip(const struct Sequence *seq, const SeqCollection *collection)
bool SEQ_collection_append_strip(struct Sequence *seq, SeqCollection *collection)
Definition: iterator.c:117
uint SEQ_collection_len(const SeqCollection *collection)
Definition: iterator.c:95
SeqCollection * SEQ_query_selected_strips(struct ListBase *seqbase)
Definition: iterator.c:215
void SEQ_filter_selected_strips(SeqCollection *collection)
Definition: iterator.c:366
SeqCollection * SEQ_query_by_reference(struct Sequence *seq_reference, const struct Scene *scene, struct ListBase *seqbase, void seq_query_func(const struct Scene *scene, struct Sequence *seq_reference, struct ListBase *seqbase, SeqCollection *collection))
void SEQ_collection_expand(const struct Scene *scene, struct ListBase *seqbase, SeqCollection *collection, void seq_query_func(const struct Scene *scene, struct Sequence *seq_reference, struct ListBase *seqbase, SeqCollection *collection))
bool(* SeqForEachFunc)(struct Sequence *seq, void *user_data)
Definition: SEQ_iterator.h:78
SeqCollection * SEQ_query_all_strips(ListBase *seqbase)
Definition: iterator.c:206
void SEQ_query_strip_effect_chain(const struct Scene *scene, struct Sequence *seq_reference, struct ListBase *seqbase, SeqCollection *collection)
SeqCollection * SEQ_collection_duplicate(SeqCollection *collection)
Definition: iterator.c:172
struct SeqIterator SeqIterator
SeqCollection * SEQ_collection_create(const char *name)
Definition: iterator.c:87
SeqCollection * SEQ_query_unselected_strips(struct ListBase *seqbase)
Definition: iterator.c:323
struct Sequence * SEQ_iterator_yield(SeqIterator *iterator)
Definition: iterator.c:52
void SEQ_collection_free(SeqCollection *collection)
Definition: iterator.c:81
struct SeqCollection SeqCollection
SeqCollection * SEQ_query_rendered_strips(const struct Scene *scene, ListBase *channels, ListBase *seqbase, int timeline_frame, int displayed_channel)
Scene scene
void * user_data
DEGForeachIDComponentCallback callback
struct GSet * set
Definition: SEQ_iterator.h:41
bool iterator_initialized
Definition: SEQ_iterator.h:47
GSetIterator gsi
Definition: SEQ_iterator.h:45
SeqCollection * collection
Definition: SEQ_iterator.h:46
ListBase seqbase