text: /** @file
   *
   *  A brief file description
   *
   *  @section license License
   *
   *  Licensed to the Apache Software Foundation (ASF) under one
   *  or more contributor license agreements.  See the NOTICE file
   *  distributed with this work for additional information
   *  regarding copyright ownership.  The ASF licenses this file
   *  to you 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.
   */
  
  #ifndef SOURCELOCATION_H_88F6E38C_ACBB_4EFE_8819_71FCB162AE9B
  #define SOURCELOCATION_H_88F6E38C_ACBB_4EFE_8819_71FCB162AE9B
  
  // The SourceLocation class wraps up a source code location, including
  // file name, function name, and line number, and contains a method to
  // format the result into a string buffer.
  
  #define MakeSourceLocation() SourceLocation(__FILE__, __FUNCTION__, __LINE__)
  
  class SourceLocation
  {
  public:
    const char *file;
    const char *func;
    int line;
  
    bool
    valid() const
    {
      return file && line;
    }
  
    SourceLocation(const SourceLocation &rhs) : file(rhs.file), func(rhs.func), line(rhs.line) {}
    SourceLocation(const char *_file, const char *_func, int _line) : file(_file), func(_func), line(_line) {}
    SourceLocation &
    operator=(const SourceLocation &rhs)
    {
      this->file = rhs.file;
      this->func = rhs.func;
      this->line = rhs.line;
      return *this;
    }
  
    char *str(char *buf, int buflen) const;
  };
  
  #endif /* SOURCELOCATION_H_88F6E38C_ACBB_4EFE_8819_71FCB162AE9B */
  