`
pleasetojava
  • 浏览: 730038 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

测试语法高亮

阅读更多
// $Id: Mem_Map_Test.cpp 80826 2008-03-04 14:51:23Z wotte $

// ============================================================================
//
// = LIBRARY
//    tests
//
// = FILENAME
//    Mem_Map_Test.cpp
//
// = DESCRIPTION
//      This test illustrates the use of ACE_Mem_Map to reverse a
//      file. The test first creates a dummy file for testing, then
//      reverses the file and then reverses it again to get back the
//      original file.
//
// = AUTHOR
//    Prashant Jain <pjain></pjain>
//
// ============================================================================

#include "test_config.h"
#include "ace/Mem_Map.h"
#include "ace/ACE.h"
#include "ace/OS_NS_string.h"
#include "ace/OS_NS_unistd.h"
#include "ace/OS_NS_fcntl.h"
#include "ace/OS_Memory.h"

ACE_RCSID(tests, Mem_Map_Test, "Mem_Map_Test.cpp,v 4.36 2003/11/01 11:15:25 dhinton Exp")

#if !defined (ACE_LACKS_MMAP)

static const char ACE_ALPHABET[] = "abcdefghijklmnopqrstuvwxyz";
static const int LINE_LENGTH = 10;
static const int NUM_LINES = 15;

static void
reverse_file (ACE_HANDLE file_handle,
              char *array,
              size_t size)
{
  int count = 0;
  // LynxOS 3.0.0/PowerPC needs the volatile qualifier, with -O2
  // optimization enabled and without ACE_HAS_INLINE.
  volatile size_t i = size;
  --i;

  if (array[i] == '\0')
    array[i] = '\n';

  while (i-- > 0)
    {
      if (array[i] == '\n')
        {
          ACE_OS::write (file_handle, array + i + 1, count);
          ACE_OS::write (file_handle, ACE_TEXT ("\n"), 1);
          count = 0;
        }
      else
        count++;
    }
  ACE_OS::write (file_handle, array, count+1);
}

static int
create_test_file (ACE_TCHAR *filename, int line_length, int num_lines)
{
  char *mybuf = 0;

  ACE_NEW_RETURN (mybuf, char[line_length + 1], -1);
  const char *c = ACE_ALPHABET;
  const char *d = c;
#if defined (__QNXNTO__) || (defined (ACE_VXWORKS) && (ACE_VXWORKS // For NTO has to applied to open the file, as Mem_Map can map only shared memory
  ACE_Mem_Map mmap_4_open;
  mmap_4_open.open (filename, O_RDWR | O_CREAT | O_TRUNC, ACE_DEFAULT_FILE_PERMS);
  ACE_HANDLE file_handle  = mmap_4_open.handle();
#else
  ACE_HANDLE file_handle = ACE_OS::open (filename,
                                         O_RDWR | O_CREAT | O_TRUNC,
                                         ACE_DEFAULT_FILE_PERMS);
#endif
  if (file_handle  == ACE_INVALID_HANDLE)
    {
      delete [] mybuf;
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("Open failed for %s\n"),
                         filename),
                        -1);
    }

  for (int j = 0; j for (int i = 0; i if (ACE_OS::write (file_handle, mybuf, line_length) != line_length)
        {
          delete [] mybuf;
          ACE_ERROR_RETURN ((LM_ERROR,
                             ACE_TEXT ("%p (%d) \n"),
                             ACE_TEXT ("Write to file failed:"),
                             errno,
                             filename),
                            -1);
        }

      if (ACE_OS::write (file_handle, ACE_TEXT ("\n"), 1) != 1)
        {
          delete [] mybuf;
          ACE_ERROR_RETURN ((LM_ERROR,
                             ACE_TEXT ("write to file %s failed\n"),
                             filename),
                            -1);
        }
    }
#if defined (__QNXNTO__) || (defined (ACE_VXWORKS) && (ACE_VXWORKS else
  ACE_OS::close (file_handle);
#endif

  delete [] mybuf;
  return 0;
}

#endif /* !ACE_LACKS_MMAP */

int
run_main (int, ACE_TCHAR *[])
{
  ACE_START_TEST (ACE_TEXT ("Mem_Map_Test"));

#if !defined (ACE_LACKS_MMAP)

#if defined (__QNXNTO__) || (defined (ACE_VXWORKS) && (ACE_VXWORKS mmap on QNX Neutrino/VxWorks can map only shared memory files\n")));
#endif

  // = Initialize the temporary variable names

  ACE_TCHAR test_file[MAXPATHLEN + 1];
  ACE_TCHAR temp_file1[MAXPATHLEN + 1];
  ACE_TCHAR temp_file2[MAXPATHLEN + 1];

  // Get the temporary directory
  // - 18 is for the filenames, ace_mem_map_temp_1 is the longest
  if (ACE::get_temp_dir (test_file, MAXPATHLEN - 18) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("Temporary path too long\n")),
                      -1);

  // Copy the temp directory to the other variables
  ACE_OS::strcpy (temp_file1, test_file);
  ACE_OS::strcpy (temp_file2, test_file);

  // Add the filenames to the end
  ACE_OS::strcat (test_file,
                  ACE_TEXT ("ace_mem_map_test"));
  ACE_OS::strcat (temp_file1,
                  ACE_TEXT ("ace_mem_map_temp_1"));
  ACE_OS::strcat (temp_file2,
                  ACE_TEXT ("ace_mem_map_temp_2"));

  // First create a test file to work on
  if (create_test_file (test_file, LINE_LENGTH, NUM_LINES) != 0)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("Create test file failed\n")),
                      -1);
  ACE_Mem_Map mmap;

  // First memory map the test file
  if (mmap.map (test_file) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("%n: %p %s\n%a"),
                       ACE_TEXT ("mmap"),
                       test_file),
                      -1);

  // Now create a temporary file for intermediate processing
#if defined (__QNXNTO__) || (defined (ACE_VXWORKS) && (ACE_VXWORKS else
  ACE_HANDLE temp_file_handle = ACE_OS::open (temp_file1,
                                              O_RDWR | O_TRUNC | O_CREAT,
                                              ACE_DEFAULT_FILE_PERMS);
#endif

  if (temp_file_handle == ACE_INVALID_HANDLE)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("Open failed\n")),
                      -1);

  // Reverse the original file and write the output to the temporary
  // file.
  reverse_file (temp_file_handle,
                (char *) mmap.addr (),
                mmap.size ());
#if defined (__QNXNTO__) || (defined (ACE_VXWORKS) && (ACE_VXWORKS else
  ACE_OS::close (temp_file_handle);
#endif

  ACE_Mem_Map temp_mmap;

  // Now memory map the temporary file
  if (temp_mmap.map (temp_file1) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("%n: %p %s\n%a"),
                       ACE_TEXT ("mmap"),
                       temp_file1),
                      -1);
#if defined (__QNXNTO__) || (defined (ACE_VXWORKS) && (ACE_VXWORKS else
  temp_file_handle = ACE_OS::open (temp_file2,
                                   O_RDWR | O_TRUNC | O_CREAT,
                                   ACE_DEFAULT_FILE_PERMS);
#endif
  if ( temp_file_handle == ACE_INVALID_HANDLE)

    ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Open failed\n")), -1);

  // Now reverse the temporary file and write everything to the second
  // temporary file.
  reverse_file (temp_file_handle,
                (char *) temp_mmap.addr (),
                temp_mmap.size ());
#if defined (__QNXNTO__) || (defined (ACE_VXWORKS) && (ACE_VXWORKS else
  ACE_OS::close (temp_file_handle);
#endif

  // Memory map the second temporary file
  ACE_Mem_Map temp_mmap2;

  if (temp_mmap2.map (temp_file2) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("%n: %p %s\n%a"),
                       ACE_TEXT ("mmap"),
                       temp_file2),
                      -1);

  // Now do a memcmp -- the orig file and the second temporary file
  // should be identical.
  ACE_ASSERT (ACE_OS::memcmp (temp_mmap2.addr (),
                              mmap.addr (),
                              mmap.size ()) == 0);

  // Delete the test file
  mmap.remove ();

  // Delete ACE_TEMP_TEST_FILE
  temp_mmap.remove ();

  // Delete ACE_TEMP_TEST_FILE_2
  temp_mmap2.remove ();

#else /* !ACE_LACKS_MMAP */

  ACE_ERROR ((LM_INFO,
              ACE_TEXT ("mmap is not supported on this platform\n")));

#endif /* !ACE_LACKS_MMAP */

  ACE_END_TEST;
  return 0;
}
分享到:
评论

相关推荐

    用具体的例子来探讨texstudio的语法高亮1

    ### 使用TexStudio中的语法高亮功能详解 #### 一、前言 在现代文本编辑器领域,TexStudio作为一款颇受欢迎的LaTeX编辑器,以其强大的功能和良好的用户体验获得了广泛的应用。特别是在学术界和科研领域,它凭借其...

    vim go 语法高亮

    在Go语言的开发环境中,Vim可以通过安装特定的插件来增强对Go语言的支持,其中包括语法高亮功能。"vim go 语法高亮"这个主题正是关于如何在Vim中实现Go语言代码的色彩突出显示,提高代码的可读性和编辑体验。 Go...

    polyglot-readme:用于测试语法高亮的自述文件

    适合测试语法高亮主题。 猛击 #! /bin/bash # ##### BEGIN CONFIG ACCEPTED_HOSTS= " /root/.hag_accepted.conf " BE_VERBOSE=false # ##### END CONFIG if [ " $UID " -ne 0 ] then echo " Superuser rights is ...

    语法高亮(DISCUZ)

    5. **测试和调整**:发布一个带有代码的测试帖子,检查语法高亮效果是否正常。如果不满意,可以调整CSS样式或JavaScript配置以达到理想效果。 语法高亮不仅可以提升用户的阅读体验,还能够提高论坛的技术氛围。对于...

    WPS 2009文字处理软件语法高亮插件

    本插件是为WPS 2009文字处理软件开发的语法高亮插件,主要功能有: 1.语法高亮,目前支持的语言有C++/C#/JAVA,将陆续支持其它语言 2.自定义高亮色彩,令您插入到文档的代码显示最具个性 3.可选可调的背景着色,突出...

    jquery语法高亮插件

    **jQuery语法高亮插件详解** 在Web开发中,为了让代码更具可读性和美观性,开发者通常会使用语法高亮工具。"jQuery语法高亮插件"是一个专门为jQuery代码提供色彩鲜明、易于阅读的显示效果的插件。该插件能够帮助...

    Notepad++里设置scala的语法高亮(包含使用说明)

    它支持多种编程语言,并且允许用户自定义语言的语法高亮,以提升代码的可读性。然而,Notepad++默认并未内置Scala语言的语法高亮支持,这可能会对Scala开发者造成一些不便。本文将详细介绍如何在Notepad++中设置...

    c/c++/java关键字语法高亮分析器

    在编程领域,语法高亮是提高代码可读性和编辑体验的重要功能。本项目是一个使用C语言编写的,针对C/C++/Java关键字进行语法高亮分析的工具。它旨在为开发者提供与Visual Studio 2008和Eclipse等专业集成开发环境...

    linux-为Zsh提供类似于Fishshell的语法高亮

    6. **测试效果**:现在,重启Zsh或打开一个新的终端窗口,输入命令,你应该能看到语法高亮效果。不同的命令元素会用不同的颜色显示,如关键字、变量、函数等。 7. **优化设置**:`zsh-syntax-highlighting`插件提供...

    ACE MySQL在线编辑器插件,能自动补全和语法高亮

    开发者可以在这个页面上加载编辑器,查看其工作状态,测试代码补全和语法高亮效果是否符合预期。 在实际应用中,这样的MySQL在线编辑器插件可以帮助开发者轻松完成以下任务: - 实时编写和执行SQL查询,查看结果。...

    nesC for notepad++,nesC语言在notepad++ 中的语法高亮显示插件,有安装方法。目的是帮助和我一样发愁的人

    Notepad++ 是一款广受欢迎的免费源代码编辑器,支持多种编程语言,并且具有语法高亮、代码折叠和宏等功能。然而,Notepad++ 默认并不支持nesC的语法高亮。因此,为了在Notepad++中获得nesC的友好开发环境,我们需要...

    让source insight支持AT&T汇编语法高亮

    ### 让Source Insight支持AT&T汇编语法高亮 #### 背景介绍 Source Insight是一款功能强大的编辑器,能够帮助开发者高效地进行代码编写、分析及管理等工作。它不仅支持多种编程语言,还能通过自定义配置来扩展对特定...

    微信小程序开发助手forVSCode代码提示语法高亮

    这款插件的主要功能是提供代码提示和语法高亮,极大地提升了开发者在编写小程序代码时的效率和舒适度。 代码提示功能是开发工具中的关键特性,它能自动补全代码,减少手动输入,避免拼写错误。对于微信小程序来说,...

    VS的JS语法检查插件、高亮显示插件、折叠插件、单元测试插件

    在VS中,有四类插件特别受欢迎:JS语法检查插件、高亮显示插件、折叠插件以及单元测试插件。下面将详细介绍这些插件的功能、作用以及如何使用它们。 1. **JS语法检查插件**: 这类插件的主要任务是实时检查...

    Python-litecli一个SQLite数据库的命令行客户端具有自动完成和语法高亮显示功能

    源码的结构通常包括主程序文件、配置文件、测试用例等,你可以借此了解Python的模块化设计、命令行参数处理、数据库接口使用以及如何实现命令行界面的自动完成和语法高亮。 总的来说,litecli是Python开发中的一个...

    WPS语法高亮插件源代码(C++实现)

    在编程世界中,语法高亮是一项非常重要的功能,它能够帮助程序员更好地阅读和理解代码,减少错误,并提高编码效率。WPS,全称是“Writing PostScript”,在这里指的是金山公司的办公软件套件,包括文字处理、电子...

    [分享]一个基于WPF的语法高亮控件.

    【标题】:“基于WPF的语法高亮控件”是一个专为Windows Presentation Foundation(WPF)框架设计的组件,用于在用户界面中显示代码时实现语法的色彩突出显示。这个控件不仅美观,而且功能强大,能提升开发者的用户...

    Minted宏包中实现matlab语法高亮的测试文件

    本文件是一个使用Minted宏包实现MATLAB语法高亮的测试案例,编译环境是MikTeX 2.9在Windows 7操作系统下,通过XeLaTeX编译器来完成。下面我们将详细介绍这个过程以及相关的知识点。 首先,MikTeX是一个完整的开源...

    显示行号的语法高亮编辑器

    在IT领域,编辑器是开发人员日常工作中不可或缺的工具,其中“显示行号的语法高亮编辑器”尤其受到欢迎。这种编辑器不仅提供基本的文本编辑功能,还能帮助程序员更高效地阅读和理解代码,因为它们能以不同的颜色和...

    Editplus语法高亮实现是Python 编辑调试环境

    《EditPlus中的Python语法高亮与编辑调试环境详解》 在编程世界中,拥有一个功能强大的文本编辑器对于提升开发效率至关重要。EditPlus是一款广泛使用的轻量级文本编辑器,它支持多种编程语言,并允许用户自定义语法...

Global site tag (gtag.js) - Google Analytics