#ifndef ABCIMPORT_ALEMBIC_NODE_H_
#define ABCIMPORT_ALEMBIC_NODE_H_
#include "NodeIteratorVisitorHelper.h"
#include <maya/MDataHandle.h>
#include <maya/MDGContext.h>
#include <maya/MPlug.h>
#include <maya/MPlugArray.h>
#include <maya/MPxNode.h>
#include <maya/MStatus.h>
#include <maya/MString.h>
#include <set>
#include <vector>
#include <string>
{
public:
    AlembicNode() : mFileInitialized(0), mDebugOn(false)
    {
        mCurTime = DBL_MAX;
        
        
        
        
        
        
        
        
        
        mOutRead = std::vector<bool>(9, false);
    }
    virtual ~AlembicNode() {}
    
    
    void setReaderPtrList(const WriterData & iData)
    {
        mData = iData;
    }
    
    
    static MObject mOutCameraArrayAttr;
 
    static MObject mOutNurbsCurveGrpArrayAttr;
 
    static MObject mOutNurbsSurfaceArrayAttr;
 
    static MObject mOutTransOpArrayAttr;
 
    static MObject mOutLocatorPosScaleArrayAttr;
 
    
    
    
    
    static void* creator() { return (new AlembicNode()); }
    
    
    
    
                                           bool unresolvedName,
                                           bool markCouldBeImageSequence) const;
    void   setDebugMode(bool iDebugOn){ mDebugOn = iDebugOn; }
    void   setIncludeFilterString(
const MString & iIncludeFilterString)
 
    {
        mIncludeFilterString = iIncludeFilterString;
    }
    void   setExcludeFilterString(
const MString & iExcludeFilterString)
 
    {
        mExcludeFilterString = iExcludeFilterString;
    }
private:
    
    double computeAdjustedTime(const double inputTime,
                               const double speed,
                               const double timeOffset);
    
    enum
    {
        PLAYTYPE_HOLD = 0,
        PLAYTYPE_LOOP,
        PLAYTYPE_REVERSE,
        PLAYTYPE_BOUNCE
    };
    double computeRetime(const double inputTime,
                         const double firstTime,
                         const double lastTime,
                         const short playStyle);
    double getFPS();
    
    bool    mFileInitialized;
    
    
    bool    mSubDInitialized;
    bool    mPolyInitialized;
    double   mSequenceStartTime;
    double   mSequenceEndTime;
    double   mCurTime;
    bool    mDebugOn;
    
    
    
    std::vector<bool> mOutRead;
    bool    mConnect;
    bool    mCreateIfNotFound;
    bool    mRemoveIfNoUpdate;
    WriterData mData;
};
#endif  // ABCIMPORT_ALEMBIC_NODE_H_