Author: nwellnhof
Date: Thu Mar 22 18:44:05 2012
New Revision: 1303968
URL: http://svn.apache.org/viewvc?rev=1303968&view=rev
Log:
Store list of all classes in a member variable
Modified:
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c
Modified:
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c
URL:
http://svn.apache.org/viewvc/incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c?rev=1303968&r1=1303967&r2=1303968&view=diff
==============================================================================
--- incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c
(original)
+++ incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c
Thu Mar 22 18:44:05 2012
@@ -44,6 +44,9 @@ struct CFCHierarchy {
size_t num_trees;
CFCFile **files;
size_t num_files;
+ CFCClass **classes;
+ size_t classes_cap;
+ size_t num_classes;
};
static void
@@ -79,13 +82,17 @@ CFCHierarchy_init(CFCHierarchy *self, co
if (!source || !strlen(source) || !dest || !strlen(dest)) {
CFCUtil_die("Both 'source' and 'dest' are required");
}
- self->source = CFCUtil_strdup(source);
- self->dest = CFCUtil_strdup(dest);
- self->trees = (CFCClass**)CALLOCATE(1, sizeof(CFCClass*));
- self->num_trees = 0;
- self->files = (CFCFile**)CALLOCATE(1, sizeof(CFCFile*));
- self->num_files = 0;
- self->parser = CFCParser_new();
+ self->source = CFCUtil_strdup(source);
+ self->dest = CFCUtil_strdup(dest);
+ self->trees = (CFCClass**)CALLOCATE(1, sizeof(CFCClass*));
+ self->num_trees = 0;
+ self->files = (CFCFile**)CALLOCATE(1, sizeof(CFCFile*));
+ self->num_files = 0;
+ self->classes_cap = 10;
+ self->classes = (CFCClass**)CALLOCATE(
+ (self->classes_cap + 1), sizeof(CFCClass*));
+ self->num_classes = 0;
+ self->parser = CFCParser_new();
return self;
}
@@ -99,6 +106,7 @@ CFCHierarchy_destroy(CFCHierarchy *self)
}
FREEMEM(self->trees);
FREEMEM(self->files);
+ FREEMEM(self->classes);
FREEMEM(self->source);
FREEMEM(self->dest);
CFCBase_decref((CFCBase*)self->parser);
@@ -161,10 +169,6 @@ S_parse_cf_files(CFCHierarchy *self) {
all_source_paths = S_find_cfh(self->source, all_source_paths, 0);
const char *source_dir = self->source;
size_t source_dir_len = strlen(source_dir);
- size_t all_classes_cap = 10;
- size_t num_classes = 0;
- CFCClass **all_classes = (CFCClass**)MALLOCATE(
- (all_classes_cap + 1) * sizeof(CFCClass*));
char *source_class = NULL;
size_t source_class_max = 0;
@@ -208,25 +212,25 @@ S_parse_cf_files(CFCHierarchy *self) {
CFCClass **classes_in_file = CFCFile_classes(file);
for (size_t j = 0; classes_in_file[j] != NULL; j++) {
- if (num_classes == all_classes_cap) {
- all_classes_cap += 10;
- all_classes = (CFCClass**)REALLOCATE(
- all_classes,
- (all_classes_cap + 1) * sizeof(CFCClass*));
+ if (self->num_classes == self->classes_cap) {
+ self->classes_cap += 10;
+ self->classes = (CFCClass**)REALLOCATE(
+ self->classes,
+ (self->classes_cap + 1) * sizeof(CFCClass*));
}
- all_classes[num_classes++] = classes_in_file[j];
+ self->classes[self->num_classes++] = classes_in_file[j];
}
CFCBase_decref((CFCBase*)file);
}
- all_classes[num_classes] = NULL;
+ self->classes[self->num_classes] = NULL;
// Wrangle the classes into hierarchies and figure out inheritance.
- for (int i = 0; all_classes[i] != NULL; i++) {
- CFCClass *klass = all_classes[i];
+ for (int i = 0; self->classes[i] != NULL; i++) {
+ CFCClass *klass = self->classes[i];
const char *parent_name = CFCClass_get_parent_class_name(klass);
if (parent_name) {
for (size_t j = 0; ; j++) {
- CFCClass *maybe_parent = all_classes[j];
+ CFCClass *maybe_parent = self->classes[j];
if (!maybe_parent) {
CFCUtil_die("Parent class '%s' not defined", parent_name);
}
@@ -243,7 +247,6 @@ S_parse_cf_files(CFCHierarchy *self) {
}
}
- FREEMEM(all_classes);
for (int i = 0; all_source_paths[i] != NULL; i++) {
FREEMEM(all_source_paths[i]);
}