unix-conf/.emacs.d/elpa/ac-clang-20150906.1008/clang-server/ClangServer.hpp
2016-02-18 14:53:30 +01:00

133 lines
4.2 KiB
C++

/* -*- mode: c++ ; coding: utf-8-unix -*- */
/* last updated : 2015/09/05.04:13:59 */
/*
* Copyright (c) 2013-2015 yaruopooner [https://github.com/yaruopooner]
*
* This file is part of ac-clang.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef __CLANG_SERVER_HPP__
#define __CLANG_SERVER_HPP__
#define CLANG_SERVER_VERSION "server version 1.4.0"
/*================================================================================================*/
/* Comment */
/*================================================================================================*/
/*================================================================================================*/
/* Include Files */
/*================================================================================================*/
#include <memory>
#include <functional>
#include <unordered_map>
#include "ClangSession.hpp"
/*================================================================================================*/
/* Class */
/*================================================================================================*/
class ClangServer
{
public:
enum Status
{
kStatus_Running,
kStatus_Exit,
};
struct Specification
{
enum
{
kStreamBuffer_UnitSize = 1 * 1024 * 1024,
};
Specification( size_t StdinBufferSize = kStreamBuffer_UnitSize,
size_t StdoutBufferSize = kStreamBuffer_UnitSize,
const std::string& LogFile = std::string() ) :
m_StdinBufferSize( StdinBufferSize )
, m_StdoutBufferSize( StdoutBufferSize )
, m_LogFile( LogFile )
{
}
size_t m_StdinBufferSize;
size_t m_StdoutBufferSize;
std::string m_LogFile;
};
ClangServer( const Specification& specification = Specification() );
~ClangServer( void );
void ParseCommand( void );
// void SetLogFile( const std::string& LogFile );
private:
void ParseServerCommand( void );
void ParseSessionCommand( void );
// commands
void commandGetSpecification( void );
void commandGetClangVersion( void );
void commandSetClangParameters( void );
void commandCreateSession( void );
void commandDeleteSession( void );
void commandReset( void );
void commandShutdown( void );
private:
typedef std::unordered_map< std::string, std::function< void (ClangServer&) > > ServerHandleMap;
typedef std::unordered_map< std::string, std::function< void (ClangSession&) > > SessionHandleMap;
typedef std::unordered_map< std::string, std::shared_ptr< ClangSession > > Dictionary;
ClangContext m_Context;
ServerHandleMap m_ServerCommands;
SessionHandleMap m_SessionCommands;
Dictionary m_Sessions;
StreamReader m_Reader;
StreamWriter m_Writer;
uint32_t m_Status;
Specification m_Specification;
};
#endif // __CLANG_SERVER_HPP__
/*================================================================================================*/
/* EOF */
/*================================================================================================*/