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