/*
 Copyright 2019 Alain Dargelas
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */

/* 
 * File:   PythonAPICache.h
 * Author: alain
 *
 * Created on May 28, 2017, 10:49 PM
 */

#ifndef PYTHONAPICACHE_H
#define PYTHONAPICACHE_H

#include "flatbuffers/flatbuffers.h"
#include "python_api_generated.h"
#include <cstdio> 
#include "Cache.h"

namespace SURELOG {

class PythonAPICache : Cache {
public:
    PythonAPICache(PythonListen* listener);
    PythonAPICache(const PythonAPICache& orig);
    bool restore();
    bool save();
    bool isValid();
    virtual ~PythonAPICache();
private:
    PythonListen* m_listener;
    std::string getCacheFileName_(std::string fileName = "");
    bool restore_(std::string cacheFileName);
    bool checkCacheIsValid_(std::string cacheFileName);
};

};


#endif /* PYTHONAPICACHE_H */





