10 #define __PDG_NODE_H__
138 bool inclusive)
const;
142 int64 workItemMemory(
bool attribs_only=
false)
const;
159 bool performancePath(
178 fpreal nodeProgress()
const;
186 {
return mySortOptions; }
190 {
return myNodeStats; }
192 {
return myNodeStats; }
198 {
return myCallback.get(); }
200 { myCallback = callback; }
210 {
return mySchedulerReferences; }
212 { mySchedulerReferences.insert(scheduler); }
214 { mySchedulerReferences.clear(); }
218 {
return myContext; }
222 {
return myLoopDepth; }
226 {
return myLoopResetWhen; }
230 {
return myLoopResetType; }
234 {
return myIsErrorHandler; }
238 {
return myIsErrorHandlerBranch; }
243 myIsErrorHandler = error_handler;
244 myIsErrorHandlerBranch = error_handler;
249 { myIsErrorHandlerBranch = error_handler; }
253 {
return myHasError; }
259 {
return myActiveGenerates.relaxedLoad() > 0; }
265 {
return myIsDynamicEval; }
270 {
return myIsDynamicGen; }
275 {
return myIsDynamicProp; }
280 {
return myCanHaveWorkItems; }
286 {
return myServiceName; }
291 {
return myUseServiceBlock; }
298 {
return myRegenerateReason; }
303 { myRegenerateReason = reason; }
309 if (reason > myRegenerateReason)
310 myRegenerateReason = reason;
315 { myBypassState =
state; }
320 if (state > myBypassState)
322 myBypassState =
state;
331 {
return myBypassState; }
335 {
return (myBypassState != eBypassNone); }
342 bool isCooked()
const;
347 void dirty(
bool remove_outputs);
373 virtual bool deserializeWorkItem(
PDG_WorkItem* work_item);
388 int reserveIndexBlock(
int number);
406 bool filter_bypassed=
true,
407 bool filter_reference=
true)
const;
411 bool filter_bypassed=
true,
412 bool filter_reference=
true)
const;
415 bool filter_bypassed=
true,
416 bool filter_reference=
true)
const;
417 void connectedAncestors(
420 bool filter_bypassed=
true,
421 bool filter_reference=
true);
437 dependencies()
const;
440 void resolveDependencies();
446 {
return myWorkItems; }
451 bool include_batches)
const;
456 bool include_batches)
const;
461 template <
typename Filter>
468 for (
auto&& work_item : myWorkItems)
470 if (work_item &&
filter(work_item))
479 void removeWorkItems(
486 bool localize)
const;
489 virtual void queueWorkItemDeps(
521 bool saveJSON(std::ostream &os,
bool binary);
530 bool skip_defaults)
const;
533 static bool fromJSON(
556 inline
bool isFirstGenerate()
const {
return myIsFirstGenerate; }
561 bool myIsFirstGenerate;
626 {
return myAttributeLock; }
629 {
return &myCanGenerateDep; }
631 {
return &myIsGeneratedDep; }
633 {
return &myIsCookedDep; }
636 {
return &myPropagateGroup; }
641 void resetOwner()
override;
643 virtual int preCookLoop(
646 virtual bool preCook(
bool is_dirty,
bool has_filter);
647 virtual void postCook();
649 virtual void clearAllWorkItems();
650 virtual void clearWorkItem(
const PDG_WorkItem* work_item);
659 virtual bool cookWorkItem(
667 virtual bool cacheBuiltinParms(
670 bool dynamic_inputs);
671 virtual void addInputDeps(
PDG_Node* input_node);
672 virtual void addCommonDeps();
674 virtual bool requiresCookedInputs(
bool cook)
const;
682 void addPropagateDependencies(
690 void queueWorkItemResolutions(
694 void queueBatchWorkItemResolutions(
710 void updateInputRegeneration();
713 void prepareDirtyAll(
715 bool remove_outputs);
717 bool compactItems(
bool reset_index=
false);
721 bool skip_failed=
false)
const;
722 bool downstreamItems(
725 void clearOutputCache();
726 void updateModTimeCache();
728 template <
typename FieldType,
typename EvalType=FieldType>
733 const FieldType& default_value,
734 bool set_dirty =
true)
736 FieldType field_value = default_value;
738 paramValue(parm_name);
743 port_value->
value(eval_value);
745 (FieldType)(eval_value);
748 if (field == field_value)
752 if (set_dirty && myHasCachedParms)
static const UT_StringHolder theNameKey
The key for the node name when writing the node to JSON.
bool isBypassed() const
Returns true if the node is bypassed.
const UT_StringHolder & serviceName() const
SYS_AtomicCounter myActiveGenerates
PDG_ServiceResetType myLoopResetType
PDG_SortOptions mySortOptions
GLuint GLsizei const GLchar * message
PDGE_Dependency * isCookedDep()
virtual bool queueWorkItem(PDG_WorkItem *work_item)
PDGE_Dependency myIsCookedDep
PDGE_Dependency myIsGeneratedDep
std::pair< iterator, bool > insert(const value_type &value)
RegenerateReason
Regeneration reasons.
GLuint GLsizei const GLchar * label
RegenerateReason regenerateReason() const
PDG_ServiceResetWhen myLoopResetWhen
UT_Array< PDG_Dependency * > myDependencies
virtual bool syncWorkItem(PDG_WorkItem *work_item, const PDG_WorkItem *parent, const PDG_WorkItem *clone_target)
UT_TBBSpinLock myModTimeCacheLock
UT_TBBSpinLock myOutputCacheLock
The node is not bypassed.
PDG_File::Hash myLastStat
PDG_ServiceResetWhen loopResetWhen() const
Returns the loop block's service reset conditoon.
GLsizei const GLfloat * value
bool useServiceBlock() const
void setIsErrorHandlerBranch(bool error_handler)
Sets the error handler branch flag on this node.
const GLuint GLenum const void * binary
TargetedBy
Enumeration of targeting conditions.
State
Evaluation context state.
The item is uncooked and no cooked has been attempted yet.
bool canHaveWorkItems() const
void addSchedulerReference(PDG_Scheduler *scheduler)
void workItemsCopy(PDG_WorkItemArray &array, const Filter &filter) const
PDG_GraphContext * context() const
Returns the graph context that owns the node.
void setBypassState(BypassState state)
Sets the bypassed flag on this node.
bool isGenerating() const
const UT_StringHolder & name() const
Returns the node's unique name.
const PDG_SchedulerSet & schedulerReferences() const
Class which writes ASCII or binary JSON streams.
bool isErrorHandlerBranch() const
Returns true if the node is in an error handler branch.
UT_StringHolder debugName() const override
PDG_NodeOptions myNodeOptions
virtual void addWarning(const UT_StringHolder &message) const
Adds a warning to the node interface – implemented in subclasses.
PDG_SchedulerSet mySchedulerReferences
UT_StringHolder myServiceName
UT_StringMap< ModTimeCacheEntry > myModTimeCache
PDG_WorkItemArray myWorkItems
PDGE_PropagateGroup * propagateGroup()
bool updateBypassState(BypassState state)
Updates the bypass flag of this node, if the new state is higher.
PDG_NodeSet myStaticAncestors
bool isDynamicEval() const
PDG_NodeCallbackPtr myCallback
PDG_NodeStats myNodeStats
void clearSchedulerReferences()
PDG_NodeType
Enumeration of node types in a PDG graph.
int loopDepth() const
Returns the loop dpeth of the node.
void updateBuiltinField(PDG_NodeSet &dirty, const UT_StringHolder &parm_name, FieldType &field, const FieldType &default_value, bool set_dirty=true)
const PDG_SortOptions & sortOptions() const
Returns the node's sort options struct.
const PDG_NodeStats & stats() const
Returns the node's stat object.
UT_SharedPtr< PDG_NodeCallback > PDG_NodeCallbackPtr
const PDG_Node * myBeginNode
GLint GLint GLsizei GLint GLenum GLenum type
PDG_NodeArray myExtraInputs
bool isDynamicGeneration() const
int64 Hash
The file hash/modtime type.
RegenerateReason myRegenerateReason
bool isDynamicProp() const
UT_RWLock & attributeLock() const
PDG_NodeID getId() const
Returns this node's id, it matches the TOP node id.
void value(fpreal &value) const
void setIsErrorHandler(bool error_handler)
Sets the error handler flag on this node.
PDG_WorkItemState
Enum of possible work item states.
static const UT_StringHolder theParametersKey
The key for the parameters when writing the node to JSON.
constexpr auto set(type rhs) -> int
static const UT_StringHolder theSchedulerKey
The key for the scheduler name when writing the node to JSON.
UT_StringHolder myServiceName
#define UT_NON_COPYABLE(CLASS)
Define deleted copy constructor and assignment operator inside a class.
PDG_ServiceResetWhen
When service clients should be reset.
virtual void addError(const UT_StringHolder &message) const
Adds an error to the node interface – implemented in subclasses.
virtual PDG_WorkItemState updateOutputCache(PDG_WorkItem *work_item) const
PDG_NodeState
Node state, used for UI/progress reporting.
void applyDirty(bool remove_outputs)
Applies the stored dirty operation.
virtual int64 getMemoryUsage(bool inclusive) const
Returns the memory usage of this owner instance.
The node is in a bypassed subnetwork.
GLuint const GLchar * name
virtual const PDG_NodeInterface * templateInterface() const
The node will be dirtied and caches invalidated.
The node will be dirtied.
SYS_AtomicCounter myTotalGenerates
static const UT_StringHolder theInputsKey
The key for the input nodes when writing the node to JSON.
PDG_BatchWorkItemSet myBatchItems
Never queue work items in this node for cooking.
BypassState
Bypass state for the node.
PDG_GraphContext * myContext
bool myIsErrorHandlerBranch
BypassState bypassState() const
virtual bool shouldSchedule(const PDG_WorkItem *work_item) const
OIIO_UTIL_API bool rename(string_view from, string_view to, std::string &err)
PDGE_Dependency * isGeneratedDep()
bool hasErrors() const
Clears and checks the error flag.
The node should regenerate work items.
PDGE_PropagateGroup myPropagateGroup
int PDG_NodeID
Node ID type.
void setCallback(PDG_NodeCallbackPtr callback)
UT_TBBSpinLock myWorkItemLock
UT_RWLock myAttributeLock
Class to store JSON objects as C++ objects.
const PDG_WorkItemArray & workItems() const
PDG_NodeSubtype
Enumeration of node subtypes.
void updateRegenerateReason(RegenerateReason reason)
PDG_ServiceResetType myLoopResetType
PDGE_Dependency myCanGenerateDep
PDG_ServiceResetType loopResetType() const
Returns the loop block's service reset type.
PDG_ServiceResetWhen myLoopResetWhen
bool isErrorHandler() const
Returns true if the node is an error handler.
const PDG_NodeCallbackType * myTypeObject
No regeneration necessary.
Reader/Writer mutex class.
void setRegenerateReason(RegenerateReason reason)
PDGE_Dependency * canGenerateDep()
CookWhen
Enumerations of cook conditions.
PDG_Scheduler * myScheduler
BypassState myBypassState
static const UT_StringHolder theTypeKey
The key for the node type when writing the node to JSON.
UT_ArrayStringMap< PDG_CacheID > myOutputCache
PDG_PortType
Enumeration of node port types.
virtual const PDG_EventFilter & supportedEventTypes() const =0
Returns the list of supported event types for this emitter.
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
PDG_NodeCallback * callback() const