예제 #1
0
파일: reader.cpp 프로젝트: lyubomirv/pingus
ReaderObject
Reader::parse(std::istream& stream)
{
  int c = stream.get();
  stream.unget();
  if (c == '{')
  {
    Json::Reader reader;
    Json::Value root;
    if (reader.parse(stream, root))
    {
      return ReaderObject(std::make_shared<JsonReaderObjectImpl>(root));
    }
    else
    {
      log_error("json parse error: %1%", reader.getFormattedErrorMessages());
      return ReaderObject();
    }
  }
  else
  {
    try
    {
      auto sx = sexp::Parser::from_stream(stream);
      return ReaderObject(std::make_shared<SExprReaderObjectImpl>(std::move(sx)));
    }
    catch(std::exception const& err)
    {
      log_error("sexp parse error: %1%", err.what());
      return ReaderObject();
    }
  }
}
예제 #2
0
ReaderObject
FileReader::parse(std::istream& stream)
{
  int c = stream.get();
  stream.unget();
  if (c == '{')
  {
    Json::Reader reader;
    Json::Value root;
    if (reader.parse(stream, root))
    {
      return ReaderObject(std::make_shared<JsonReaderObjectImpl>(root));
    }
    else
    {
      log_error("json parse error: %1%", reader.getFormattedErrorMessages());
      return ReaderObject();
    }
  }
  else
  {
    std::shared_ptr<lisp::Lisp> sexpr = lisp::Parser::parse(stream, "<stream>");
    if (sexpr)
    {
      return ReaderObject(std::make_shared<SExprReaderObjectImpl>(sexpr->get_list_elem(0)));
    }
    else
    {
      log_error("sexpr parse error");
      return ReaderObject();
    }
  }
}
예제 #3
0
std::vector<ReaderObject>
JsonReaderCollectionImpl::get_objects() const
{
  std::vector<ReaderObject> result;
  for(Json::ArrayIndex i = 0; i < m_json.size(); ++i)
  {
    result.push_back(ReaderObject(std::make_shared<JsonReaderObjectImpl>(m_json[i])));
  }
  return result;
}
예제 #4
0
std::vector<ReaderObject>
SExprReaderCollectionImpl::get_objects() const
{
  std::vector<ReaderObject> lst;
  for(auto const& cur : sexp::ListAdapter(m_sx))
  {
    lst.push_back(ReaderObject(std::make_shared<SExprReaderObjectImpl>(cur)));
  }
  return lst;
}
예제 #5
0
파일: reader.cpp 프로젝트: lyubomirv/pingus
ReaderObject
Reader::parse(const std::string& filename)
{
  std::ifstream fin(filename);
  if (!fin)
  {
    return ReaderObject();
  }
  else
  {
    return parse(fin);
  }
}
예제 #6
0
bool
JsonReaderMappingImpl::read_object(const char* key, ReaderObject& value) const
{
  const Json::Value& element = m_json[key];
  if (element.isObject())
  {
    value = ReaderObject(std::make_shared<JsonReaderObjectImpl>(element));
    return true;
  }
  else
  {
    return false;
  }
}
예제 #7
0
bool
SExprReaderMappingImpl::read_object(const char* key, ReaderObject& value) const
{
  sexp::Value const* cur = get_subsection_item(key);
  if (cur)
  {
    value = ReaderObject(std::make_shared<SExprReaderObjectImpl>(*cur));
    return true;
  }
  else
  {
    return false;
  }
}
예제 #8
0
ReaderObject
ReaderDocument::get_root() const
{
  return ReaderObject(this, &m_sx);
}