/*
 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:   PPCache.h
 * Author: alain
 *
 * Created on April 23, 2017, 8:49 PM
 */

#ifndef PPCACHE_H
#define PPCACHE_H

#include "flatbuffers/flatbuffers.h"
#include "preproc_generated.h"
#include <cstdio> // For printing and file access.
#include "Cache.h"

namespace SURELOG {

class PPCache : Cache {
public:
    PPCache(PreprocessFile* pp);
    PPCache(const PPCache& orig);
    bool restore();
    bool save();
    virtual ~PPCache();
private:
    PreprocessFile* m_pp;
    std::string getCacheFileName_(std::string fileName = "");
    bool restore_(std::string cacheFileName);
    bool checkCacheIsValid_(std::string cacheFileName);
    bool m_isPrecompiled;
};

};

#endif /* PPCACHE_H */





