find.h revision c9b0acaf0a11eee6b0152c51d9633758ad8c662c
15f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// Copyright 2015 Google Inc. All rights reserved 25f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// 35f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// Licensed under the Apache License, Version 2.0 (the "License"); 45f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// you may not use this file except in compliance with the License. 55f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// You may obtain a copy of the License at 65f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// 75f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// http://www.apache.org/licenses/LICENSE-2.0 85f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// 95f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// Unless required by applicable law or agreed to in writing, software 105f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// distributed under the License is distributed on an "AS IS" BASIS, 115f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 125f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// See the License for the specific language governing permissions and 135f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji// limitations under the License. 145f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji 155f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji#ifndef FIND_H_ 165f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji#define FIND_H_ 175f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji 18a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji#include <memory> 195f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji#include <string> 20a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji#include <vector> 21a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji 22a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji#include "string_piece.h" 235f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji 245f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamajiusing namespace std; 255f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji 26a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamajiclass FindCond; 27a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji 28a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamajistruct FindCommand { 29a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji FindCommand(); 30c9b0acaf0a11eee6b0152c51d9633758ad8c662cShinichiro Hamaji ~FindCommand(); 31a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji 320876e09854a143f18fb7e2aa457c3762bf465265Shinichiro Hamaji bool Parse(const string& cmd); 330876e09854a143f18fb7e2aa457c3762bf465265Shinichiro Hamaji 34a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji StringPiece chdir; 35a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji StringPiece testdir; 36a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji vector<StringPiece> finddirs; 37a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji bool follows_symlinks; 38a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji unique_ptr<FindCond> print_cond; 39a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji unique_ptr<FindCond> prune_cond; 40a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji int depth; 41a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji}; 42a5a5ef6dbaa4ce7d0ba457a7df5e18327ff65b2bShinichiro Hamaji 435f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamajiclass FindEmulator { 445f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji public: 455f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji virtual ~FindEmulator() = default; 465f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji 47c9b0acaf0a11eee6b0152c51d9633758ad8c662cShinichiro Hamaji virtual bool HandleFind(const string& cmd, const FindCommand& fc, 48c9b0acaf0a11eee6b0152c51d9633758ad8c662cShinichiro Hamaji string* out) = 0; 495f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji 505f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji static FindEmulator* Get(); 515f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji 525f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji protected: 535f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji FindEmulator() = default; 545f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji}; 555f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji 565f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamajivoid InitFindEmulator(); 575f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji 585f57a99a879b60bc7e8cb6155c51bc026ed1d30dShinichiro Hamaji#endif // FIND_H_ 59