Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_diff/token.c view on Meta::CPAN
/*
* token.c : routines for doing diffs
*
* ====================================================================
* 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.
* ====================================================================
*/
#include <apr.h>
#include <apr_pools.h>
#include <apr_general.h>
#include "svn_error.h"
#include "svn_diff.h"
#include "svn_types.h"
#include "diff.h"
/*
* Prime number to use as the size of the hash table. This number was
* not selected by testing of any kind and may need tweaking.
*/
#define SVN_DIFF__HASH_SIZE 127
struct svn_diff__node_t
{
svn_diff__node_t *parent;
svn_diff__node_t *left;
svn_diff__node_t *right;
apr_uint32_t hash;
svn_diff__token_index_t index;
void *token;
};
struct svn_diff__tree_t
{
svn_diff__node_t *root[SVN_DIFF__HASH_SIZE];
apr_pool_t *pool;
svn_diff__token_index_t node_count;
};
/*
* Returns number of tokens in a tree
*/
svn_diff__token_index_t
svn_diff__get_node_count(svn_diff__tree_t *tree)
{
return tree->node_count;
}
/*
* Support functions to build a tree of token positions
*/
void
svn_diff__tree_create(svn_diff__tree_t **tree, apr_pool_t *pool)
{
*tree = apr_pcalloc(pool, sizeof(**tree));
(*tree)->pool = pool;
(*tree)->node_count = 0;
}
static svn_error_t *
tree_insert_token(svn_diff__node_t **node, svn_diff__tree_t *tree,
void *diff_baton,
const svn_diff_fns2_t *vtable,
apr_uint32_t hash, void *token)
{
svn_diff__node_t *new_node;
svn_diff__node_t **node_ref;
svn_diff__node_t *parent;
int rv;
SVN_ERR_ASSERT(token);
parent = NULL;
node_ref = &tree->root[hash % SVN_DIFF__HASH_SIZE];
( run in 0.493 second using v1.01-cache-2.11-cpan-b50b6a40fd4 )